Java基础语法知识 二 Java基础语法

Java基础语法(二)合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下 。——《道德经》

目录

  • Java基础语法(二)
      • 十、用户交互 Scanner 类(引用数据类型)
      • 十一、随机数类 Random(引用数据类型)(扩展)
      • 十二、顺序结构
      • 十三、选择结构
        • (一)if 条件语句
        • (二) if ... else 条件语句
        • (三)if ... else if ...多分支语句
        • (四)嵌套的 if 条件语句
        • (五)switch 多选择结构
      • 十四、循环结构
        • (一)while 循环语句
        • (二)do...while 循环语句
        • (三)for循环
        • (四)增强 for 循环
      • 十五、跳转语句
        • (一)break 语句
        • (二)continue 语句
        • (三)return语句
        • (四)关于带标签的break和continue(扩展,不推荐使用)

十、用户交互 Scanner 类(引用数据类型)
  1. 从 Java 5 后引入 java.util.Scanner 这一个包,我们可以通过 Scanner 这一个类来获取用户的输入 。
  2. 基本语法:
    import java.util.Scanner; //使用Scanner需要先导包 ...... Scanner scanner = new Scanner(System.in);
  3. 通过 Scanner 类的 next() 和 nextLine() 方法获取输入的字符串,在读取前一般需要使用 hasNext() 或 hasNextLine() 判断是否还有输入的数据 。
    next():1.一定要读取到有效字符后才能结束输入 。2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉 。3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符 。4.next()不能得到带有空格的字符串!nextLine():1.以 Enter 为结束符,即nextLine()方法返回的是输入回车之前的所有字符 。2.nextLine()可以获取空白!
  4. 用完 Scanner (或者其他 IO 流的类),如果不关闭会一直占用资源,所以用完就关闭是一个好习惯 。
    关闭 Scanner:
    Scanner s = new Scanner(System.in); ......s.close(); //关闭 Scanner
  5. Scanner 的进阶使用 。
    hasNext():用来是否还有输入的字符串next():用来接受控制台录入的字符串hasNextInt() :用来是否还有输入的整数nextInt():用来接受控制台录入的整数hasNextFloat() :用来是否还有输入的浮点数nextFloat():用来接受控制台录入的浮点数hasNextDouble() :用来是否还有输入的浮点数nextDouble():用来接受控制台录入的浮点数
其中,hasNextFloat() 和 hasNextDouble() 功能基本相同,但特别的是,当控制台输入的不管是小数还是整数,这两个方法的结果都返回 true,并且会把输入的整数变成小数 。
而 hasNextInt() 只有在控制台输入的是整数才返回 true 。
import java.util.Scanner;public class demo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int i = 0;double d = 0.0;if(scanner.hasNextInt()){i = scanner.nextInt();System.out.println("i = "+i);}else{System.out.println("输入的不是整数!");}if(scanner.hasNextDouble()){d = scanner.nextDouble();System.out.println("d = "+d);}else{System.out.println("输入的不是小数!");}scanner.close();}}上述代码的三种结果:1.输入整数:20//键盘输入i = 2020//键盘输入d = 20.02.输入小数:3.14//键盘输入输入的不是整数!d = 3.143.输入字符串(非数字)hello//键盘输入输入的不是整数!输入的不是小数!结果分析:
1.输入整数:
当输入第一个20时,由于输入的是整数,第一个20被scanner.nextInt() 接收并赋值给 i 并输出 i = 20 。
此时程序 scanner.hasNextDouble() 等待控制台再次输入,所以再次输入第二个20,被scanner.nextDouble() 接收并赋值给 d 并输出 d = 20.0 。
2.输入小数:
输入 3.14 时,由于不是整数,无法被scanner.nextInt() 接收并赋值,所以输出 “ 输入的不是整数!” 。
由于输入的 3.14还没被接收,所以会继续给scanner.nextDouble() 判断和接收 。
3.输入字符串:
输入字符串 hello 时,在整个程序中,既没被scanner.nextInt() 接收也没被scanner.nextDouble() 接收 。
原因分析:
为什么输入整数,scanner.nextDouble()返回 true 并且将整数转换为 double 类型的小数?
这就得对scanner.nextDouble()的源码进行分析 。(按住Ctrl键+点击源程序的scanner.nextDouble()方法查看源代码)
Java基础语法知识 二 Java基础语法

文章插图
Double.parseDouble()是把括号里面String类型的内容变成double类型 。
也就是说,当我们在控制台输入整数20时,它在程序中会先被转换为String 类型的字符串赋值给 s,接着通过Double.parseDouble()是把括号里面String类型的字符串 s 变成double类型然后返回,所以整数20就转换成了double类型的20.0 。
为什么输入字符串,scanner.nextDouble()返回 false?
这是因为源代码中 catch 抛出了一个NumberFormatException(数字格式化异常),查看字符串里面夹杂着string或者其他类型 。当输入字符串时,便会返回 false。所以,我们在使用控制台手动输入小数时,不能在小数后面加上 F 或 D,否则报错 。但是在程序中定义数字则可以 。
十一、随机数类 Random(引用数据类型)(扩展)Random类,它可以产生多种数据类型的随机数,在这里主要介绍生成整数与小数的方式 。
  • public int nextInt(int maxValue) 产生 [0,maxValue) 范围的随机整数,包含0,不包含maxValue;
  • public double nextDouble() 产生 [0,1) 范围的随机小数,包含0.0,不包含1.0 。
//Random 使用方法import java.util.Random; //导包......//Random 变量名 = new Random();Random r = new Random();例子:
import java.util.Random;public class RandomDemo { public static void main(String[] args) {// 创建Random类的实例Random r = new Random();// 得到0-100范围内的随机整数,将产生的随机整数赋值给i变量int i = r.nextInt(100);//得到0.0-1.0范围内的随机小数,将产生的随机小数赋值给d变量double d = r.nextDouble();System.out.println(i);System.out.println(d);}}十二、顺序结构
  • Java包含顺序结构、选择结构和循环结构 。
  • Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行 。
  • 顺序结构是最简单的算法结构 。
十三、选择结构(一)if 条件语句
  • if 语句可以单独判断表达式的结果,如果满足某种条件就进行某种处理 。
  • 语法:
    if(布尔表达式){//如果不二表达式为true执行的语句}
  • 图示:
    Java基础语法知识 二 Java基础语法

    文章插图
  • 【Java基础语法知识 二 Java基础语法】例子:
    int a = 10;if(a > 10){return true; } return false
(二) if ... else 条件语句
  • if 语句后面可以跟 else 语句,只有当 if 语句的布尔表达式值为 false 时,else 语句块才会被执行 。
  • 语法:
    if(布尔表达式){......//如果布尔表达式的值为true执行的语句}else{......//如果布尔表达式的值为false执行的语句}
  • 图示:
    Java基础语法知识 二 Java基础语法

    文章插图
  • 例子:
    int a = 10; int b = 11; if(a >= b){System.out.println("a >= b"); }else{System.out.println("a < b");}
(三)if ... else if ...多分支语句
  • if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况 。
  • 使用 if,else if,else 语句的时候,需要注意下面几点:
    1. if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后 。
    2. if 语句可以有若干个 else if 语句,它们必须在 else 语句之前 。
    3. 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行 。
  • 语法:
    if(布尔表达式 1){//如果布尔表达式 1的值为true执行代码}else if(布尔表达式 2){//如果布尔表达式 2的值为true执行代码}else if(布尔表达式 3){//如果布尔表达式 3的值为true执行代码}else {//如果以上布尔表达式都不为true执行代码}
  • 图示:
    Java基础语法知识 二 Java基础语法

    文章插图
  • 例子:
    public class Test {public static void main(String args[]){int grade = 80;if(grade >= 85){System.out.print("优秀");}else if(grade >= 75){System.out.print("良好");}else if(grade >= 60){System.out.print("及格");}else{System.out.print("不及格");}}}
(四)嵌套的 if 条件语句
  • 使用嵌套的 if…else 语句是合法的 。也就是说可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句 。
  • 语法:
if(布尔表达式 1){////如果布尔表达式 1的值为true执行代码if(布尔表达式 2){////如果布尔表达式 2的值为true执行代码}}
  • 例子
    public class Test {public static void main(String args[]){int x = 30;int y = 10;if( x == 30 ){if( y == 10 ){System.out.print("X = 30 and Y = 10");}}}}
(五)switch 多选择结构
  • switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 。
  • 语法:
    switch(表达式){case value1:...//执行语句break; //可选case value2:...//执行语句break; //可选......default:...//执行语句}
  • switch case 语句有如下规则:
    1. switch 语句中的变量类型可以是: byte、short、int 或者 char 。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量 。
    2. switch 语句可以拥有多个 case 语句 。每个 case 后面跟一个要比较的值和冒号 。
    3. 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句 。
    4. 当遇到 break 语句时,switch 语句终止 。程序跳转到 switch 语句后面的语句执行 。case 语句不必须要包含 break 语句 。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句 。
    5. switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个) 。default 在没有 case 语句的值和变量值相等的时候执行 。default 分支不需要 break 语句 。
  • 例子:
    public class Test {public static void main(String args[]){int i = 1;switch(i){case 0:System.out.println("0");case 1:System.out.println("1");case 2:System.out.println("2");case 3:System.out.println("3"); break;default:System.out.println("default");}}}/*输出为:123*/
十四、循环结构Java中有三种主要的循环结构:
  • while 循环
  • do…while 循环
  • for 循环
在 Java5 中引入了一种主要用于数组的增强型 for 循环 。
(一)while 循环语句
  • while语句会反复地进行条件判断,只要条件成立,{ } 内的语句就会执行,直到条件不成立,while循环就结束 。
  • 语法:
    while( 布尔表达式 ) {//循环内容}
  • 图示:
    Java基础语法知识 二 Java基础语法

    文章插图
  • 例子:
    public class Test {public static void main(String[] args) {int x = 1;while( x < 4 ) {System.out.println("x = " + x );x++;}}}/*输出:x = 1x = 2x = 3 */
(二)do...while 循环语句
  • do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次 。
  • 语法:
do {//代码语句}while(布尔表达式);注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了 。如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false 。
  • 图示:
    Java基础语法知识 二 Java基础语法

    文章插图
  • 例子:
    public class Test {public static void main(String[] args){int x = 4;do{System.out.println("x = " + x );x——;}while( x > 0 );}}/*输出:x = 4x = 3x = 2x = 1*/
(三)for循环
  • for循环执行的次数是在执行前就确定的 。语法格式如下:
for(初始化; 布尔表达式; 操作表达式) {//代码语句}
  • 具体执行流程:
    for(one;two;three){four;}/*第一步,执行one第二步,执行two第三步,执行four第四步,执行three,然后重复执行第二步第五步,退出循环*/
  • 例子:
    public class Test {public static void main(String[] args) {for(int x = 1; x < 4; x++) {System.out.println("x = " + x );}}}/*输出:x = 1x = 2x = 3 */
(四)增强 for 循环
  • Java5 引入了一种主要用于数组或集合的增强型 for 循环 。
  • 语法:
    for(声明语句 : 表达式){//代码句子}声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配 。其作用域限定在循环语句块,其值与此时数组元素的值相等 。
    表达式:表达式是要访问的数组名,或者是返回值为数组的方法 。
  • 例子:
    public class Test {public static void main(String[] args){int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ){System.out.print( x );System.out.print(",");}System.out.print("\n");String [] names ={"James", "Larry", "Tom", "Lacy"};for( String name : names ) {System.out.print( name );System.out.print(",");}}}/*输出:10,20,30,40,50,James,Larry,Tom,Lacy,*/
十五、跳转语句Java 语言中,有三种跳转语句:break、continue 和 return 。
(一)break 语句
  • break 主要用在循环语句或者 switch 语句中,用来结束整个循环或者跳出整个语句块 。
  • 有多个循环嵌套时,break 跳出其所在循环的最里层的循环 。
    public class Test {public static void main(String[] args) {for (int i = 1 ;i <4;i++){for (int a = 4;a > 0;a--){if(a == 2){break;}System.out.print(a + " ");}}}}/*输出4 3 4 3 4 3*/
(二)continue 语句
  • continue 适用于任何循环控制结构中 。作用是让程序立刻终止本次循环,直接进行下一次循环的判定 。
    在 for 循环中,continue 语句使程序立即跳转到操作表达式语句 。
    在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句 。
  • 例子:
    public class Test {public static void main(String[] args) {int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ) {if( x == 30 ) {continue;}System.out.println( x );}}}/*输出:10204050*/
(三)return语句
  • return语句可以从一个方法返回,并把控制权交给调用它的语句 。
(四)关于带标签的break和continue(扩展,不推荐使用)
  • Java唯一用到标签的地方是在循环语句之前,而在循环语句之前设置标签的原因:
    当 break 或 continue 语句出现在嵌套循环时,它只能跳出内层循环,如果想使用 break 或 continue 语句跳出外层循环,则需要对外层循环添加标签,它们就会中断到标签的地方 。
public class Test {public static void main(String[] args) {outer:for (int i = 1 ;i <4;i++){for (int a = 4;a > 0;a--){if(a == 2){break outer; //结束指定标签的那一层循环}System.out.print(a + " ");}}}}/*输出4 3*/
  • 带标签的 break:结束指定标签的那一层循环 。
  • 带标签的 continue:结束一次指定标签的那一层循环 。