本章包含内容有:
java环境配置、注释、标识符、数据类型、类型转换、变量、常量、运算符、包机制、顺序结构、选择结构、循环结构、方法的定义和调用、命令行传参、可变参数。
点击这里查看更多JavaSE的笔记

章节目录

  • Java基础知识
    • 1、JAVA环境配置
      • windows平台
    • 2、HelloWorld程序猿的第一个程序
      • 常见问题
    • 3、注释
      • 单行注释
      • 多行注释
      • 文档注释
    • 4、Java的标识符
      • 关键字
      • 标识符
    • 5、 Java的数据类型
    • 6、Java的类型转换
    • 7、Java的变量
    • 8、Java的常量
    • 9、Java的运算符
      • 算术运算符实例
      • 关系运算符
      • 逻辑运算符
      • 位运算
      • 扩展运算符
      • 三元运算符
    • 10、Java的包机制
    • 11、Scanner对象
    • 12、java的顺序结构
    • 13、JAVA的选择结构
      • if单选择结构
      • if双选择结构
      • if多选择结构
      • 嵌套的if结构
      • switch多选择结构
    • 14、Java的循环结构
      • while循环
      • do...while循环
      • for循环
      • 增强for循环
      • break、continue
    • 15、Java的方法定义和调用
      • 什么是方法
      • 方法的定义和调用
      • 方法的重载
    • 16、Java命令行传参
    • 17、Java的可变参数(不定项参数)

Java基础知识

1、JAVA环境配置

windows平台

  1. 首先去官网下载需要的java版本

    • 打开软件安装包后傻瓜式安装一直点击下一步
  2. 桌面-右键“此电脑”-属性

  3. 选择右侧的“高级系统设置”-选择“高级”-选择“环境变量”

    • 在系统变量下新建JAVA_HOME(如图所示)

      • 这里的”变量值“根据JDK的安装路径改变

      • 变量名固定为

        JAVA_HOME

    • 在系统变量下新建CLASSPATH(如图所示)

      • 这里的变量名固定为

        CLASSPATH

      • 变量值固定为

        .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

    • 修改“Path“变量

      • 添加的这两个变量路径是固定的

      %JAVA_HOME%\bin

      %JAVA_HOME%\jre\bin

  4. 最后打开cmd,输入以下指令检查java环境变量是否配置成功。(如果出现类似下图的输出结构代表成功配置java)

java -version

javac

2、HelloWorld程序猿的第一个程序


  1. 创建一个文件夹,存放代码

  2. 新建一个java文件

    • 文件后缀名为.java

    • HelloWorld.java

    • 【注意点】系统可能没有显示后缀名,我们需要去把它打开

  3. 使用编译软件打开java文件

    • win平台推荐使用notepad++

    • mac平台推荐使用sublime text

  4. 编写代码

public class HelloWorld{public static void main(String[] args) {System.out.print("HelloWorld!");}
}
  1. 保存文件,在文件目录下打开终端
  2. 在终端输入
javac HelloWorld.java
  • javac 就是一个编译的命令,编译之后会生成一个class文件
java HelloWorld
  • Java 就是一个运行class文件的命令,命令指向的文件不需要输入后缀名
常见问题

  1. 每个单词的大小写不能出现问题,因为java是大小写敏感的
  2. 尽量使用英文,因为有的控制台中文会出现乱码
  3. 文件名类名必须保持一致,并且首字母大写!
  4. 符号使用了中文

3、注释

​ 注释并不会执行,只是跟我们人看的。


  • 单行注释

    两个英文斜杠后输入注释,但注释只能书写一行。

    \\单行注释

使用javadoc命令生成javadoc文档。

javadoc 参数 java文件
  • encoding 目标编码
  • charset 字符编码

4、Java的标识符

​ Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。


关键字

标识符
  • 所有的标识符都应该以字母(A-Z或者a-z)、美元符($)、或者下划线(_)开始。
  • 首字母之后可以是字母(A-Z或者a-z)、美元符($)、或者下划线(_)或数字的任何字符组合。
  • 不能使用关键字作为变量名或方法名
  • 表示符是大小写敏感的。
  • 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音。

5、 Java的数据类型


  • 强类型语言

    • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
  • 弱类型语言
  • Java的数据类型分为两大类
    • 基本类型(primitive type)
    • 引用类型(reference type)

  • 八大基本数据类型

    //整数
    int num1 = 10; //最常用
    byte num2 = 20;
    short num3 = 30;
    long num4 = 30L; //Long类型要在数字后面加个L//小数:浮点数
    float num5 = 50.2F; //float类型要的数字后面加个F
    double num6 = 3.1415926; //字符
    char name = '请';
    //字符串   String不是关键字,它是一个类(这是一个引用数据类型)
    String namea = "灿彬";//布尔值:是非
    boolean flag = true;
    boolean flag = false;
    
  • 知识科普

    • 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数。
    • 字节(byte):是计算机忠数据处理的基本单位,习惯上用大写 B 来表示。
    • 1B(byte,字节)= 8bit(位)
    • 字符:是指计算机中使用的字母、数字、字和符号
  • 拓展

    //整数拓展
    int i1 = 10; //十进制
    int i2 = 010; //八进制
    int i3 = 0x10; //十六进制 0~9 A~F
    int i4 = 0b10; //二进制//浮点数拓展
    //银行业务怎么表示?钱
    //浮点数都是有限的离散的,它会有舍入误差,所以就会有大约、接近但不等于
    //最好不使用浮点数进行比较!!!
    //关于浮点数,我们一般使用BigDecimal数学工具类。//字符拓展
    char c1 = 'a';
    char c2 = '中';
    System.out.println(c1);
    System.out.println((int)c1);//强制转换,输出97
    System.out.println(c1);
    System.out.println((int)c1);//强制转换,输出20013
    //得出结论:所有字符本质还是数字
    //编码 Unicode 本质是一张表 大小2字节 可以表示对应的65536个字符
    //97 = a
    //65 = A
    //U0000 ~ UFFFF
    char c3 = '/u0061';
    System.out.println(c3); //输出a//转义字符
    //  \t  制表符
    //  \n  换行
    System.out.println("Hello\tWorld");   //Hello     World
    System.out.println("Hello\nWorld");//Hello//World
    

6、Java的类型转换


  • 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。

    • 低 -----------------------------------------> 高
    • byte,short,char -> int -> long -> float -> double
  • 运算中,不同类型的数据先转化为同一类型,然后进行运算

  • 强制类型转换

    public class Demo1 {public static void main(String[] args) {int a = 128;byte b = (byte)a; //内存溢出,导致得到的值发生变化//强制转换      (类型)变量名System.out.println(a);System.out.println(b);}
    }
    

  • 自动类型转换
public class Demo1 {public static void main(String[] args) {int a = 128;double b = a;// 自动类型转换       低 --> 高System.out.println(a);System.out.println(b);}
}

  • 注意点:

    1. 不能对布尔值进行转换。

    2. 不能把对象类型转化为不相干的类型。

    3. 把高容量转化为低容量的时候,使用强制转换。

    4. 转换的时候可能存在内存溢出、精度问题!

      public class Demo1 {public static void main(String[] args) {System.out.println((int)28.8); //double转化成intSystem.out.println((int)33.87f); //float转化为int}
      }
      

  • 转换例子

    public class Demo1 {public static void main(String[] args) {char a = 'a';int b = a + 1;System.out.println(b);System.out.println((char) b);}
    }
    

  • 常见问题

    public class Demo1 {public static void main(String[] args) {//操作比较大的数时,要注意溢出问题。//JDK新特性,数字之间可以用下划线分割,对原数据不会产生影响。int money = 10_0000_0000;System.out.println(money);int year = 20;int total = money * year; //-1474836480 计算的时候溢出了System.out.println(total);//错误解决方法long total2 = money * year;System.out.println(total2); //-1474836480 在转换之前就用int计算溢出了//正确解决方法long total3 = money * ((long)year); //先把一个数提升为long类型,整个表达式的数据类型就会提升,不会出现溢出了System.out.println(total3);}
    }
    

7、Java的变量


  • 变量是什么?就是可以变化的量。

  • Java是一种强类型语言,每个变量都必须声明其类型。

  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域

    //数据类型 变量名 = 值; 可以用逗号隔开来声明多个同类型变量(但使用逗号分隔可读性差)

  • 注意事项

    1. 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
    2. 变量名必须是合法的标识符。
    3. 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
public class Demo1 {public static void main(String[] args) {//变量的定义String name = "canbin";char h = 'a';double a = 22.32;}
}
  • 变量作用域:

    1. 类变量

      static int allClicks = 0; //有static
      //这个类变量会与这个类同共存
      
    2. 实例变量

      String str = "hello world" //方法外面,类的里面/*如果不自行初始化,就会自动根据类型给一个默认值:布尔值默认是:false常数默认是:0浮点数默认是:0.0String默认是:null(除了基本类型,其它的初始值都是null)*/
      
    3. 局部变量

      public void method(){int i = 0; //定义在方法内的变量
      }
      
  • 变量的命名规范

    • 所有变量、方法、类名:见名知意

    • 类成员变量:首字母小写和驼峰原则:monthSalary

      // 处理第一个单词以外,后面的单词首字母大写

    • 局部变量:首字母小写和驼峰原则

    • 常量:大写字母和下划线:MAX_VALUE

    • 类名:首字母大写和驼峰原则:Man,GoodMan

    • 方法名:首字母小写和驼峰原则:run(),runRun()

8、Java的常量


  • 常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
    • final 常量名 = 值;
    • final double PI = 3.14;
  • 常量名一般使用大写字符。
public class Demo2 {//修饰符是不分前后顺序的,比如这里的staticstatic final double PI = 3.14;final static double PC = 5.55;public static void main(String[] args) {System.out.println(PI);System.out.println(PC);}
}

9、Java的运算符


  • Java语言支持如下运算符:

    • 算术运算符:+、-、*、/、%、++、–
    • 赋值运算符:=
    • 关系运算符:>、<、>=、<=、==、!=、instanceof
    • 逻辑运算符:&&、||、!
    • 位运算符:&、|、^、~、>>、<<、>>>
    • 条件运算符:?、:
    • 扩展赋值运算符:+=、-=、*=、/=
算术运算符实例
package operator;public class Demo01 {public static void main(String[] args) {//二元运算符//ctrl+D    复制当前行到下一行int a = 10;int b = 20;System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println(a/(double)b);    // 因为10除以20的结果是0.5,这里都是int类型会导致小数部分被舍去,所以需要添加一个double对其中一个数进行强制转换。       }
}
package operator;public class Demo02 {public static void main(String[] args) {long a = 333332222;int b = 22222222;short c = 11111;byte d = 22;System.out.println(a+b+c+d);    //longSystem.out.println(b+c+d);  //intSystem.out.println(c+d);    //int//在int及以下的类型,在计算时都会自动提升到int类型//如果出现比int等级还要高的类型,那将会提升到那个类型的等级再进行计算//这里的c+d在jdk17并不会提升到int,只会提升到short,jdk8会提升到int。}
}

package operator;public class Demo03 {public static void main(String[] args) {int a = 10;int b = 21;//取余,也叫做模运算System.out.println(b%a);    // 21 / 10 = 2 ... 1    取的就是那个余数}
}
package operator;public class Demo03 {public static void main(String[] args) {int a = 3;int b = a++;    //先赋值,然后再自增int c = ++a;    //先自增,然后再赋值System.out.println(a);  //5System.out.println(b);  //3System.out.println(c);  //5}
}
关系运算符
package operator;public class Demo03 {public static void main(String[] args) {//关系运算符返回的结果: 正确    错误      布尔值int a = 10;int b = 20;System.out.println(a>b);System.out.println(a<b);System.out.println(a==b);System.out.println(a!=b);}
}

  • Math方法
package operator;public class Demo03 {public static void main(String[] args) {//幂运算,我们用的是java里Math的一个pow方法    2^3     2*2*2 = 8//很多运算我们会使用一些工具类来操作!double pow = Math.pow(2, 3);System.out.println(pow);}
}
逻辑运算符
package operator;public class Demo04 {public static void main(String[] args) {// 与(and)   或(or)   非(取反)boolean a = true;boolean b = false;System.out.println(" a && b :" + (a&&b));   // 逻辑与运算:两个都是true的时候,结果才为trueSystem.out.println(" a || b :" + (a||b));   // 逻辑或运算:有一个是true的时候,结果就为trueSystem.out.println(" ! ( a && b ) :" + !(a&&b));    // 如果是真,就变为假。如果是假,就变为真//短路运算int c = 5;boolean d = ( c < 4 )&&( c++ < 4 ); // 在&&前面的是false时,&&后面就不会再执行了System.out.println(c);  // c的值没有改变,说明&&后面的c++并没有执行System.out.println(d);}
}

位运算
/*A = 0011 1100B = 0000 1101
A&B =   0000 1100          (都是1的时候取1)
A|B =   0011 1101          (其中一个是1的时候取1)
A^B =   0011 0001          (相同的时候取0,不相同的时候取1)
~B  =   1111 0010     (0的时候取1,1的时候取0)<< 左移一位就是乘2
>>    右移一位就是除2
2*8 = 16
2*2*2*2 = 16
2<<3 = 16        (这种位移运算在计算机里效率是最高的)
*/
扩展运算符
package operator;public class Demo05 {public static void main(String[] args) {int a = 3;int b = 5;a+=b;   // a = a + ba-=b;   // a = a - bSystem.out.println(a);//字符串连接符    +System.out.println(a+b);    //8System.out.println(""+a+b); //35//因为前面有一个空的String类型的字符串,所以后面的a和b都被转化为String类型进行拼接了System.out.println(a+b+""); //8//只有运算步骤经过字符串后,才会开始转换成String类型}
}
三元运算符
package operator;public class Demo05 {public static void main(String[] args) {// x ? y : z//当x为true时运行y,当x为false时运行zint score = 50;String type = score<60 ? "不及格" : "及格";System.out.println(type);}
}

10、Java的包机制


  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。

  • 包语句的语法格式为:

    package pkg1[.pkg2[.pkg3...]];
    
  • 一般利用公司域名倒置作为包名

    • www.baidu.com
    • 倒置 => com.baidu.www
  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用“import”语句可完成此功能

    import package1[.package2...].(classname|*);
    
  • package一定是在import上面

import com.canbin.base.*
//这里的 .* 是一个通配符,它会导入base目录下所有的类

11、Scanner对象


  • 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

  • 基本语法

    Scanner s = new Scanner(System.in);
    
  • 通过Scanner类的**next( )nextLine( )方法获取输入的字符串,在读取前我们一般需要使用hasNext( )hasNextLine( )**判断是否还有输入的数据。

  • 实践

    • 使用next
    package com.canbin.scanner;import java.util.Scanner;public class Demo1 {public static void main(String[] args) {//创建一个扫描器对象,用于接收键盘数据。Scanner scanner = new Scanner(System.in);   //这里Scanner需要一个参数 System.in是输入  System.out是输出//使用Scanner对象里hasNext方法,判断用户有没有输入字符串if(scanner.hasNext()){//使用Scanner对象里的next方法接收数据String str = scanner.next(); //程序会等待用户输入完毕System.out.println("输入的字符串是:" + str);}//凡是使用IO流的类,用完不关闭就会一致占用资源。要养成用完就关闭的习惯scanner.close();    //关闭scanner这个类对象}
    }
    

  • 使用nextLine
package com.canbin.scanner;import java.util.Scanner;public class Demo2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);if (scanner.hasNextLine()){String str = scanner.nextLine();System.out.println("您输入的字符串是:" + str);}scanner.close();}
}

  • next和nextLine差异

    • next( )

      1. 一定要读取到有效字符后才可以结束输入。
      2. 对输入有效字符之前遇到的空白,next( )方法会自动将其去掉。
      3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
      4. next( )不能得到带有空格的字符串。
    • nextLine( )
      1. 以Enter为结束符,也就是说nextLine( )方法返回的是输入回车之前的所有字符。
      2. 可以获得空格。
  • 使用hasNext( )能实现判断输入的类型,放入对应的变量容器内。

    package com.canbin.scanner;import java.util.Scanner;public class Demo3 {public static void main(String[] args) {int a = 0;float b = 0.0f;Scanner scanner = new Scanner(System.in);if (scanner.hasNextInt()) {a = scanner.nextInt();System.out.println("您输入的是一个整数");System.out.println(a);} else if (scanner.hasNextFloat()) {b = scanner.nextFloat();System.out.println("您输入的是一个小数");System.out.println(b);} else {System.out.println("您输入有误");}//hasNextFloat和hasNextDouble都是包含整数的,就是输入的int类型也会被纳入范围,所有做这种判断的时候,要先从小的单位判断开始scanner.close();}
    }
    


  • Scanner运用

    package com.canbin.scanner;import java.util.Scanner;public class Demo4 {public static void main(String[] args) {//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:Scanner scanner = new Scanner(System.in);//和double sum = 0.0;//计算输入了多少个数字int m = 0;while(scanner.hasNextDouble()){ //判断是不是数字double x = scanner.nextDouble();m++;sum = sum + x;System.out.println("本次是第" + m + "次输入,当前总和是:" + sum);}System.out.println("一共输入:" + m + "次");System.out.println("总和是:" + sum);}
    }
    

12、java的顺序结构


  • java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。

  • 顺序结构是最简单的算法结构。

  • 语句与语句指尖,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构

13、JAVA的选择结构


if单选择结构
  • 我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样的一个过程在程序中用if语句来表示。

  • 语法:

    if (布尔表达式) {//如果布尔表达式为true将执行的语句
    }
    
  • 用例:

    package com.xuanze.demo1;import java.util.Scanner;public class ifDemo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = scanner.nextLine();//  equals:判断字符串是否相等if (s.equals("hello")){System.out.println(s);}System.out.println("End");scanner.close();}
    }
    
if双选择结构
  • 现在有个需求,公司要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发,这样的需求用一个if就搞不定了,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构。

  • 语法:

    if (布尔表达式) {//如果布尔表达式的值为true
    }else{//如果布尔表达式的值为flse
    }
    
  • 用例:

    package com.xuanze.demo1;import java.util.Scanner;public class IfDemo02 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入您的成绩:");Double score = scanner.nextDouble();//  if双选择结构if (score > 60) {System.out.println("您的成绩及格");}else {System.out.println("您的成绩不及格");}scanner.close();}
    }
if多选择结构
  • 我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断。比如90-100就是A,80-90就是B…等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!

  • 语法:

    if(布尔表达式 1){//如果布尔表达式 1的值为true执行代码
    }else if(布尔表达式 2){//如果布尔表达式 2的值为true执行代码
    }else if(布尔表达式 3){//如果布尔表达式 3的值为true执行代码
    }else {//如果以上布尔表达式都不为true执行代码
    }
    
  • 用例:

    package com.xuanze.demo1;import java.util.Scanner;public class IfDemo03 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入您的成绩:");Double score = scanner.nextDouble();/*if 语句至多有1个else语句,else语句在所有的else if语句之后。if语句可以有若干个else if 语句,它们必须在else语句之前。一旦其中一个else if语句检测为true,其他的else if以及 else语句就将跳过执行*///if多选择结构if (score == 100){System.out.println("恭喜满分!");}else if (score<100 && score>=90){System.out.println("A级");}else if (score<90 && score>=80){System.out.println("B级");}else if (score<80 && score>=70){System.out.println("C级");}else if (score<70 && score>=60){System.out.println("D级");}else if (score<60 && score>=0){System.out.println("不及格");}else {System.out.println("成绩不合法");}scanner.close();}
    }
    
嵌套的if结构
  • 使用嵌套的if…else语句是合法的。也就是说你可以在另一个if或者else if语句中使用if或者else if语句。你可以像if语句一样嵌套else if…else。

  • 语法:

    if(布尔表达式 1){//如果布尔表达式 1的值为true执行代码if(布尔表达式 2){//如果布尔表达式 2的值为true执行代码}
    }
    
switch多选择结构
  • 多选择结构还有一个实现方式就是switch case语句。

  • switch case 语句判断奕哥变量与一系列值中某个值是否相等,每个值为一个分支。

  • switch语句中的变量类型可以是:

    • byte、short、int或者char
    • 从Java SE 7开始,switch支持字符串String类型了
    • case标签必须为字符串常量或字面量
  • 语法:

    switch(expression){case value ://当expession与value相等时执行此语句1break;//断开 可选,这里不断开将指向语句1和语句2,直到有break断开为止。这是case穿透现象。case value2 ://当expession与value2相等时执行此语句2break;//断开 可选//你可以有任意数量的case语句default ://可选//以上value、value2都不满足时执行此语句
    }
    
  • 用例:

    package com.xuanze.demo1;public class SwitchDemo01 {public static void main(String[] args) {String grade = "A";//switch匹配一个具体的值switch(grade){case "A" :System.out.println("满分");break;case "B" :System.out.println("良");//case穿透case "C":System.out.println("合格");case "D":System.out.println("不合格");default:System.out.println("输入不规范");break;}}
    }
    

14、Java的循环结构


  • 在Java5中引入了一种主要用于数组的增强型for循环。
while循环
  • while是最基本的循环,它的结构为:

    while(布尔表达式){//循环内容
    }
    
  • 只要布尔表达式为true,循环就会一直执行下去。

  • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失败的方式来结束循环

  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等。

  • 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环,会影响程序性能或者造成程序卡死奔溃!

  • 思考:计算1+2+3+…+100=?

  • 用例 1:

    package com.xunhuan;public class XunHuanDemo01 {public static void main(String[] args) {int i = 0;//while循环,输出1~100while (i < 100){System.out.println(++i);}}
    }
    
  • 用例 2:

    package com.xunhuan;public class XunHuanDemo02 {public static void main(String[] args) {//死循环while (true){//监听程序//定时检查程序//.........}}
    }
  • 用例 3:

    package com.xunhuan;public class XunHuanDemo03 {public static void main(String[] args) {//计算1+2+3+...+100=?int i = 1;int sum = 0;while( i <= 100){sum = sum + i;i++;}System.out.println(sum);}
    }
    
do…while循环
  • 对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

  • do…while循环和while循环相似,不同的是,do…while循环至少会执行一次。

    do {//代码语句
    } while (布尔表达式);
    
  • while和do…while的区别

    • while先判断后执行。do…while是先执行后判断!
    • do…while总是保证循环体会被至少执行一次!这是他们的主要差别。
  • 用例 1:

    package com.xunhuan;public class XunHuanDemo04 {public static void main(String[] args) {int a = 1;//while循环会判断后再开始循环while (a < 0) { System.out.println(a);a++;}System.out.println("***********************************");//do...while循环无论条件是否成立,都会先执行一次循环体do {System.out.println(a);} while (a < 0);}
    }
    /*
    输出内容:
    =======================================================
    ***********************************
    1进程已结束,退出代码0*/
    
for循环
  • 虽然所有循环结构都可以用while或者do…while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单。

  • for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

  • for循环执行的次数是在执行前就确定的。语法格式如下:

    for (初始化; 布尔表达式; 迭代更新) {//代码语句
    }
    /*
    关于for循环有以下几点说明:最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。再次检测布尔表达式。循环执行上面的过程。
    */
    
  • 练习1,计算0到100之间的奇数和偶数的和

    package com.xunhuan;public class ForDemo01 {public static void main(String[] args) {// 计算0到100之间的奇数和偶数的和int oddSum = 0; //  奇数和int evenSum = 0;    //  偶数和for (int i = 0; i <= 100; i++) {if (i % 2 == 0){evenSum+=i; //  evenSum = evenSum + i;}else {oddSum+=i;}}System.out.println("奇数总和为:" + oddSum);System.out.println("偶数总和为:" + evenSum);}
    }
    
  • 练习2,用while或for循环输出1~1000之间能被5整除的数,并且每行输出3个

    package com.xunhuan;public class ForDemo02 {public static void main(String[] args) {// for循环输出1~1000之间能被5整除的数,并且每行输出3个for (int i = 1; i <= 1000; i++) {if (i % 5 == 0) {System.out.print(i + "\t\t");}if (i % (5*3) == 0) {System.out.println();}}System.out.println();System.out.println("===================================================================");// while循环输出1~1000之间能被5整除的数,并且每行输出3个int m = 1;while (m <= 1000) {if (m % 5 ==0) {System.out.print(m + "\t\t");}if (m % (5*3) ==0) {System.out.println();}m++;}}
    }
    
  • 练习3,打印九九乘法表

    package com.xunhuan;public class ForDemo03 {public static void main(String[] args) {// 输出九九乘法表//   1、先打印第一列//  2、把固定的1再用一个循环包起来//  3、去掉重复项,i <= j// 4、调整样式for (int a = 1; a <= 9; a++) {for (int b = 1; b <= a; b++) {System.out.print(a + "*" + b + "=" + (a*b) + "\t\t");}System.out.println();}}
    }
    
增强for循环
  • 这里我们先只是见一面,做个了解,之后数组我们重点使用

  • Java5引入了一种主要用于数组或集合的增强型for循环。

  • Java增强for循环语句格式如下:

    for(声明语句 : 表达式){//代码句子
    }
    
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

  • 用例:

    package com.xunhuan;public class ForDemo04 {public static void main(String[] args) {int [] numbers = {10,20,30,40,50};  //定义了一个数组//for循环遍历数组元素for (int i = 0; i < 5; i++) {System.out.println(numbers[i]);}System.out.println("=====================================================");//增强for遍历数组的元素for (int x : numbers) { //这里只是把numbers数组里的值一个一个赋值给xSystem.out.println(x);}}
    }
    
break、continue
  • break在任何循环语句的主体部分,均可用break控制循环的流程,break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

  • continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

  • 关于goto关键字

    • goto关键字很早就在程序设计语言中出现,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用:Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子——带标签的break和continue。
    • “标签”是指后面跟一个冒号的标识符,例如:label:
    • 对Java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断存在标签的地方。
  • break用例:

    package com.xunhuan;public class BreakDemo01 {public static void main(String[] args) {int i =0;while (i < 100) {i++;System.out.println(i);if (i == 30) {break;  //跳出循环,但不会终止程序}}System.out.println("123");}
    }
    
  • continue用例:

    package com.xunhuan;public class ContinueDemo01 {public static void main(String[] args) {int i = 0;while (i < 100) {i++;if (i % 10 == 0) {System.out.println();continue;   //从这里终止本次循环执行的语句,继续下一次循环}System.out.print(i + "\t");}// break在任何循环语句的主体部分,均可用break控制循环的流程。(switch、for、while)// break用于强行退出循环,不执行循环中剩余的语句。// continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。}
    }
    
  • 标签用例:

    package com.xunhuan;public class LabelDemo01 {public static void main(String[] args) {//打印101~150之间所有的质数//质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。(就是除了1和它本身以外不会被其他自然数整除)//不建议使用这种标签!!!outer:for (int i = 101; i < 150; i++) {for (int j = 2; j < i/2; j++) {if (i % j == 0) {continue outer; //终止本次outer标签的循环,继续下一次outer循环}}System.out.print(i + "\t");}}
    }
  • 打印三角形

    package com.xunhuan;public class TestDemo01 {public static void main(String[] args) {//打印三角形 五行for (int i = 1; i <= 5; i++) {for (int j = 5; j >= i; j--) {System.out.print("-");}for (int j = 1; j <= i; j++) {System.out.print("*");}for (int j = 1; j < i; j++) {System.out.print("*");}System.out.println();}}
    }/*
    运行结果:
    ================================================================*************************进程已结束,退出代码0
    ================================================================
    */
    

15、Java的方法定义和调用


什么是方法
  • System.out.println(),那么它是什么呢?

    • System是一个类
    • out是一个对象
    • println是一个方法
  • Java方法是语句的集合,它们在一起执行一个功能。

    • 方法是解决一类问题的步骤的有序组合。
    • 方法包含于类或对象中。
    • 方法在程序中被创建,在其他地方被引用。
  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展。

  • 回顾:方法的命名规则?

    • 首单词小写,后面单词首字母大写,骆驼峰命名规则
  • 用例:

    package com.method;public class Demo01 {//main方法public static void main(String[] args) {int i = add(10, 20); //这里的10, 20是实际参数,实际调用传递给方法的参数。System.out.println(i);text();}//加法//这里的int a, int b是形式参数,用来定义作用的。public static int add(int a, int b) {   //添加static使方法称为类方法方便调用。return a+b;}public static void text() {// 输出九九乘法表for (int a = 1; a <= 9; a++) {for (int b = 1; b <= a; b++) {System.out.print(a + "*" + b + "=" + (a*b) + "\t\t");}System.out.println();}}
    }
    
方法的定义和调用
  • Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

    修饰符  返回值类型  方法名(参数类型  参数名){。。。方法体return  返回值;
    }
    
  • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

    • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
    • 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。这种情况下,returnValueType是关键字void。
    • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
    • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
      • 形式参数:在方法被调用时用于接收外界输入的数据。
      • 实参:调用方法时实际传给方法的数据。
    • 方法体:方法体包含具体的语句,定义该方法的功能。
    • return:当这个方法有返回值时,必须使用return返回出去,而且返回值的类型必须与定义时写的方法返回值类型一致,如果定义方法的返回值类型为void的话,那说明此方法没有返回值。
  • 调用方法:对象名.方法名(实参列表)

  • Java支持两种调用方法的方式,根据方法是否返回值来选择。

  • 当方法返回一个值的时候,方法调用通常被当做一个值。例如:

    int larger = max(30, 40);
    
  • 如果方法返回值时void,方法调用一定是一条语句。

    System.out.println("Hello,wukunyan!");
    
  • 用例:

    package com.method;public class Demo02 {public static void main(String[] args) {System.out.println(max(30,30));}//比较大小public static int max(int num1, int num2) {int result;if (num1 == num2) {System.out.println("num1=num2");return 0;   //可以使用return 0;终止方法}if (num1 > num2) {result = num1;}else {result = num2;}return result;}
    }
    
方法的重载
  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数。

  • 方法的重载规则:

    • 方法名称必须相同
    • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
    • 方法的返回类型可以相同也可以不相同
    • 仅仅返回类型不同不足以成为方法的重载
  • 实现理论:

    • 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
  • 用例:

    package com.method;public class Demo02 {public static void main(String[] args) {double i = max( 33.4, 34.5);System.out.println(i);int j = max(44, 55, 55);System.out.println(j);System.out.println(max(30,30));}//比大小public static int max(int num1, int num2) {int result;if (num1 == num2) {System.out.println("num1=num2");return 0;   //可以使用return 0;终止方法}if (num1 > num2) {result = num1;}else {result = num2;}return result;}//重载1public static double max(double num1,double num2) {double result;if (num1 == num2) {System.out.println("num1=num2");return 0;   //可以使用return 0;终止方法}if (num1 > num2) {result = num1;}else {result = num2;}return result;}//重载2public static int max(int a, int b, int c) {int result = b;if (a > b) {b = a;}if (a < c) {result = c;}return result;}
    }
    

16、Java命令行传参

  • 有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现

  • 用例:

    package com.method;public class Demo03 {public static void main(String[] args) {for (int i = 0; i < args.length; i++) {System.out.println("args[" + i + "]=" +args[i]);}}
    }
    
  • 命令行操作:

    Microsoft Windows [版本 10.0.19044.1645]
    (c) Microsoft Corporation。保留所有权利。E:\java后端\Novice\demo\untitled\src\com\method>javac Demo03.javaE:\java后端\Novice\demo\untitled\src\com\method>cd ../E:\java后端\Novice\demo\untitled\src\com>cd ../E:\java后端\Novice\demo\untitled\src>java com.method.Demo03E:\java后端\Novice\demo\untitled\src>java com.method.Demo03 this is wukunyan
    args[0]=this
    args[1]=is
    args[2]=wukunyan
    

17、Java的可变参数(不定项参数)

  • JDK 1.5开始,Java支持传递同类型的可变参数给一个方法(就是传递多个同类型的参数,具体多少个不一定,它们本质上就是一个集合)

  • 在方法声明中,在指定参数类型后加一个省略号(…)

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明

    package com.method;public class Demo04 {//求最大值public static void main(String[] args) {max(666,444,54.54654564);}public static void max(double... num) {if (num.length == 0) {System.out.println("没有收到参数");return;}double result = -1;for (double v : num) {  //遍历num数组中的每一个值给到vif (v > result) {result = v;}}System.out.println("最大值为:" + result);}
    }
    

如果有同学发现笔记存在问题,麻烦私信找我,我马上来更正,谢谢!

JavaSE学习笔记(一)基础知识相关推荐

  1. php基础教学笔记,php学习笔记:基础知识

    php学习笔记:基础知识 2.每行结尾不允许有多余的空格 3.确保文件的命名和调用大小写一致,是由于类Unix系统上面,对大小写是敏感的 4.方法名只允许由字母组成,下划线是不允许的,首字母要小写,其 ...

  2. 【学习笔记--FMCW基础知识】

    学习笔记--FMCW基础知识 前言 mmWave测距原理 mmWave区分多个物体 mmWave的距离分辨率(Range Solution) mmWave的最大测量距离 前言 由于工作原因需要了解TI ...

  3. HTML5学习笔记 —— JavaScript基础知识

    HTML5学习笔记 -- JavaScript基础知识 标签: html5javascriptweb前端 2017-05-11 21:51 883人阅读 评论(0) 收藏 举报 分类: JavaScr ...

  4. SAS学习笔记1——基础知识(库、PDV、变量选择、观测值排序、创建新变量

    SAS学习笔记1--基础知识 1.逻辑库.临时库.永久库 2.数据步 2.1数据步语法 2.2 数据步的编译和执行过程 2.3变量的选择 2.3.1 keep和drop语句 2.4变量的重命名rena ...

  5. JS学习笔记——入门基础知识总结

    JS入门基础知识总结1 前言 基础背景知识 一.产生历史: 二.特点: 三.应用方向: 四.Javascript组成: JavaScript书写使用方式 一.行内式(了解即可,项目中不使用,日常练习尽 ...

  6. 《UNIX 环境高级编程》学习笔记——UNIX 基础知识

    UNIX环境高级编程--UNIX 基础知识 引言 UNIX 体系结构 登录 文件和目录 输入和输出 程序和进程 出错处理 用户标识 信号 时间值 系统调用和库函数 引言 所有操作系统都为它们所允许的程 ...

  7. 单片机学习笔记——微机基础知识

    微机基础知识 微处理器,微机和单片机概念 微处理器的组成 一.运算器 主要寄存器 主要寄存器(IR),指令译码器(ID) 程序计数器(PC) 地址寄存器(AR) 二.控制器 存储器和输入输出接口 一. ...

  8. CAN总线学习笔记 | CAN基础知识介绍

    一.CAN协议 1.1 CAN协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为 ...

  9. WebGL学习笔记(基础知识篇)

    WEBGL基础知识介绍 1.场景(scene) 场景如其名,即显示3D空间内物体的容器,就好比一个箱子是一个3D场景. 2.坐标系: webgl使用笛卡尔坐标系(宽度.高度和深度),我们也可以指定使用 ...

  10. RocketMQ学习笔记:基础知识和安装启动

    这是本人学习的总结,主要学习资料如下 马士兵教育 rocketMq官方文档 目录 1.架构 2.基本概念 3.安装和启动 3.1.命令行启动 3.1.1.启动Server 3.1.2.启动Broker ...

最新文章

  1. linux命令学习之:curl
  2. C# WinFrom 去掉groupbox的边框
  3. 【渝粤题库】国家开放大学2021春1020国际私法题目
  4. 初步学习pg_control文件之六
  5. 开着开着,Model S天窗飞了!特斯拉回应...
  6. [转载]与索引相关的概念---聚簇因子
  7. python map对象
  8. 服务器外置硬盘安装教程,小容量Mac用户必看——苹果电脑外接硬盘安装windows教程...
  9. 网易你收集用户身份证扫描件意欲何为——隄防维权背后的个人信息安全陷阱
  10. Md5加密算法的原理及应用
  11. Java集合 HashSet 和 HashMap
  12. Python安装distribute包
  13. thinkpad笔记本电脑怎么关闭触摸板
  14. 服务器1521端口被关闭,如何开启
  15. 2022年「博客之星」参赛博主:hyk今天写算法了吗
  16. 2008年新作——《网管员面试宝典》上市了
  17. Django QuerySet优化
  18. 【开源要闻】Canonical发布新OpenStack工具、Kubernetes访客引导方法
  19. python 打印文件_在Python中打印word文档
  20. css布局-浮动、定位、flex布局

热门文章

  1. vscode的自定义Snippets模板快捷键
  2. 作用域、条件注解和@Import注入方式
  3. lumen 的路由具体实现
  4. 玫瑰c语言程序教程,c语言如何实现玫瑰花
  5. 基于PHP的图书管理系统
  6. 网页端实现大尺寸图片的查看、放大缩小、标记标尺等功能
  7. 浏览器无法渲染php,解决lighttpd运行后浏览器无法渲染html
  8. CSS3使用calc() 计算高度和宽度 vh px
  9. 大一计算机论文_大一计算机论文大纲模板范文 大一计算机论文提纲怎样写
  10. LeetCode学习-查找2-合并版