Java基础——语法

2023-11-11

1 变量与数据类型

1.1 标识符

  命名规范参考Java开发手册(嵩山版)

  Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符

命名规则如下:

  • 由字母、数字、下划线(_)和美元符号($)组成。
  • 不能以数字开头。
  • 区分大小。
  • 长度无限制。
  • 不能是Java中的保留关键字。

命名规范: 软性建议

1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

反例:_name / __name / $name / name_ / name$ / name__

2. 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。

正例:ali / alibaba / taobao / cainiao/ aliyun/ youku / hangzhou 等国际通用的名称,可视同英文。

反例:DaZhePromotion [打折] / getPingfenByName() [评分] / String fw[福娃] / int 某变量 = 3

3. 【强制】代码和注释中都要避免使用任何语言的种族歧视性词语。

正例:日本人 / 印度人 / blockList / allowList / secondary

反例:RIBENGUIZI / Asan / blackList / whiteList / slave

4. 【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。

正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion

反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion

5. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格。

正例: localValue / getHttpMessage() / inputUserId

标识符命名习惯:见名知意

  • 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
  • 方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
  • 变量名规范: 首字母小写,后面每个单词首字母大写。
  • 包名规范:全都小写。

示例:

  合法标识符:HelloWord、userName2、user_name、_userName、$abc_123

  非法标识符:2UserName、user#Name、Hello World、class

1.2 关键字

  Java中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword)。全部是小写。

  保留字:没有定义用途,但保留备用。

  例如:goto、const

1.3 进制

1.3.1 二进制

  • 计算机中的数据都以二进制数字保存。
  • 二进制:逢二进一。即只有0、1两个值。

        如:十进制的10在计算机内保存为二进制的1010

  • 计算机中信息的存储单位

        位(Bit):表示一个二进制数码0或1,是计算机存储处理信息的最基本的单位。

        字节(Byte):一个字节由8个位组成。它表示作为一个完整处理单位的8个二进制数码。

        字:32位计算机:1字=32位=4字节,64位计算机:1字=64位=8字节

1.3.2 十六进制

  • 二进制表示法太冗长,所以在程序中一般喜欢用十六进制。
  • 十六进制:基数为十六,逢十六进一。它用abcdef表示从0-9之上的值。
  • Java中十六进制数据要以0x或0X开头。如:0x23D
  • 十六进制转换成二进制只需将每个十六进制数字替换为相对应的四个二进制位即可。

 1.3.3 八进制

  • 八进制:基数为八。
  • Java中八进制数据要以0开头。如:0123
  • 八进制转换成二进制:只需将每个八进制数字替换为相对应的三个二进制位即可。
  • 现在的计算机系统很少用八进制的了。

1.3.4 原码、反码、补码(了解)

  1. 原码 十进制数据的二进制表现形式就是原码,原码最左边的一个数字就是符号位,0为正,1为负。

        例如:56 -> 0 0 1 1 1 0 0 0

  左边第一位为符号位,其他位为数据位。 一个 byte 有 8bit,最大值是 0 1 1 1 1 1 1 1 (+127),最小值是 1 1 1 1 1 1 1 1 (-127)

  在计算机中之所以使用二进制来表示原码是因为逻辑简单,对于电路来说只有开或者关两种状态,用二 进制是在方便不过的了。如果使用的进制是十进制、八进制或者十六进制的话,电路没有办法表示那么多的状态。

(1)正数计算

        使用原码对正数进行计算不会有任何问题的

        例如:5 + 2

0 0 0 0 0 1 0 1
+       0 0 1 0
-----------------
0 0 0 0 0 1 1 1

  把这个结果转成十进制刚好就等于 7,完全正确无误

(2)负数计算

  但是如果是负数的话,那计算的结果就会大相径庭了

  我们拿 -56 这个数字来举例,它的原码是 1 0 1 1 1 0 0 0 ,减一之后,就会变成 1 0 1 1 0 1 1 1 ,这个 数转成十进制就是 -55。计算前是 -56,减一之后正确的结果应该是 -57(1 0 1 1 1 0 0 1)才对,居然还越减越大了

1 0 1 1 1 0 0 0
-             1
-----------------
1 0 1 1 0 1 1 1

  为了解决原码不能用于计算负数的这种问题,这时候,反码它出现了,作为负数的“计算的救星”。

  计算规则是正数的反码不变和原码一致,负数的反码会在原码的基础上,高位的符号位不变,其他位取 反( 1 变成 0 , 0 变为 1 )

3. 反码

  正数的反码是其本身(等于原码),负数的反码是符号位保持不变,其余位取反。 反码的存在是为了正 确计算负数,因为原码不能用于计算负数

(1)负数计算

  这时候,我们再来使用反码计算一下 -56 - 1 的结果

  -56 的原码是 1 0 1 1 1 0 0 0 ,如果转成反码(符号位不变,其他位取反), 那么它的反码就是1 1 0 0 0 1 1 1

 1 1 0 0 0 1 1 1
-              1
-----------------
 1 1 0 0 0 1 1 0

  -56 -1 = -57,-57 的原码是 1 0 1 1 1 0 0 1,转成反码刚好是 1 1 0 0 0 1 1 0,刚好等于刚才我们算出的值

(2)跨零计算

  不过反码也有它的 “ 软肋 ”,如果是负数跨零进行计算的话,计算得出的结果不对 我们拿 -3 + 5 来举例

  -3 的原码是 1 0 0 0 0 0 1 1,转成反码的话就是 1 1 1 1 1 1 0 0

 1 1 1 1 1 1 0 0
+        0 1 0 1  
-----------------
 0 0 0 0 0 0 0 1 

  把计算结果转成十进制就是 1,这结果显然不对。那么我们该怎么计算呢,这时候,作为反码的补充编码 —— 补码就出现了。

4. 补码

  正数的补码是其本身,负数的补码等于其反码 +1。因为反码不能解决负数跨零(类似于 -6 + 7)的问 题,所以补码出现了。

(1)跨零计算

  这时候,我们再来使用反码计算一下 -3 + 5 的结果

  -3 的原码是 1 0 0 0 0 0 1 1,转成反码的话就是 1 1 1 1 1 1 0 0,再转成补码就是 1 1 1 1 1 1 0 1

1 1 1 1 1 1 0 1
+       0 1 0 1
-----------------
0 0 0 0 0 0 1 0

  把这个数转成十进制刚好等于2,结果正确

总结:

  • 原码:最高位符号位,0表示正数,1:表示负数
  • 反码:正数的补码不变,负数反码:符号位不变,其他按位取反,解决负数的计算问题
  • 补码:正数的补码不变,负数补码是反码+1,解决跨零计算问题

1.2 数据类型

1.2.1 基本数据类型

  程序处理的都是数据,由于不同数据的内容大小不同, 导致所需的存储单元大小不同,在Java语言中使用 数据类型的概念加以描述 。

  字节是计算机技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构 成信息的一个小单位。Java中的字节是八位的字节,即它包含八位的二进制数。

1.2.2 基本数据类型转换

  • 自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:

  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再 进行计算。
  • byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
  • boolean类型不能与其它数据类型运算。当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为 字符串(String)类型。

1.2.3 字符串类型:String

String不是基本数据类型,属于引用数据类型 使用方式与基本数据类型一致。例如:String str = “abcd”;

一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。例如:

str = str + “xyz” ; 
int n = 100;
str = str + n;

结果判断:

 
 String str1 = 4; //判断对错:no
 String str2 = 3.5f + ""; //判断str2对错:yes
 System.out.println(str2); //输出:”3.5”
 System.out.println(3 + 4 + "Hello!"); //输出:7Hello!
 System.out.println("Hello!" + 3 + 4); //输出:Hello!34
 System.out.println('a' + 1); //输出:98Hello!
 System.out.println("Hello" + 'a' + 1); //输出:Helloa1

1.2.4 强制类型转换

  • 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换 符:(),但可能造成精度降低或溢出,格外要注意。
  • 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成 基本类型。
String a = “43”; int i = Integer.parseInt(a);
  • boolean类型不可以转换为其它的数据类型。

1.3 变量

1.3.1 定义

  变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。简单理解就是内存中一块空间的 表示。 由于该存储单元中的数据可以发生改变,因此得名为"变量"。

1.3.2 声明变量

1.3.2.1 方式1:先声明变量后赋值

语法:数据类型 变量名称;

变量名称=值;

1.3.2.1 方式2:声明变量的同时赋初值

语法 : 数据类型 变量名称=值;

1.3.3 变量的使用

package lina;

/*

 * 变量的声明与使用

 */

public class Demo02_var {
 public static void main(String[] args) {
 //1、声明变量

 //1.1 先声明后赋值:数据类型 变量名称;

 int age;//声明

 age=18;//赋值

 //1.2 声明变量的同时赋初值:数据类型 变量名称=初值;

 double money=1000.0;
 //2、变量的使用:先声明并赋值之后才能使用 

 System.out.println("年龄是:"+age);
 System.out.println("私房钱有:"+money);
 //System.out.println(name);//错误 没有声明

 
 //其他类型的变量

 float num=12.5F;//小数点的数字默认是double类型,如果赋值给float,需要在值后面
加上后缀f 大小写都OK

 long num2=100L;//整数数字默认是int类型,long类型的 变量的值后面可以添加L后
缀,也可以省略(省略的时候暗含类型转换,但是不能超过int的范围,否则不能省略)

 char gender='男';//字符类型的值必须使用单引号引起来

 String str="我爱你中国";//字符串类型的值必须使用双引号引起来

 System.out.println(num);
 System.out.println(num2);
 System.out.println(gender);
 System.out.println(str);
 }
}

1.3.4 控制台输入

package lina;

import java.util.Scanner;

/**

 * 控制台输入

 *

 */

public class Demo03_input {
 public static void main(String[] args) {
 //理解为扫描仪

 Scanner input=new Scanner(System.in);//需要导入java.util.Scanner;

 System.out.print("请输入您的年龄:");
 int age=18;//声明变量并附了初值

 //调用扫描仪的功能干活

 age=input.nextInt();//扫描整数

 System.out.print("请输入您的私房钱:");
double money=input.nextDouble();//扫描小数

 System.out.print("请输入您的姓名:");
 String name=input.next();//扫描字符串,空格不能扫描

 System.out.print("请输入性别:M/F"); 
 char gender=input.next().charAt(0);//扫描字符 

 System.out.println("你是单身嘛?");
 boolean isSingle=input.nextBoolean();//扫描boolean类型

 System.out.println("输入的年龄是:"+age); 
 System.out.println(money);
 System.out.println(name);
 System.out.println(gender);
 System.out.println(isSingle);
 input.close();//可以省略,避免有黄色的警告

 }
}
  • alt+insert:创建类...
  • ctrl+j:列表所有的模板
  1. psvm:main方法模板
  2. sout:标准输出流打印模板
  3. serr:错误输出流打印的模板

1.3.5 变量分类

  • 基本数据类型变量
  • 引用数据类型变量
  • 按被声明的位置划分:
  1. 局部变量:方法或语句块内部定义的变量
  2. 成员变量:方法外部、类的内部定义的变量

特别注意:类的外面不能有变量的声明

2 运算符

2.1 算术运算符

++: 如果是变量前缀:先对此变量加1,再执行其他的操作。
     如果是变量后缀:先执行当前语句的其他操作,再对此变量加1
--: 如果是变量前缀:先对此变量减1,再执行其他的操作。
     如果是变量后缀:先执行当前语句的其他操作,再对此变量减1

2.2 赋值运算符

  赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左

2.3 关系运算符

关系运算符作用是比较两边的操作数,结果总是boolean型的。

2.4 逻辑运算符

逻辑运算符用于对boolean

型结果的表达式进行运算,运算结果总是boolean型,后面结合条件结构讲解。

public static boolean f1() {
        System.out.println("f1");
        return false;
   }
    public static boolean f2() {
        System.out.println("f2");
        return true;
   }
    public static void main(String[] args) {
        //不短路&,前面表达式false,后面表达式依然执行

        System.out.println(f1() & f2()); //true

   }

    //结果
    f1
    f2
    false
public class Test9 {
    public static boolean f1() {
        System.out.println("f1");
        return false;
   }
    public static boolean f2() {
        System.out.println("f2");
        return true;
   }
    public static void main(String[] args) {
      //短路与&&,前面的表达式false,fasle后面的表达式不再执行

        System.out.println(f1() && f2() && f2() && f2()) ; //true

   }

    //结果
    f1
    false

2.5 字符串连接运算符

String s="He" + "llo";//结果"Hello"
//"+"除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。

//如:

String s="x" + 123;// 结果"x123"

2.6 三目运算符

  X ? Y : Z

  X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,否则整个运算 结果为表达式z的值。

//例:
int score = 75;
String type = score >=60 ? "及格" : "不及格"

2.7 位运算符

位运算符对两个操作数中的每一个二进制位都进行运算 位运算符功能:

  • 按位取反 ~
  • 按位与 &
  • 按位或 |
  • 按位异或 ^

移位运算符

  • 左移:"a将二进制形式的a逐位左移b位,最低位空出的b位补0
  • 带符号右移:"a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
  • 无符号右移:"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0

技巧

  a % b = a & (b-1),b是2的n次幂

  10 % 8 = 10 & 7

public static void main(String[] args) {
        System.out.println(113 % 8);
        System.out.println(113 & 7);
   }

2.8 操作符优先级(了解)

运算符的优先次序

  表达式的运算按照运算符的优先顺序从高到低进行,同级运算符从左到右进行:

3 程序的流程控制

  1996年,计算机科学家Bohm和Jacopini证明了:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本结构组合而成。

  它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。

3.1顺序结构

  顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作。

3.2 分支结构

  分支结构又被称为选择结构,根据条件成立与否来执行操作。

3.2.1 基本选择结构 if

/*语法:
    if(条件){
   条件成立执行的内容
    }  
*/

 3.2.2 if-else选择结构

/*语法:
    if(条件){

   条件成立执行的内容
    }else{

   条件不成立执行的内容
    }    
*/

3.2.3 多重选择结构

  用处:适合解决连续区间问题。

3.2.3.1 语法结构
if(条件1){
    //条件1成立的时候执行的条件
}else if(条件2){
     //条件1不成立,条件2成立的时候执行的条件

}else if(条件3){
     //条件1、2不成立,条件3成立的时候执行的条件
}......

else if(条件n){
     //条件1到n-1不成立,条件n成立的时候执行的条件
}else{
     //当以上的所有条件都不成立的时候执行的代码
}
/*

整个结构是一个整体,当一个条件成立并执行之后,整个结构就已经执行完毕;
if块必须有;
else if块可以有一个,也可以有多个;
else 可以有一个,也可以没有。

*/

3.2.3.2 示例

  如果高考成绩过700 清华 , 600-700:重点本科 500-600:普通本科 300-500:专科 其他:其他出路。

public static void main(String[] args) {
//   示例 if-else 多重选择结构
//   如果高考成绩过700 清华 ,600-700:重点本科 500-600:
//   普通本科 300-500:专科 其他:其他出路。
        Scanner input = new Scanner(System.in);
        System.out.println("请输入你的分数:");
        int score = input.nextInt();
        if (score > 700) {
            System.out.println("去清华");
        } else if (score >= 600/* &&score<=700 */) {
            System.out.println("重点本科");
        }else if (score >= 500/* &&score<=600 */){
            System.out.println("普通本科");
        } else if (score >= 300) {
            System.out.println("专科");
        }else {
            System.out.println("其他出路!");
        }
    }

3.2.4 switch选择结构

  替换等值判定的多重选择结构

3.2.4.1 语法
witch(表达式){
 case 值1://相当于if(){}
 //满足表达式的结果==值1的时候执行的代码
 break;//退出当前的switch选择结构
 case 值2://相当于else if(){}
 //满足表达式的结果==值2的时候执行的代码
 break;
         ......
 case 值n:
 //满足表达式的结果==值n的时候执行的代码

 break;
 default://相当于else
 //以上的匹配都失败的时候执行的内容
 break;
 }
/*
表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default子句是可选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直
接往下面执行!
Case后面的执行体可写{ }也可以不写{ }
*/

 3.2.4.2 示例
public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // 基金经理的业绩排名:1、欧洲游 2、东南亚游 3、国内游 其他:再接再厉!

        System.out.println("请输入你的排名:");
        int num = input.nextInt();
        // 方式2:
        switch (num) {// 小括号中的表达式或者变量结果类型可以是:int char String byte short
            case 1:// 相当于if(num==1){}//case 后面的值必须是常量 'A' "星期一"
                    System.out.println("奖励是:欧洲游");
                    break;// 执行完毕一个case分支后跳出switch语句块
            case 2:// 相当于if(num==2)
                    System.out.println("奖励是:东南亚游");
                    break;
            case 3:// 相当于if(num==3)
                    System.out.println("奖励是:国内游");
                    break;
            default:// 相当于else ,是可选的
                    System.out.println("再接再厉");
                    break;
        }
         // 方式1:
         /*
         if (num == 1) {
         System.out.println("奖励是:欧洲游");
         } else if (num == 2) {
         System.out.println("奖励是:东南亚游");
         } else if (num == 3) {
         System.out.println("奖励是:国内游");
         } else {
         System.out.println("再接再厉");
         }
         */
    }
3.2.4.3 巧用break的省略

  多分支月份输出天数

public static void main(String[] args) {
//        巧用break的省略
//        多分支月份输出天数
        Scanner input = new Scanner(System.in);
        // 根据用户输入的月份,输出当月的天数,不考虑平年闰年
        System.out.println("请输入月份:");
        int month = input.nextInt();
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println(month + "月共有31天!");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println(month + "月共有30天!");
                break;
            case 2:
                System.out.println(month + "月共有28天!");
                break;
            default:
                System.out.println("您输入的月份有误!");
                break;
        }

    }

3.2.5 嵌套选择结构

  以上的所有的选择结构都相互嵌套

3.2.5.1 示例1

运动会百米赛跑项目: 16秒之内才能进入决赛,根据性别分男女组

public static void main(String[] args) {
        //运动会百米赛跑项目: 16秒之内才能进入决赛,根据性别分男女组
        Scanner input = new Scanner(System.in);
        System.out.println("请输入跑步时间秒:");
        float time = input.nextFloat();
        if (time <= 16) {
            //进入决赛
            System.out.println("请输入性别:");
            String gender = input.next();
            //字符串比较内容是否相等,不能使用== 使用.equlas()
            if ("男".equals(gender)) {
                System.out.println("进入男子组决赛!");
            } else {
                System.out.println("进入女子组决赛!");
            }
        } else {
            System.out.println("很遗憾,没能进入决赛!下次努力!");
        }
    }
}

3.2.6 字符串比较相等

  • ==比较内存地址
  • equlas比较内容
        String str1="abc";
        String str2=input.next();
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));

3.3 循环结构

  循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。 循环两个点:1、循环操作 2、循环条件

3.3.1 while循环

3.3.1.1 语法
while(循环条件){
      //循环操作
   }
3.3.1.2 流程图

3.3.1.3 解决循环题目的步骤

1、分析循环条件和循环操作

2、套用到循环语法中

3、检查循环能否退出(循环条件是否会发生变化)

3.3.1.4 案例1

用while循环描述:万米赛跑项目(操场400米一圈,共跑25圈)

步骤1:编写伪代码

步骤2:转换为java代码

public static void main(String[] args) { 
 // 用while循环描述刚刚的万米赛跑,操场400米一圈,共跑25圈
 //1、分析循环条件和操作
 //循环操作:跑圈,现在第圈
 //循环条件:不够25圈
 //2、套用循环语法
 int num=1;//圈数
 while(num<=25) {
 //跑圈,现在第圈
 System.out.println("跑圈,现在第"+num+"圈");
 //跑完一圈圈数+1
 num++;
 }
 System.out.println("完成了万米赛跑项目!");
 //3、检查循环能否退出--循环条件是否发生变化
 }
3.3.1.5 案例2

打印1-100之间的所有数字

public static void main(String[] args) { 
 //1、分析循环条件和操作
 //循环操作:打印数字
 //循环条件:不够100
 int i=1;
 while(i<=100) {
 System.out.println(i);
 i++;
 }
}
3.3.1.6 while循环的特征
  1. 先判断后执行
  2. 如果初始条件不满足,循环一次都不执行

3.3.2 do-while循环

3.3.2.1 语法
do{
    //循环操作
}while(循环条件);
//PS:特别注意最后的分号不能丢掉
3.3.2.2 流程图

3.3.2.3 do-while循环的特征
  1. 先执行后判断
  2. 如果初始条件不满足,循环至少执行一次
3.3.2.4 案例1

用户登录:用户输入用户名和密码,用户名是admin 密码是123才能登录成功,其余都失败!

import java.util.Scanner;

/*
 * do-while
 * 特征:先执行一次,再判定 初始条件不满足,循环至少会执行一次
 */
public class Demo11_dowhile {
 public static void main(String[] args) {
 Scanner input = new Scanner(System.in);
 //用户登录:用户输入用户名和密码,用户名是admin 密码是123才能登录成功,其余都失
败!
 //1、分析
 //循环条件:用户名是admin 密码是123
 //循环操作:用户输入,判定对错

 //2、套用语法
 String name;
 int password;
 do {
 //循环操作:用户输入,判定对错
 System.out.println("请输入用户名和密码:");
 name=input.next();
 password=input.nextInt();
 if(!"admin".equals(name) || password!=123) {
 System.out.println("用户名或密码错误!登录失败!");
 } 
 }while(!"admin".equals(name) || password!=123);
 System.out.println("登录成功!");
 }
}

3.3.3 for循环

3.3.3.1 语法
for(表达式1:定义循环变量;表达式2:循环条件;表达式3:循环变量的变化){
    //循环操作
}
3.3.3.2 执行顺序
  1. 先执行表达式1:定义循环变量,该表达式只执行一次
  2. 判断循环条件是否成立:
  3. 循环条件成立:执行循环操作, 不成立:退出循环
  4. 执行完循环操作,执行表达式3--循环变量的变化
  5. 重复2-4步骤

3.3.3.3 特征

  先判断后执行

3.3.3.4 使用场合

  适合解决循环次数固定的题目

3.3.3.5 案例
public class Demo12_for {
 public static void main(String[] args) {
 //案例1:打印1-100

 for (int i = 1; i <= 100; i++) {
 System.out.println(i);
 }
 //案例2:打印1-100的所有的数字之和

 //循环条件:没有加到100次

 //循环操作:累加

 int sum=0;
 for(int k=1;k<=100;k++) {
 sum=sum+k;
 }
 System.out.println("1-100之和:"+sum);
 //案例3:打印1-100之间所有的偶数

 for(int i=1;i<=100;i++) {
 if(i%2==0) {
 System.out.println(i);
 }
 }

//可以仿写while的格式,语法正确,但是不推荐

// int j=1;
// for(;j<=100;) {
// System.out.println(j);
// j++;
// }

 }
}

3.3.4 死循环

3.3.5 循环中的关键字

3.3.5.1 break
3.3.5.1.1 作用--退出循环

3.3.5.1.2 示例

万米赛跑项目,坚持不住可以退出!

public static void main(String[] args) {
 Scanner input = new Scanner(System.in);
 int i=1;
 while(i<=25) {
 System.out.println("跑圈,第"+i+"圈");
 i++;
 System.out.println("还能坚持吗?T/F");
 char isOk=input.next().charAt(0);
 if(isOk=='f') {
 System.out.println("坚持不住了,退出!");
 break; 
 }
 }
 System.out.println("over");
 }
3.3.5.2 continue

作用--结束当次循环,进入下一次循环

 3.4三种循环对比

3.5 嵌套循环

3.5.1 语法

3.5.2 案例

  利用二重循环打印图形。

3.5.2.1 打印矩形
public static void main(String[] args) {
 //使用*号打印5行6列的矩形

 for(int i=1;i<=5;i++) {//外层循环控制行数

 for(int j=1;j<=6;j++) {//内层循环控制个数

 System.out.print("*");
 }
 System.out.println();
 }
 }
3.5.2.2 打印直角三角形
public static void main(String[] args) {
 //打印直角三角形

 for(int i=1;i<=5;i++) {
 for(int j=1;j<=2*i-1;j++) {
 System.out.print("*");
 }
 System.out.println();
 }
}
3.5.2.3 打印等腰三角形
public static void main(String[] args) {
 //打印等腰三角形

 for(int i=1;i<=5;i++) {
 //打印空格

 for(int k=1;k<=5-i;k++) {
 System.out.print(" ");
 }
 //打印*号

 for(int j=1;j<=2*i-1;j++) {
 System.out.print("*");
 }
 System.out.println();
 }
       }

3.5.3 break和continue在双重循环中的使用

就近原则:

  • break在哪一层使用就退出哪一层循环
  • continue在哪一层使用就结束哪一层的当次循环,进入该层的下一次循环。
public static void main(String[] args) {
 //打印九九乘法表

 for(int i=1;i<=9;i++) {
 for(int j=1;j<=i;j++) {
 System.out.print(j+"*"+i+"="+i*j+"\t");
 if(j==5) { 
 break;
 }
 System.out.print("===");
 } 
 System.out.println();
 }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础——语法 的相关文章

随机推荐

  • 微信小程序云开发入门

    参考链接 1条消息 微信小程序云开发入门详细教程 Yunlord的博客 CSDN博客 微信小程序云开发 1 新建小程序项目 选择使用云开发 进入小程序后点击云开发创建云环境 选择免费版的环境如果提示余额不足欠费进入腾讯云 如果是小程序进入选
  • 【数据库CS751】Union的用法以及含义

    目录 一 Union的含义 二 Union的用法 1 列数一样 这个很重要 2 union与union all 3 union可以排序么 4 别名会影响union么 那么别名会不会影响排序 那么之前说过了各种连接 其实union本质上还是和
  • Backup database plus archivelog delete input;

    Backup database plus archivelog 会备份归档日志Backup database plus archivelog delete input 会备份归档日志并且会在备份结束后删除默认目录下的归档日志 datafil
  • PAT C入门题目-7-17 成绩转换 (15 分)(switch-case)

    7 17 成绩转换 15 分 本题要求编写程序将一个百分制成绩转换为五分制成绩 转换规则 大于等于90分为A 小于90且大于等于80为B 小于80且大于等于70为C 小于70且大于等于60为D 小于60为E 输入格式 输入在一行中给出一个整
  • Python 学习4.1字典

    一 字典内包含的内容是一系列键和它们对应的值 字典放在花括号 中 键和值之间用冒号 分隔 键值对之间用 分隔 想储存多少键值对都可以 eg 输入 a zwj 250 zzy 251 250 zwj print a zwj print a 2
  • 神经网络容易受到对抗攻击,网络攻防原理与技术

    1 信息化战争的作战原则是什么 三项基本原则 一是隐蔽 二是快速 三是高效 隐蔽 就是通过隐身 欺骗等手段 确保 先敌发现 先敌攻击 快速 就是依托情报监视与侦察和快速打击系统 确保 发现即摧毁 高效 就是联合 集中使用高能精确弹药 确保战
  • 2023年大数据面试通关文牒系列篇

    大数据面试通关文牒系列篇 第二篇 Hadoop生态链 Round 1 HIVE HIVE 基础篇 1 Hive内部表和外部表的区别 未被external修饰的是内部表 被external修饰的为外部表 区别 内部表数据由Hive自身管理 外
  • python识别_Python手势识别与控制

    Python手势识别与控制 概述 本文中的手势识别与控制功能主要采用 OpenCV 库实现 OpenCV是一个基于BSD许可 开源 发行的跨平台计算机视觉库 可以运行在Linux Windows Android和Mac OS操作系统上 它轻
  • Linux - Centos7 搭建 JAVA 环境,安装 MAVEN

    一 下载 MAVEN 1 到官方网址下载 http maven apache org download cgi 2 下载好后 使用 FTP 类软件 将下载好的本地文件上传到 Linux 服务器上来 我使用的是 PSFTP 如果想试试这个软件
  • go语言实战-----25-----HTTP编程get/post/head、表单处理、panic处理

    一 HTTP编程get post head 1 HTTP编程 1 Go原生支持http import net http 即可 2 Go的http服务性能和nginx比较接近 3 几行代码就可以实现一个web服务 1 1 HTTP常见请求方法
  • vue插件开发以及发布

    vue插件开发
  • 关于串口通信思考

    如何给串口通信口增加LED灯作为通信指示灯 以下给出2种电路设计参考 第一种 第二种 思考 以上哪种电路更优 为什么 第一种电路 LED灯使用共阴极连接 这种方法有什么好处呢 就是在TX在高电平情况下会点亮二极管 低电平情况下不会 这个问题
  • 刷脸支付成为全球科技巨头们主攻研发方向

    相对于已经熟悉的二维码支付 一些民众对于刷脸支付是否安全表示担忧 蚂蚁金服资深算法专家李亮表示 通过软硬件的结合 智能算法与风控体系综合保证准确性和安全性 目前识别的准确率为99 99 而扫码极易植入木马和钓鱼软件 反而存在更大的安全隐患
  • [人工智能-深度学习-78]:开发环境 - pip install cv2下载失败的解决办法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122320433 目录 1 出错现象
  • TypeScript 枚举使用整理

    一 定义 enum 使用枚举我们可以定义一些有名字的数字常量 枚举通过enum关键字定义 枚举的定义和C 中有些类似 enum Direction Up 1 Down Left Right console info Direction co
  • java.lang.StackOverflowError出现的原因

    严重 Exception initializing page context java lang StackOverflowError at javax servlet http HttpServletRequestWrapper getS
  • sys.argv和argparse和os.environ/python命令行中键入参数的三种方式

    参考 命令行运行Python脚本时传入参数 3种方法 https blog csdn net helloasimo article details 124210144 x 1 sys argv sys argv类似于c中main函数中的ar
  • 区块链技术发展面临七大关键挑战以及未来的五大展望

    经过十多年的发展 区块链技术逐渐走入大众视野 并融入各行各业的建设中 今年国家也首次将区块链技术纳入新基建的范畴 近日 梳理了区块链技术的基础架构 扩展技术 挑战 并对未来区块链技术的发展进行展望 随着对区块链技术价值的发掘 区块链技术逐渐
  • 【玩转数据系列十六】机器学习PAI通过声音分辨男女(含语音特征提取相关数据和代码)...

    背景 随着人工智能的算法发展 对于非结构化数据的处理能力越来越受到重视 这里面的关键一环就是语音数据的处理 目前 许多关于语音识别的应用案例已经影响着我们的生活 例如一些智能音箱中利用语音发送指令 一些搜索工具利用语音输出文本代替键盘录入
  • Java基础——语法

    1 变量与数据类型 1 1 标识符 命名规范参考Java开发手册 嵩山版 Java对包 类 方法 参数和变量等要素命名时使用的字符序列称为标识符 命名规则如下 由字母 数字 下划线 和美元符号 组成 不能以数字开头 区分大小 长度无限制 不