diff --git "a/07 \345\206\257\345\273\272\347\250\213/20221124 java\347\232\204\347\256\200\344\273\213\344\270\216JDK\347\232\204\345\256\211\350\243\205\345\222\214\344\275\277\347\224\250 .md" "b/07 \345\206\257\345\273\272\347\250\213/20221124 java\347\232\204\347\256\200\344\273\213\344\270\216JDK\347\232\204\345\256\211\350\243\205\345\222\214\344\275\277\347\224\250 .md" deleted file mode 100644 index a40280531e048c741a8839afe44725d96dec44b8..0000000000000000000000000000000000000000 --- "a/07 \345\206\257\345\273\272\347\250\213/20221124 java\347\232\204\347\256\200\344\273\213\344\270\216JDK\347\232\204\345\256\211\350\243\205\345\222\214\344\275\277\347\224\250 .md" +++ /dev/null @@ -1,106 +0,0 @@ -Java简介,JDK的安装与使用 - -一.Java简介(什么是Java) - -为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合,就是计算机程序 -​ 编写程序的工具 就是计算机语言,Java是目前应用最广泛的编程语言。 - -1 ) 高级编程语言 -2 ) 开发java程序三步走: -——————编写源程序,编译源程序,运行 - -二.Java技术平台 - -Java SE:标准版,java的技术与核心,开发桌面应用程序 -Java EE:提供企业级项目的解决方案,开发网页应用 -Java ME:小型版,是为开发电子消费产品和嵌入式设备提供的解决方案。 - -特点: -跨平台:write once,run anywhere -安全的:安全机制,防止恶意代码的攻击 -简单的:语法简洁,去除不常用的功能 -健壮的:可靠性高,更具健壮性 -面向对象:面向对象的程序设计语言 - -三.JDK的下载和安装 - -1)什么是JDK - -​ Java Development Kit (Java开发工具包) -是Java 语言软件重要开发工具包,是整个Java的核心所在 - -2)JDK的下载 - -通过官方网站获取JDK : https://www.oracle.com/ - -直接下载:JDK下载 - 编程宝库 (codebaoku.com) - -​ 注意:针对不同操作系统,下载对应的JDK - -3)JDK的安装 - -安装路径不要包含 中文和空格 - -两个重要工具 - -需要配置环境变量 - -编译工具: javac - -运行工具:java - -四.第一个程序 - -1)HelloWorld程序编写 - -代码:public class HelloWorld{ - public static void main(String[] args){ - System.out.println("HelloWorld"); - } -} - -2)开发java程序的步骤 - -1、编写一个java源程序 - -新建记事本,将后缀名改为.java - -2、编译java源程序,语法:javac 源文件名.java - -编译后会生成一个.class的字节码文件 - -3、运行java程序,运行的是.class的文件,语法:java 源文件名 - -注意:java严格区分大小写 - -3)环境变量的配置 - -右击计算机——>属性——>高级系统设置——>高级——>环境变量: - -JAVA_HOME -新建一个JAVA_HOME,配置JDK安装的位置 - -PATH -修改PATH,在最前面添加JDK命令文件的位置,即bin目录的位置,以分号隔开%JAVA_HOME%\bin - -Git的使用 - -1.git clone 下载地址 - -2.git add . - -3.git commit -m "名称" - -4.git config --global user.email "邮箱" - -5.git config --global user.name "用户名" - -6.输入账号密码 - -7.git commit -m "名称" - -8.git push - - - - diff --git "a/07 \345\206\257\345\273\272\347\250\213/20221125 java\347\232\204idea\346\246\202\350\277\260\345\256\211\350\243\205\345\222\214\350\257\255\346\263\225\345\237\272\347\241\200.md" "b/07 \345\206\257\345\273\272\347\250\213/20221125 java\347\232\204idea\346\246\202\350\277\260\345\256\211\350\243\205\345\222\214\350\257\255\346\263\225\345\237\272\347\241\200.md" deleted file mode 100644 index 590f58ae35d7558bc3d667d390c197168d5f6334..0000000000000000000000000000000000000000 --- "a/07 \345\206\257\345\273\272\347\250\213/20221125 java\347\232\204idea\346\246\202\350\277\260\345\256\211\350\243\205\345\222\214\350\257\255\346\263\225\345\237\272\347\241\200.md" +++ /dev/null @@ -1,168 +0,0 @@ -## IDEA - - - -### 一.IDEA的概述与安装 - - - -IDEA:全称Intellij IDEA,是用于Java语言开发的集成环境,是业界公认的目前用于Java程序开发最好的工具 -集成环境:把代码编写,编译,运行,调试等多种功能综合到一起的开发工具 -常见集成开发工具:Eclipse、MyEclipse、NetBeans等 - -下载:https://www.jetbrains.com/idea -安装:建议修改安装路径 - -1)什么是IDEA:用于Java语言开发的集成开发环境 -2)IDEA的下载:官网下载,或国内镜像下载 -3)IDEA的安装:建议修改路径为D:\develop - -### 二.IDEA的代码结构 - - - -1)项目(project): 学生成绩管理 系统 -模块(module) 老师录入模块,辅导员查询模块,学生查询模块 -包(package) 文件夹 -类(class) java源码的实际文件 - -2)注释 - -注释是指在程序中添加的说明性信息 - -//注释内容 单 行注释:表示对下一条语句进行一个解释 - -/* 注释内容 */ 多行注释:表示对下面一段语句进行一个解释 - -/**注释内容 */ 文档注释:表示对一段文本注释 - -注释的语句是不会进行编译的,注释不参与程序运行,仅起到说明作用 - -### 三.IDEA中常用的快捷键 - - - -快速生成main方法和输出语句 -main方法:main或者psvm,回车 -输出语句:sout,回车 - -常用快捷键 -Ctrl+D:复制数据到下一行 -Ctrl+X:剪切数据,可以用来删除所在行 -Ctrl+Alt+L:格式化代码,建议自己写代码的时候就注意格式 -Ctrl+/:对选中的代码添加单行注释,如果想取消注释,再来一次即可 -Ctrl+Shift+/:对选中的代码添加多行注释,如果想取消注释,再来一次即可 - -## Java的基础语法 - - - -1,字面量(关键字):其实就是某种语言赋予了特殊含义的单词。 - -保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。 - -2,标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ; - -注意: - -1),数字不可以开头。 - -2),不可以使用关键字。 - -3,常量:是在程序中的不会变化的数据。 - -4,变量:其实就是内存中的一个存储空间,用于存储常量数据。 - -作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。 - -特点:变量空间可以重复使用。 - -什么时候定义变量?只要是数据不确定的时候,就定义变量。 - -变量空间的开辟需要什么要素呢? - -(1)这个空间要存储什么数据? - -数据类型。 - -(2)这个空间叫什么名字啊? - -变量名称。 - -(3)这个空间的第一次的数据是什么? - -变量的初始化值。 - -变量的作用域和生存期: - -变量的作用域: - -作用域从变量定义的位置开始,到该变量所在的那对大括号结束; - -生命周期: - -变量从定义的位置开始就在内存中活了; - -变量到达它所在的作用域的时候就在内存中消失了; - -5.数据类型: - -(1):基本数据类型:byte、short、int、long、float、double、char、boolean - -(2):引用数据类型: 数组、类、接口。 - -**级别从低到高为:**byte,char,short(这三个平级)–>int–>float–>long–>double - -自动类型转换:从低级别到高级别,系统自动转的; - -强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低的变量; - -运算符号: - -(1)、算术运算符。 - -+ - * / % %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。 - -+:连接符。 - -++,– - -(2)、赋值运算符。 - -= += -= *= /= %= - -(3) 、比较运算符。 - -特点:该运算符的特点是:运算完的结果,要么是true,要么是false。 - -(4)、逻辑运算符。 - -& | ^ ! && || - -逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。 - -&: 只有两边都为true结果是true。否则就是false。 - -|:只要两边都为false结果是false,否则就是true - -^:异或:和或有点不一样。 - -两边结果一样,就为false。 - -两边结果不一样,就为true. - -& 和 &&区别: & :无论左边结果是什么,右边都参与运算。 - -&&:短路与,如果左边为false,那么右边不参数与运算。 - -| 和|| 区别:|:两边都运算。 - -||:短路或,如果左边为true,那么右边不参与运算。 - -(5)、位运算符:用于操作二进制位的运算符。 - -& | ^ - -& << >> >>>(无符号右移) - - diff --git "a/07 \345\206\257\345\273\272\347\250\213/20221129 java\345\237\272\346\234\254\350\257\255\346\263\225.md" "b/07 \345\206\257\345\273\272\347\250\213/20221129 java\345\237\272\346\234\254\350\257\255\346\263\225.md" deleted file mode 100644 index 15e92fced312183dcf4234d033948c7cf1448159..0000000000000000000000000000000000000000 --- "a/07 \345\206\257\345\273\272\347\250\213/20221129 java\345\237\272\346\234\254\350\257\255\346\263\225.md" +++ /dev/null @@ -1,111 +0,0 @@ -1.创建Scanner对象 - -```java -Scanner sc = new Scanner(System.in);//创建Scanner对象,sc表示变量名,其他均可不变 -``` - -2.接收数据 - -```java -int i = sc.nextInt();//表示将键盘录入的值作为int返回 -``` - -示例 - -```java -import java.util.Scanner; -public class ScannerDemo{ - public static void main(String[]args){ - //创建对象 - Scanner sc = new Scanner(System.in); - //接收数据 - int a = sc.nextInt(); - //输出数据 - System.out.println(a); - } -} -``` - -### 类型转换 - -1、自动类型转换 - -```java -double num = 10;//将int类型的10直接赋值给double类型 -System.out.println(num);//输出10.0 -``` - -2、强制类型转换 - -把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。 - -​ 强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量; - -```java -double num1 = 5.5; -int num2 = (int) num1; // 将double类型的num1强制转换为int类型 -System.out.println(num2); // 输出5(小数位直接舍弃) -``` - -## 运算符 - - 运算符:对常量或者变量进行操作的符号 - -表达式:用运算符把常量或者变量连接起来符合Java语法的式子就可以称为表达式。 - -​ 不同运算符连接的表达式体现的是不同类型的表达式。 - -```java -int a = 10; -int b = 20; -int c = a + b; -``` - -+:是运算符,并且是算术运算符。 - -a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。 a和b称为操作数 - -/和%的区别:两者都做除法, - -/ 取结果的商 ,% 取结果的余数。 - -整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。 - -```java -int a = 10; -int b = 3; -System.out.println(a / b); // 输出结果 -System.out.println(a % b); // 输出结果 -``` - - - -## 作业 - -```java -import java.util.Scanner; -public static void main(Striang[]args){ - Scanner sc = new Scanner (System.in); - Stytem.out.println("请输入一个四位数"); - int age = sc.nexInt(); - int ge = age%10; - int shi = age/10%10; - int bai = age/100%10; - int qian = age/1000; - System.out.println("整数"+age+"个位数为:"+ge+",十位数为:"+shi+",百位数为:"+bai+",千位数为:"+qian); - - -Scanner name = new Scanner(System.in); -System.out.println("请输入华氏度"); -double hua = name.nextInt(); -double q = ((hua-32)*5/9); -System.out.println("摄氏度为"+q); -System.out.println("请输入摄氏度"); -double she = name.nextInt(); -double w = (she*9/5+32); -System.out.println("华氏度为:"+w) - -} -``` - - diff --git "a/07 \345\206\257\345\273\272\347\250\213/20221205 java.md" "b/07 \345\206\257\345\273\272\347\250\213/20221205 java.md" deleted file mode 100644 index aecba7ddc81347b6fbc1be6a10019988d0cc4c77..0000000000000000000000000000000000000000 --- "a/07 \345\206\257\345\273\272\347\250\213/20221205 java.md" +++ /dev/null @@ -1,130 +0,0 @@ -``` -import java.util.Scanner; - -public class czc { -/* private static final char 夏利 =1; - private static final char 富康 = 2; - private static final char 桑塔纳 = 3;*/ - - - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("请输入车型"); - int num= sc.nextInt(); - System.out.println("请输入路程"); - double Num = sc.nextDouble(); - switch (num){ - case 1: - if (Num<=3){ - System.out.println(+Num*3); - } - if (Num>3){ - System.out.println((Num-3)*2.1+9); - } - break; - case 2: - if (Num<=3){ - System.out.println(Num*4); - } - if (Num>3){ - System.out.println((Num-3)*2.4+12); - } - break; - case 3: - if (Num<=3){ - System.out.println(Num*5); - } - if (Num>3){ - System.out.println((Num-3)*2.7+15); - } - break; - default: - System.out.println("输入错误"); - break; - - } - } - } -``` - -``` -import java.util.Scanner; - -public class tian { - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - - System.out.println("请输入年份"); - int year = sc.nextInt(); - System.out.println("请输入月份"); - int Num = sc.nextInt(); - System.out.println("请输入日份"); - int num = sc.nextInt(); - switch (year){ - case 2000: - if(year%4==0&&year%400!=0||year%400==0){ - System.out.println(year+"是闰年"); - } - if(Num >= 3){ - System.out.println((Num-1)*30+num+1); - } - System.out.println((Num-1)*30+num); - } - } -} -``` - - - -``` -import java.util.Scanner; -//a o e i u v -public class zimu { - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("请输入一个字符"); - char num = sc.next().charAt(0); - switch (num){ - case 'a': - case 'A': - case 'e': - case 'E': - case 'i': - case 'I': - case 'o': - case 'O': - case 'u': - case 'U': - case 'v': - case 'V': - System.out.println("这是韵母"); - break; - default: - System.out.println("这是声母"); - - - } - if(num>='A'&& num<='Z'){ - System.out.println("大写字母"); - } else { - System.out.println("小写字母"); - } - } -} -``` - -## 3. 流程控制语句 - -在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 - -### 3.1 流程控制语句分类(了解) - -​ 顺序结构 - -​ 分支结构(if, switch) - -​ 循环结构(for, while, do…while) - -### 3.2 顺序结构(了解) - -顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 \ No newline at end of file diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.1.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.1.png" new file mode 100644 index 0000000000000000000000000000000000000000..0940bf6248d08c4e3226976f9120f8ef98ac2014 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.1.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.2.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.2.png" new file mode 100644 index 0000000000000000000000000000000000000000..5c6200dd822a4523a6230aa10c832c19147e29e0 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.2.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.3.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.3.png" new file mode 100644 index 0000000000000000000000000000000000000000..a173cc0457536d6a16aa2162edf58df3d186e136 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/1.3.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.6.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.6.png" new file mode 100644 index 0000000000000000000000000000000000000000..ffa1804ee906ce8dcd9d8b9bc489e331af021128 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.6.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.7.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.7.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff3d21d1fc06d61188332cfb711b5fe8c77ffeb5 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.7.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.8.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.8.png" new file mode 100644 index 0000000000000000000000000000000000000000..73c0513584add6ee262a2a1da7a5654ea7f66912 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/13.8.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2-2.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..9eebf754b54f002ce2c9ef84d626a470bce8247f Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2-2.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2-3.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..3854c24dbcc1705714062dfedf5528004c59884f Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2-3.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2.png" new file mode 100644 index 0000000000000000000000000000000000000000..53a2d1f2cf93dd33e306b5272d164099f7334cd7 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/2.2.2.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.4.2.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.4.2.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e14aaae96dd06caaeb350632fa6d3d234daf6c3 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.4.2.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.5.1\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.5.1\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..1a80aff7ddc416d438bba3dd2c4aca095735ab45 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.5.1\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.5.1\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\346\240\274\345\274\217.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.5.1\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\346\240\274\345\274\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..9aeb995db0740e57818d6c7c14280a5447d98be6 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.5.1\345\217\230\351\207\217\347\232\204\345\256\232\344\271\211\346\240\274\345\274\217.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.7.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.7.png" new file mode 100644 index 0000000000000000000000000000000000000000..0ca9f1ba96fbf1bf600411f5c9f9900b3599866c Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/3.7.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.2.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.2.png" new file mode 100644 index 0000000000000000000000000000000000000000..9d03989d3124f4d80dff8f739b937ba145a0bd01 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.2.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.1 if \350\257\255\345\217\245\346\240\274\345\274\2171.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.1 if \350\257\255\345\217\245\346\240\274\345\274\2171.png" new file mode 100644 index 0000000000000000000000000000000000000000..7ece08fd8389647fe56c677ee2def549bd14ed7d Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.1 if \350\257\255\345\217\245\346\240\274\345\274\2171.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.2 if \350\257\255\345\217\245\346\240\274\345\274\2172.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.2 if \350\257\255\345\217\245\346\240\274\345\274\2172.png" new file mode 100644 index 0000000000000000000000000000000000000000..6de072d789b663add2ee262f274724d3e3240ba4 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.2 if \350\257\255\345\217\245\346\240\274\345\274\2172.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.3 if \350\257\255\345\217\245\346\240\274\345\274\2173.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.3 if \350\257\255\345\217\245\346\240\274\345\274\2173.png" new file mode 100644 index 0000000000000000000000000000000000000000..392a83c043c10eb4a3e4a2006f4515f81410de68 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/6.3.3 if \350\257\255\345\217\245\346\240\274\345\274\2173.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/7.1.png" "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/7.1.png" new file mode 100644 index 0000000000000000000000000000000000000000..988ef3661891ae35b9bd7faefc119a322ace1ce6 Binary files /dev/null and "b/07 \345\206\257\345\273\272\347\250\213/Java\347\254\224\350\256\260\345\233\276\347\211\207\350\241\245\345\205\205/7.1.png" differ diff --git "a/07 \345\206\257\345\273\272\347\250\213/\346\210\221\347\232\204Java\347\254\224\350\256\260.md" "b/07 \345\206\257\345\273\272\347\250\213/\346\210\221\347\232\204Java\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..b336f34b4a9bfbbbd48160f44844acf3a5a41c00 --- /dev/null +++ "b/07 \345\206\257\345\273\272\347\250\213/\346\210\221\347\232\204Java\347\254\224\350\256\260.md" @@ -0,0 +1,2133 @@ +--- +typora-root-url: Java笔记图片补充 +--- + +# 1. Java概述 + +## 1.1 Java语言发展史 + +语言:人与人交流沟通的表达方式 + +计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 + +Java语言是美国Sun公司(Stanford University Network)在1995年推出的计算机语言 + +Java之父:詹姆斯·高斯林(James Gosling) + +2009年,Sun公司被甲骨文公司收购,所以我们现在访问oracle官网即可:https://www.oracle.com + +![](/1.1.png) + +## 1.2 Java语言跨平台原理 + +Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的跨平台。 + +![](/1.2.png) + +## 1.3 JRE和JDK + +JVM(Java Virtual Machine),Java虚拟机 + +JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API) JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具 + +总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机。 + +![](/1.3.png) + +## 1.4 JDK的下载和安装 + +### 1.4.1 下载 + +通过官方网站获取JDK + +[http://www.oracle.com](http://www.oracle.com/) + +**注意**:针对不同的操作系统,需要下载对应版本的JDK。 + +### 1.4.2 安装 + +傻瓜式安装,下一步即可。但默认的安装路径是在C:\Program Files下,为方便统一管理建议修改安装路径,将与开发相关的软件都安装到一个目录下,例如:E:\develop。 + +**注意**:安装路径不要包含中文或者空格等特殊字符(使用纯英文目录)。 + +### 1.4.3 JDK的安装目录介绍 + +| 目录名称 | 说明 | +| :------: | :----------------------------------------------------------: | +| bin | 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。 | +| conf | 该路径下存放了JDK的相关配置文件。 | +| include | 该路径下存放了一些平台特定的头文件。 | +| jmods | 该路径下存放了JDK的各种模块。 | +| legal | 该路径下存放了JDK各模块的授权文档。 | +| lib | 该路径下存放了JDK工具的一些补充JAR包。 | + +# 2. 第一个演示程序 + +## 2.1 常用DOS命令 + +在接触集成开发环境之前,我们需要使用命令行窗口对java程序进行编译和运行,所以需要知道一些常用DOS命令。 + +1、打开命令行窗口的方式:win + r打开运行窗口,输入cmd,回车。 + +2、常用命令及其作用 + +| 操作 | 说明 | +| :-------------: | :-------------------------------: | +| 盘符名称: | 盘符切换。E:回车,表示切换到E盘。 | +| dir | 查看当前路径下的内容。 | +| cd 目录 | 进入单级目录。cd itterence | +| cd . | 回退到上一级目录。 | +| cd 目录1\目录2… | 进入多级目录。cd itterence\JavaSE | +| cd \ | 回退到盘符目录。 | +| cls | 清屏。 | +| exit | 退出命令提示符窗口。 | + +## 2.2 Path环境变量的配置 + +### 2.2.1 为什么配置环境变量 + +开发Java程序,需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的 bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK的bin目录下,所以配置环境变量的作用就是可以使bin目录下的java相关命令可以在任意目录下使用。 + +### 2.2.2 配置环境变量步骤 + +![](/2.2.2.png) + +![](/2.2.2-2.png) + +![](/2.2.2-3.png) + +**如果命令提示符窗口是配合环境变量前打开的,需要关闭该窗口,重新打开一个窗口测试** + +## 2.3 HelloWorld案例 + +HelloWorld案例是指在计算机屏幕上输出“HelloWorld”这行文字。各种计算机语言都习惯使用该案例作为第一个演示案例。 + +### 2.3.1 Java程序开发运行流程 + +开发Java程序,需要三个步骤:编写程序,编译程序,运行程序。 + +### 2.3.2 HelloWorld案例的编写 + +1、新建文本文档文件,修改名称为HelloWorld.java。 + +2、用记事本打开HelloWorld.java文件,输写程序内容。 + +```java +public class HelloWorld { + public static void main(String[] args) { + System.out.println("HelloWorld"); + } +} +``` + +### 2.3.3 HelloWorld案例的编译和运行 + +存文件,打开命令行窗口,将目录切换至java文件所在目录,编译java文件生成class文件,运行class文件。 + +> 编译:javac 文件名.java +> 范例:javac HelloWorld.java +> +> 执行:java 类名 +> +> 范例:java HelloWorld + +## 2.4 HelloWorld案例常见问题(理解) + +### 2.4.1 BUG + +在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)。 + +### 2.4.2 BUG的解决 + +1、具备识别BUG的能力:多看 + +2、具备分析BUG的能力:多思考,多查资料 + +3、具备解决BUG的能力:多尝试,多总结 + +### 2.4.3 HelloWorld案例常见问题 + +1、非法字符问题。Java中的符号都是英文格式的。 + +2、大小写问题。Java语言对大小写敏感(区分大小写)。 + +3、在系统中显示文件的扩展名,避免出现HelloWorld.java.txt文件。 + +4、编译命令后的java文件名需要带文件后缀.java + +5、运行命令后的class文件名(类名)不带文件后缀.class … + +# 3. java基础语法 + +## 3.1 注释 + +注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。Java中的 注释分为三种: + +单行注释。单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。 + +> *// 这是单行注释文字* + +多行注释。多行注释的格式是使用/* 和 */将一段较长的注释括起来。 + +> */\* * +> +> *这是多行注释文字 这是多行注释文字 这是多行注释文字* +> +> * \*/* + +**注意**:多行注释不能嵌套使用。 + +文档注释。文档注释以 /** 开始,以 */ 结束。 + +## 3.2 关键字 + +关键字是指被java语言赋予了特殊含义的单词。 + +关键字的特点:关键字的字母全部小写。 + +常用的代码编辑器对关键字都有高亮显示,比如现在我们能看到的public、class、static等。 + +## 3.3 常量 + +常量:在程序运行过程中,其值不可以发生改变的量。 + +Java中的常量分类: + +字符串常量 用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、“abc”、"中国"等 + +整数常量 整数,例如:-10、0、88等 + +小数常量 小数,例如:-5.5、1.0、88.88等 + +字符常量 用单引号括起来的一个字符,例如:‘a’、‘5’、‘B’、'中’等 + +布尔常量 布尔值,表示真假,只有两个值true和false + +空常量 一个特殊的值,空值,值为null + +除空常量外,其他常量均可使用输出语句直接输出。 + +```java +public class Demo { + public static void main(String[] args) { + System.out.println(10); // 输出一个整数 + System.out.println(5.5); // 输出一个小数 + System.out.println('a'); // 输出一个字符 + System.out.println(true); // 输出boolean值true + System.out.println("欢迎来到黑马程序员"); // 输出字符串 + } +} + +``` + +## 3.4 数据类型 + +### 3.4.1 计算机存储单元 + +我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位 (bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,通常用大写字母”B”表示,字节是由连续的8个位组成。 + +除了字节外还有一些常用的存储单位,其换算单位如下: + +1B(字节) = 8bit + +1KB = 1024B + +1MB = 1024KB + +1GB = 1024MB + +1TB = 1024GB + +### 3.4.2 Java中的数据类型 + +Java是一个强类型语言,Java中的数据必须明确数据类型。在Java中的数据类型包括基本数据类型和引用数据类型两种。 + +![3.4.2](/3.4.2.png) + +Java中的基本数据类型: + +| 数据类型 | 关键字 | 占用内存 | 取值范围 | +| :----------------------------------------------------------: | :----------: | :------: | :----------------------------------------------------------: | +| 整数类型 | byte | 1 | -128~127 | +| | short | 2 | -32768~32767 | +| | int(默认) | 4 | -2的31次方到2的31次方-1 | +| | long | 8 | -2的63次方到2的63次方-1 | +| 浮点类型 | float | 4 | 负数:-3.402823E+38到-1.401298E-45 正数: 1.401298E-45到 3.402823E+38 | +| | double(默认) | 8 | 负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324 到1.797693E+308 | +| 字符类型 | char | 2 | 0-65535 | +| 布尔 类型 | boolean | 1 | true,false | +| 说明: e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。在java中整数默认是int类型,浮点数默认是double类型。 | | | | + +## 3.5 变量 + +### 3.5.1 变量的定义 + +变量:在程序运行过程中,其值可以发生改变的量。 + +从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化。 + +![3.5.1变量的定义](/3.5.1变量的定义.png) + +变量的定义格式: + +![3.5.1变量的定义格式](/3.5.1变量的定义格式.png) + +> 数据类型 变量名 = 初始化值; // 声明变量并赋值 +> int age = 18; +> System.out.println(age); + +或者 + +> // 先声明,后赋值(使用前赋值即可) 数据类型 变量名; +> 变量名 = 初始化值; +> double money; +> money = 55.5; +> System.out.println(money); + +还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。 + +```java +int a = 10, b = 20; // 定义int类型的变量a和b,中间使用逗号隔开 +System.out.println(a); +System.out.println(b); +int c,d; // 声明int类型的变量c和d,中间使用逗号隔开 +c = 30; +d = 40; +System.out.println(c); +System.out.println(d); +``` + +变量的使用:通过变量名访问即可。 + +### 3.5.2 使用变量时的注意事项 + +在同一对花括号中,变量名不能重复。 + +变量在使用之前,必须初始化(赋值)。 + +定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。 + +定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。 + +### 3.6 标识符 + +标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名。 + +Java中标识符的组成规则: + +由字母、数字、下划线“_”、美元符号“$”组成,第一个字符不能是数字。 + +不能使用java中的关键字作为标识符。 + +标识符对大小写敏感(区分大小写)。 + +Java中标识符的命名约定: + +小驼峰式命名:变量名、方法名 + +首字母小写,从第二个单词开始每个单词的首字母大写。 + +大驼峰式命名:类名 + +每个单词的首字母都大写。 + +另外,标识符的命名最好可以做到见名知意 + +例如:username、studentNumber等。 + +### 3.7 类型转换 + +在Java中,一些数据类型之间是可以相互转换的。分为两种情况:自动类型转换和强制类型转换。 自动类型转换:把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。 + +例如: + +```java + double num = 10; // 将int类型的10直接赋值给double类型 + System.out.println(num); // 输出10.0 +``` + +强制类型转换: + +把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。 + +强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量; + +例如: + +```java +double num1 = 5.5; +int num2 = (int) num1; // 将double类型的num1强制转换为int类型 +System.out.println(num2); // 输出5(小数位直接舍弃) +``` + +![3.7](/3.7.png) + +说明: + +1. char类型的数据转换为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a’对应97 + +```java + int a = 'a'; + System.out.println(a); // 将输出97 +``` + +2. 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。 + +```java +byte b1 = 10; +byte b2 = 20; +byte b3 = b1 + b2; +// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。 +// 修改为: +int num = b1 + b2; +// 或者: +byte b3 = (byte) (b1 + b2); +``` + +3. boolean类型不能与其他基本数据类型相互转换。 + +# 4.运算符 + +## 4.1 算术运算符 + +### 4.1.1 运算符和表达式 + +运算符:对常量或者变量进行操作的符号 + +表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。 + +不同运算符连接的表达式体现的是不同类型的表达式。 + +举例说明: + +```java +int a = 10; +int b = 20; +int c = a + b; +``` + ++:是运算符,并且是算术运算符。 + +a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。 + +### 4.1.2 算术运算符 + +| 符号 | 作用 | 说明 | +| :--: | :--: | :--------------------------: | +| + | 加 | 参看小学一年级 | +| - | 减 | 参看小学一年级 | +| * | 乘 | 参看小学二年级,与“×”相同 | +| / | 除 | 参看小学二年级,与“÷”相同 | +| % | 取余 | 获取的是两个数据做除法的余数 | + +注意: /和%的区别:两个数据做除法,/取结果的商,%取结果的余数。 + +整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。 + +```java +int a = 10; +int b = 3; +System.out.println(a / b); // 输出结果3 +System.out.println(a % b); // 输出结果1 +``` + +### 4.1.3 字符的“+”操作 + +char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值: + +‘a’ – 97 a-z是连续的,所以’b’对应的数值是98,'c’是99,依次递加 + +‘A’ – 65 A-Z是连续的,所以’B’对应的数值是66,'C’是67,依次递加 + +‘0’ – 48 0-9是连续的,所以’1’对应的数值是49,'2’是50,依次递加 + +```java +// 可以通过使用字符与整数做算术运算,得出字符对应的数值是多少 +char ch1 = 'a'; +System.out.println(ch1 + 1); // 输出98,97 + 1 = 98 + +char ch2 = 'A'; +System.out.println(ch2 + 1); // 输出66,65 + 1 = 66 + +char ch3 = '0'; +System.out.println(ch3 + 1); // 输出49,48 + 1 = 49 +``` + +算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。 + +提升规则: + +byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。 + +整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型 + +等级顺序:byte,short,char --> int --> long --> float --> double + +例如: + +```java +byte b1 = 10; +byte b2 = 20; +// byte b3 = b1 + b2; // 该行报错,因为byte类型参与算术运算会自动提示为int,int赋值给byte可能损失精度 +int i3 = b1 + b2; // 应该使用int接收 +byte b3 = (byte) (b1 + b2); // 或者将结果强制转换为byte类型 +// ------------------------------- +int num1 = 10; +double num2 = 20.0; +double num3 = num1 + num2; // 使用double接收,因为num1会自动提升为double类型 +``` + +tips:正是由于上述原因,所以在程序开发中我们很少使用byte或者short类型定义整数。也很少会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。 + +### 4.1.4 字符串的“+”操作 + +当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。 + +```java +System.out.println("itheima"+ 666); // 输出:itheima666 +``` + +在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。 + +```java +System.out.println(1 + 99 + "年黑马"); // 输出:100年黑马 +System.out.println(1 + 2 + "itheima" + 3 + 4); // 输出:3itheima34 +// 可以使用小括号改变运算的优先级 +System.out.println(1 + 2 + "itheima" + (3 + 4)); // 输出:3itheima7 +``` + +## 4.2 赋值运算符(应用) + +赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。 + +| 符号 | 作用 | 说明 | +| :----------------------------------: | :--------: | :-------------------: | +| = | 赋值 | a=10,将10赋值给变量a | +| += | 加后赋值 | a+=b,将a+b的值给a | +| -= | 减后赋值 | a-=b,将a-b的值给a | +| *= | 乘后赋值 | a*=b,将a×b的值给a | +| /= | 除后赋值 | a/=b,将a÷b的商给a | +| %= | 取余后赋值 | a%=b,将a÷b的余数给a | +| 注意: | | | +| 扩展的赋值运算符隐含了强制类型转换。 | | | + +```java +short s = 10; +s = s + 10; // 此行代码报出,因为运算中s提升为int类型,运算结果int赋值给short可能损失精度 +s += 10; // 此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s + 10); +``` + +## 4.3 自增自减运算符 + +| 符号 | 作用 | 说明 | +| :--: | :--: | :---------: | +| ++ | 自增 | 变量的值加1 | +| – | 自减 | 变量的值减1 | + +注意事项: + +++和-- 既可以放在变量的后边,也可以放在变量的前边。 + +单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。 + +参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者–。 + +参与操作的时候,如果放在变量的前边,先拿变量做++或者–,后拿变量参与操作。 + +最常见的用法:单独使用。 + +```java +int i = 10; +i++; // 单独使用 System.out.println("i:" + i); // i:11 +int j = 10; +++j; // 单独使用 System.out.println("j:" + j); // j:11 +int x = 10; +int y = x++; // 赋值运算,++在后边,所以是使用x原来的值赋值给y,x本身自增1 +System.out.println("x:" + x + ", y:" + y); // x:11,y:10 +int m = 10; +int n = ++m; // 赋值运算,++在前边,所以是使用m自增后的值赋值给n,m本身自增1 +System.out.println("m:" + m + ", m:" + m); // m:11,m:11 +``` + +练习: + +```java +int x = 10; +int y = x++ + x++ + x++; +System.out.println(y); // y的值是多少? +/* 解析,三个表达式都是++在后,所以每次使用的都是自增前的值, +但程序自左至右执行,所以第一次自增时,使用的是 10进行计算,但第二次自增时,x的值已经自增到11了, +所以第二次使用的是11,然后再次自增。。。 所以整个式子应该是:int y = 10 + 11 + 12; +输出结果为33。 +*/ +``` + +注意:通过此练习深刻理解自增和自减的规律,但实际开发中强烈建议不要写这样的代码!小心挨打! + +## 4.4 关系运算符 + +关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。 + +| 符号 | 说明 | +| :----------------------------------------------------------: | :-----------------------------------------------------: | +| == | a==b,判断a和b的值是否相等,成立为true,不成立为false | +| != | a!=b,判断a和b的值是否不相等,成立为true,不成立为false | +| > | a>b,判断a是否大于b,成立为true,不成立为false | +| >= | a>=b,判断a是否大于等于b,成立为true,不成立为false | +| < | a b); // false +System.out.println(a >= b); // false +System.out.println(a < b); // true +System.out.println(a <= b); // true +// 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量 boolean flag = a > b; +System.out.println(flag); // 输出false +``` + +## 4.5 逻辑运算符 + +逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。 + +| 符号 | 作用 | 说明 | +| :--: | :------: | :------------------------------------------: | +| & | 逻辑与 | a&b,a和b都是true,结果为true,否则为false | +| \| | 逻辑或 | a\|b,a和b都是false,结果为false,否则为true | +| ^ | 逻辑异或 | a^b,a和b结果不同为true,相同为false | +| ! | 逻辑非 | !a,结果和a的结果正好相反 | + +```java +//定义变量 +int i = 10; +int j = 20; +int k = 30; +//& “与”,并且的关系,只要表达式中有一个值为false,结果即为false +System.out.println((i > j) & (i> k)); //false & false,输出false +System.out.println((i < j) & (i> k)); //true & false,输出false false +System.out.println((i > j) & (i< k)); //false & true,输出 +System.out.println((i < j) & (i< k)); //true & true,输出true +System.out.println("--------"); + +//| “或”,或者的关系,只要表达式中有一个值为true,结果即为true +System.out.println((i > j) | (i> k)); //false | false,输出false +System.out.println((i < j) | (i> k)); //true | false,输出true +System.out.println((i > j) | (i< k)); //false | true,输出true +System.out.println((i < j) | (i< k)); //true | true,输出true +System.out.println("--------"); + + +//^ “异或”,相同为false,不同为true +System.out.println((i > j) ^ (i > k)); //false ^ false,输出false +System.out.println((i < j) ^ (i > k)); //true ^ false,输出true +System.out.println((i > j) ^ (i < k)); //false ^ true,输出true +System.out.println((i < j) ^ (i < k)); //true ^ true,输出false +System.out.println("--------"); +//! “非”,取反 +System.out.println((i > j)); //false +System.out.println(!(i > j)); //!false,输出true +``` + +短路逻辑运算符 + +| 符号 | 作用 | 说明 | +| :----------------------------------------------------------: | :----: | :-------------------------: | +| && | 短路与 | 作用和&相同,但是有短路效果 | +| \|\| | 短路或 | 作用和 | +| 在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都 计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式 将不再参与运算。 | | | + +- 逻辑与&,无论左边真假,右边都要执行。 + +- 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。 + +- 逻辑或|,无论左边真假,右边都要执行。 + +- 短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。 + +```java +int x = 3; +int y = 4; +System.out.println((x++ > 4) & (y++ > 5)); // 两个表达都会运算 +System.out.println(x); // 4 +System.out.println(y); // 5 +System.out.println((x++ > 4) && (y++ > 5)); // 左边已经可以确定结果为false,右边不参与运算 System.out.println(x); // 4 +System.out.println(y); // 4 +``` + +## 4.6 三元运算符 + +三元运算符语法格式: + +> 关系表达式 ? 表达式1 : 表达式2; + +解释:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。 + +举例: + +```java +int a = 10; +int b = 20; +int c = a > b ? a : b; // 判断 a>b 是否为真,如果为真取a的值,如果为假,取b的值 +``` + +三元运算符案例: + +1、需求:动物园里有两只老虎,已知两只老虎的体重分别为180kg、200kg,请用程序实现判断两只老虎的体重是否相同。 + +```java +public class OperatorTest01 { + public static void main(String[] args) { + //1:定义两个变量用于保存老虎的体重,单位为kg,这里仅仅体现数值即可。 + int weight1 = 180; + int weight2 = 200; + + //2:用三元运算符实现老虎体重的判断,体重相同,返回true,否则,返回false。 + boolean b = weight1 == weight2 ? true : false; + + //3:输出结果 + System.out.println("b:" + b); + } +} +``` + +2、需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。 + +```java +public class OperatorTest02 { + public static void main(String[] args) { + //1:定义三个变量用于保存和尚的身高,单位为cm,这里仅仅体现数值即可。 + int height1 = 150; + int height2 = 210; + int height3 = 165; + + //2:用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。 + int tempHeight = height1 > height2 ? height1 : height2; + + //3:用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。 + int maxHeight = tempHeight > height3 ? tempHeight : height3; + + //4:输出结果 + System.out.println("maxHeight:" + maxHeight); + } +} +``` + +# 5. 数据输入 + +我们可以通过 Scanner 类来获取用户的输入。使用步骤如下: + +1、导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。 + +> import java.util.Scanner; + +2、创建Scanner对象。 + +> Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变 + +3、接收数据 + +> int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回。 + +示例: + +```java +import java.util.Scanner; + +public class ScannerDemo { + public static void main(String[] args) { //创建对象 + Scanner sc = new Scanner(System.in); //接收数据 + int x = sc.nextInt(); + //输出数据 + System.out.println("x:" + x); + } +} +``` + +改写三个和尚案例,数据使用键盘录入。 + +```java +import java.util.Scanner; + +public class ScannerTest { + public static void main(String[] args) { + //身高未知,采用键盘录入实现。首先导包,然后创建对象。 + Scanner sc = new Scanner(System.in); + + //键盘录入三个身高分别赋值给三个变量。 + System.out.println("请输入第一个和尚的身高:"); + int height1 = sc.nextInt(); + + System.out.println("请输入第二个和尚的身高:"); + int height2 = sc.nextInt(); + + System.out.println("请输入第三个和尚的身高:"); + int height3 = sc.nextInt(); + + //用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。 + int tempHeight = height1 > height2 ? height1 : height2; + + //用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。 + int maxHeight = tempHeight > height3 ? tempHeight : height3; + + //输出结果。 + System.out.println("这三个和尚中身高最高的是:" + maxHeight +"cm"); + } +} +``` + +# 6. 流程控制语句 + +在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 + +## 6.1 流程控制语句分类 + +顺序结构 + +分支结构(if, switch) + +循环结构(for, while, do…while) + +## 6.2 顺序结构 + +顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 + +顺序结构执行流程图: + +![6.2](/6.2.png) + +## 6.3 分支结构之if语句 + +### 6.3.1 if语句格式1 + +> 格式: +> +> if (关系表达式) { +> +> 语句体; +> +> } + +执行流程: + +1首先计算关系表达式的值 + +2如果关系表达式的值为true就执行语句体 + +3如果关系表达式的值为false就不执行语句体 + +4继续执行后面的语句内容 + +![6.3.1 if 语句格式1](/6.3.1 if 语句格式1.png) + +示例: + +```java +public class IfDemo { + public static void main(String[] args) { + System.out.println("开始"); + + //定义两个变量 + int a = 10; + int b = 20; + + //需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b + if(a == b) { + System.out.println("a等于b"); + } + + //需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c + int c = 10; + if(a == c) { + System.out.println("a等于c"); + } + + System.out.println("结束"); + } +} +``` + +### 6.3.2 if语句格式2 + +> 格式: +> +> if (关系表达式) { +> +> 语句体1; +> +> } else { +> +> 语句体2; +> +> } + +执行流程: + +1. 首先计算关系表达式的值 + +2. 如果关系表达式的值为true就执行语句体1 + +3. 如果关系表达式的值为false就执行语句体2 + +4. 继续执行后面的语句内容 + +![6.3.2 if 语句格式2](/6.3.2 if 语句格式2.png) + +示例: + +```java +public class IfDemo02 { + public static void main(String[] args) { + System.out.println("开始"); + + //定义两个变量 + int a = 10; + int b = 20; + b = 5; + + //需求:判断a是否大于b,如果是,在控制台输出:a的值大于b, + //如果不是,在控制台输出:a的值不大于b + if(a > b) { + System.out.println("a的值大于b"); + } else { + System.out.println("a的值不大于b"); + } + + System.out.println("结束"); + } +} +``` + +if语句案例:奇偶数 + +需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。 + +分析: + +为了体现任意给出一个整数,采用键盘录入一个数据 + +判断整数是偶数还是奇数要分两种情况进行判断,使用if…else结构 + +判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0 + +根据判定情况,在控制台输出对应的内容 + +```java + +import java.util.Scanner; + +public class IfTest01 { + public static void main(String[] args) { + //为了体现任意给出一个整数,采用键盘录入一个数据。(导包,创建对象,接收数据) + Scanner sc = new Scanner(System.in); + + System.out.println("请输入一个整数:"); + int number = sc.nextInt(); + + //判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构 + //判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0 + //根据判定情况,在控制台输出对应的内容 + if(number%2 == 0) { + System.out.println(number + "是偶数"); + } else { + System.out.println(number + "是奇数"); + } + + } +} +``` + +### 6.3.3 if语句格式3 + +> 格式: +> +> if (关系表达式1) { +> +> 语句体1; +> +> } else if (关系表达式2) { +> +> 语句体2; +> +> } +> +> … +> +> else { +> +> 语句体n+1; +> +> } + +执行流程: + +1. 首先计算关系表达式1的值 + +2. 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值 + +3. 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值 + +4. … + +5. 如果没有任何关系表达式为true,就执行语句体n+1。 + +![6.3.3 if 语句格式3](/6.3.3 if 语句格式3.png) + +示例: + +键盘录入一个星期数(1,2,…7),输出对应的星期一,星期二,…星期日 + +```java +import java.util.Scanner; + +public class IfDemo03 { + public static void main(String[] args) { + System.out.println("开始"); + + //需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日 + Scanner sc = new Scanner(System.in); + + System.out.println("请输入一个星期数(1-7):"); + int week = sc.nextInt(); + + if(week == 1) { + System.out.println("星期一"); + } else if(week == 2) { + System.out.println("星期二"); + } else if(week == 3) { + System.out.println("星期三"); + } else if(week == 4) { + System.out.println("星期四"); + } else if(week == 5) { + System.out.println("星期五"); + } else if(week == 6) { + System.out.println("星期六"); + } else { + System.out.println("星期日"); + } + + System.out.println("结束"); + } +} +``` + +if语句格式3案例: + +需求:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。 + +分析: + +小明的考试成绩未知,可以使用键盘录入的方式获取值 + +由于奖励种类较多,属于多种判断,采用if…else…if格式实现 + +为每种判断设置对应的条件 + +为每种判断设置对应的奖励 + +```java +import java.util.Scanner; + +public class IfTest02 { + public static void main(String[] args) { + //小明的考试成绩未知,可以使用键盘录入的方式获取值 + Scanner sc = new Scanner(System.in); + + System.out.println("请输入一个分数:"); + int score = sc.nextInt(); + + //由于奖励种类较多,属于多种判断,采用if...else...if格式实现 + //为每种判断设置对应的条件 + //为每种判断设置对应的奖励 + + //数据测试:正确数据,边界数据,错误数据 + if(score>100 || score<0) { + System.out.println("你输入的分数有误"); + } else if(score>=95 && score<=100) { + System.out.println("山地自行车一辆"); + } else if(score>=90 && score<=94) { + System.out.println("游乐场玩一次"); + } else if(score>=80 && score<=89) { + System.out.println("变形金刚玩具一个"); + } else { + System.out.println("胖揍一顿"); + } + } +} +``` + +# 7. switch语句 + +## 7.1 switch语句结构 + +格式 + +```java +switch (表达式) { + case 1: + 语句体1; + break; + case 2: + 语句体2; + break; + ... + default: + 语句体n+1; + break; +} +``` + +格式说明: + +- 表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。 + +- case:后面跟的是要和表达式进行比较的值。 + +- break:表示中断,结束的意思,用来结束switch语句。 + +- default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。 + +执行流程: + +- 首先计算出表达式的值 + +- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。 + +- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。 + +![7.1](/7.1.png) + +## 7.2 switch语句练习-春夏秋冬(应用) + +- 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。 + +- 运行结果: + +```java +春:3、4、5 +夏:6、7、8 +秋:9、10、11 +冬:1、2、12 +``` + +- 示例代码: + +```java +import java.util.Scanner; + +public class SwitchTest { + public static void main(String[] args) { + //键盘录入月份数据,使用变量接收 + Scanner sc = new Scanner(System.in); + + System.out.println("请输入一个月份:"); + int month = sc.nextInt(); + + //多情况判断,这里采用switch语句实现 + //在每种情况中,完成输出对应的季节 + /* + switch(month) { + case 1: + System.out.println("冬季"); + break; + case 2: + System.out.println("冬季"); + //break; + case 3: + System.out.println("春季"); + break; + case 4: + System.out.println("春季"); + break; + case 5: + System.out.println("春季"); + break; + case 6: + System.out.println("夏季"); + break; + case 7: + System.out.println("夏季"); + break; + case 8: + System.out.println("夏季"); + break; + case 9: + System.out.println("秋季"); + break; + case 10: + System.out.println("秋季"); + break; + case 11: + System.out.println("秋季"); + break; + case 12: + System.out.println("冬季"); + break; + default: + System.out.println("你输入的月份有误"); + //break; + } + */ + + //case穿透 + switch(month) { + case 1: + case 2: + case 12: + System.out.println("冬季"); + break; + case 3: + case 4: + case 5: + System.out.println("春季"); + break; + case 6: + case 7: + case 8: + System.out.println("夏季"); + break; + case 9: + case 10: + case 11: + System.out.println("秋季"); + break; + default: + System.out.println("你输入的月份有误"); + } + } +} +``` + +- 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。 + +# 8. for循环 + +## 8.1 for循环结构(掌握) + +- 循环: + + 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。 + +- for循环格式: + +```java +for (初始化语句;条件判断语句;条件控制语句) { + 循环体语句; +} +``` + +格式解释: + +- 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样 + +- 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去 + +- 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情 + +- 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去 + +执行流程: + +①执行初始化语句 + +②执行条件判断语句,看其结果是true还是false + +如果是false,循环结束 + +如果是true,继续执行 + +③执行循环体语句 + +④执行条件控制语句 + +⑤回到②继续 + +```java +public class ForDemo { + public static void main(String[] args) { + //需求:在控制台输出5次"HelloWorld" + System.out.println("HelloWorld"); + System.out.println("HelloWorld"); + System.out.println("HelloWorld"); + System.out.println("HelloWorld"); + System.out.println("HelloWorld"); + System.out.println("--------"); + + //用循环改进 + for(int i=1; i<=5; i++) { + System.out.println("HelloWorld"); + } + + } +} +``` + +## 8.2 for循环练习-输出数据(应用) + +- 需求:在控制台输出1-5和5-1的数据 + +- 示例代码: + +```java +public class ForTest01 { + public static void main(String[] args) { + //需求:输出数据1-5 + for(int i=1; i<=5; i++) { + System.out.println(i); + } + System.out.println("--------"); + + //需求:输出数据5-1 + for(int i=5; i>=1; i--) { + System.out.println(i); + } + + } +} +``` + +## 8.3 for循环练习-求和 + +- 需求:求1-5之间的数据和,并把求和结果在控制台输出 + +- 示例代码: + +```java +public class ForTest02 { + public static void main(String[] args) { + //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0 + int sum = 0; + + //从1开始到5结束的数据,使用循环结构完成 + for(int i=1; i<=5; i++) { + //将反复进行的事情写入循环结构内部,此处反复进行的事情是将数据 i 加到用于保存最终求和的变量 sum 中 + sum += i; + /* + sum += i; sum = sum + i; + 第一次:sum = sum + i = 0 + 1 = 1; + 第二次:sum = sum + i = 1 + 2 = 3; + 第三次:sum = sum + i = 3 + 3 = 6; + 第四次:sum = sum + i = 6 + 4 = 10; + 第五次:sum = sum + i = 10 + 5 = 15; + */ + } + + //当循环执行完毕时,将最终数据打印出来 + System.out.println("1-5之间的数据和是:" + sum); + } +} +``` + +- 本题要点: +- 今后遇到的需求中,如果带有求和二字,请立即联想到求和变量 + +- 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的 + +## 8.4 for循环练习-求偶数和 + +- 需求:求1-100之间的偶数和,并把求和结果在控制台输出 } + +- 示例代码: + +```java +public class ForTest03 { + public static void main(String[] args) { + //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0 + int sum = 0; + + //对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同 + for(int i=1; i<=100; i++) { + //对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数 + if(i%2 == 0) { + sum += i; + } + } + + //当循环执行完毕时,将最终数据打印出来 + System.out.println("1-100之间的偶数和是:" + sum); + } +} +``` + +## 8.5 for循环练习-水仙花 + +- 需求:在控制台输出所有的“水仙花数” + +- 解释:什么是水仙花数? + +水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数 + +例如153 3*3*3 + 5*5*5 + 1*1*1 = 153 + +- 思路: + +1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取 + +2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数 + +- 示例代码 + +```java +public class ForTest04 { + public static void main(String[] args) { + //输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束 + /* + for(int i=100; i<=999; i++) { + + } + */ + for(int i=100; i<1000; i++) { + //在计算之前获取三位数中每个位上的值 + int ge = i%10; + int shi = i/10%10; + int bai = i/10/10%10; + + //判定条件是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等 + if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) { + //输出满足条件的数字就是水仙花数 + System.out.println(i); + } + } + } +} +``` + +## 8.6 for循环练习-统计水仙花数个数 + +- 需求:统计“水仙花数”一共有多少个,并在控制台输出个数 + +- 示例代码: + +```java +public class ForTest05 { + public static void main(String[] args) { + //定义变量count,用于保存“水仙花数”的数量,初始值为0 + int count = 0; + + //输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束 + for(int i=100; i<1000; i++) { + //在计算之前获取三位数中每个位上的值 + int ge = i%10; + int shi = i/10%10; + int bai = i/10/10%10; + + //在判定水仙花数的过程中,满足条件不再输出,更改为修改count的值,使count+1 + if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) { + count++; + } + } + + //打印输出最终结果 + System.out.println("水仙花共有:" + count + "个"); + } +} +``` + +- 本题要点: +- 今后如果需求带有统计xxx,请先想到计数器变量 + +- 计数器变量定义的位置,必须在循环外部 + +# 9. while循环 + +## 9.1 while结构 + +- while循环完整格式: + +```java +初始化语句; +while (条件判断语句) { + 循环体语句; + 条件控制语句; +} +``` + +- while循环执行流程: + + ①执行初始化语句 + + ②执行条件判断语句,看其结果是true还是false + + 如果是false,循环结束 + + 如果是true,继续执行 + + ③执行循环体语句 + + ④执行条件控制语句 + + ⑤回到②继续 + +- 示例代码: + +```java +public class WhileDemo { + public static void main(String[] args) { + //需求:在控制台输出5次"HelloWorld" + //for循环实现 + for(int i=1; i<=5; i++) { + System.out.println("HelloWorld"); + } + System.out.println("--------"); + + //while循环实现 + int j = 1; + while(j<=5) { + System.out.println("HelloWorld"); + j++; + } + + } +} +``` + +## 9.2 while循环练习-珠穆朗玛峰 + +- 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度? + +- 示例代码: + +```java +public class WhileTest { + public static void main(String[] args) { + //定义一个计数器,初始值为0 + int count = 0; + + //定义纸张厚度 + double paper = 0.1; + + //定义珠穆朗玛峰的高度 + int zf = 8844430; + + //因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环 + //折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度 + while(paper <= zf) { + //循环的执行过程中每次纸张折叠,纸张的厚度要加倍 + paper *= 2; + + //在循环中执行累加,对应折叠了多少次 + count++; + } + + //打印计数器的值 + System.out.println("需要折叠:" + count + "次"); + } +} +``` + +# 10. 循环细节 + +## 10.1 do…while循环结构 + +- 完整格式: + +```java +初始化语句; +do { + 循环体语句; + 条件控制语句; +}while(条件判断语句); +``` + +- 执行流程: + + ① 执行初始化语句 + + ② 执行循环体语句 + + ③ 执行条件控制语句 + + ④ 执行条件判断语句,看其结果是true还是false + + 如果是false,循环结束 + + 如果是true,继续执行 + + ⑤ 回到②继续 + +- 示例代码: + +```java +public class DoWhileDemo { + public static void main(String[] args) { + //需求:在控制台输出5次"HelloWorld" + //for循环实现 + for(int i=1; i<=5; i++) { + System.out.println("HelloWorld"); + } + System.out.println("--------"); + + //do...while循环实现 + int j = 1; + do { + System.out.println("HelloWorld"); + j++; + }while(j<=5); + + } +} +``` + +## 10.2 三种循环的区别 + +- 三种循环的区别 + +1. for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行) + +2. do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断) + +- for循环和while的区别 + +1. 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了 + +2. 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用 + +- 死循环(无限循环)的三种格式 + +1. for(;; ){} + +2. while(true){} + +3. do {} while(true); + +## 10.3 跳转控制语句 + +- 跳转控制语句(break) + - 跳出循环,结束循环 + +- 跳转控制语句(continue) + - 跳过本次循环,继续下次循环 + +- 注意: continue只能在循环中进行使用! + +## 10.4 循环嵌套 + +- 循环嵌套概述:在循环中,继续定义循环 + +- 示例代码: + +```java +public class ForForDemo { + public static void main(String[] args) { + for(int hour=0; hour<24; hour++) { + for(int minute=0; minute<60; minute++) { + System.out.println(hour + "时" + minute + "分"); + } + System.out.println("--------"); + } + } +} +``` + +- 理解: +- 请反复理解这句话(整个内循环,就是外循环的一个循环体,内部循环体没有执行完毕,外循环是不会继续向下执行的) +- 结论: +- 外循环执行一次,内循环执行一圈。 + +# 11. Random + +## 11.1 Random产生随机数 + +- 概述: + - Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能 + - API后续课程详细讲解,现在可以简单理解为Java已经写好的代码 + +使用步骤: + +1. 导入包 + + import java.util.Random; + +1. 创建对象 + + Random r = new Random(); + +2. 产生随机数 + + int num = r.nextInt(10); + + 解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19 + +- 示例代码: + +```java +import java.util.Random; + +public class RandomDemo { + public static void main(String[] args) { + //创建对象 + Random r = new Random(); + + //用循环获取10个随机数 + for(int i=0; i<10; i++) { + //获取随机数 + int number = r.nextInt(10); + System.out.println("number:" + number); + } + + //需求:获取一个1-100之间的随机数 + int x = r.nextInt(100) + 1; + System.out.println(x); + } +} +``` + +## 11.2 Random练习-猜数字 + +- 需求: + +程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少? + +当猜错的时候根据不同情况给出相应的提示 + +A. 如果猜的数字比真实数字大,提示你猜的数据大了 + +B. 如果猜的数字比真实数字小,提示你猜的数据小了 + +C. 如果猜的数字与真实数字相等,提示恭喜你猜中了 + +- 示例代码: + +```java +import java.util.Random; +import java.util.Scanner; + +public class RandomTest { + public static void main(String[] args) { + //要完成猜数字的游戏,首先需要有一个要猜的数字,使用随机数生成该数字,范围1到100 + Random r = new Random(); + int number = r.nextInt(100) + 1; + + while(true) { + //使用程序实现猜数字,每次均要输入猜测的数字值,需要使用键盘录入实现 + Scanner sc = new Scanner(System.in); + + System.out.println("请输入你要猜的数字:"); + int guessNumber = sc.nextInt(); + + //比较输入的数字和系统产生的数据,需要使用分支语句。这里使用if..else..if..格式,根据不同情况进行猜测结果显示 + if(guessNumber > number) { + System.out.println("你猜的数字" + guessNumber + "大了"); + } else if(guessNumber < number) { + System.out.println("你猜的数字" + guessNumber + "小了"); + } else { + System.out.println("恭喜你猜中了"); + break; + } + } + } +} +``` + +# 12. IDEA开发工具 + +参见:IDEA工具安装详解.pdf +[IDEA工具安装详解.pdf](https://download.csdn.net/download/qq_39997939/85072242) + +# 13. 数组 + +### 13.2.1 第一种 + + 数据类型[] 数组名 + + 示例: + +```java +int[] arr; +double[] arr; +char[] arr; +``` + +定义了一个int类型的数组,数组名是arr + +### 13.2.2 第二种(不推荐) + + 数据类型 数组名[] + + 示例: + +```java +int arr[]; +double arr[]; +char arr[]; +``` + +定义了一个int类型的变量,变量名是arr数组 + +## 13.3 数组动态初始化 + +数组动态初始化就是只给定数组的长度,由系统给出默认初始化值 + +### 13.3.2 动态初始化格式 + +```java +数据类型[] 数组名 = new 数据类型[数组长度]; +``` + +```java +int[] arr = new int[3]; +``` + +### 13.3.3动态初始化格式详解 + +- 等号左边: + - int:数组的数据类型 + - []:代表这是一个数组 + - arr:代表数组的名称 + +- 等号右边: + - new:为数组开辟内存空间 + - int:数组的数据类型 + - []:代表这是一个数组 + - 3:代表数组的长度 + +## 13.4 数组元素访问 + +### 13.4.1 什么是索引 + + 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。 + + 这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。 + +### 13.4.2 访问数组元素格式 + +```java +数组名[索引]; +``` + +### 13.4.3 示例代码 + +```java +public class ArrayDemo { + public static void main(String[] args) { + int[] arr = new int[3]; + + //输出数组名 + System.out.println(arr); //[I@880ec60 + + //输出数组中的元素 + System.out.println(arr[0]); + System.out.println(arr[1]); + System.out.println(arr[2]); + } +} +``` + +## 13.5 内存分配 + +### 13.5.1 内存概述 + +内存是计算机中的重要原件,临时存储区域,作用是运行程序。 + + 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。 + + 必须放进内存中才能运行,运行完毕后会清空内存。 + + Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。 + +### 13.5.2 java中的内存分配 + +- 目前我们只需要记住两个内存,分别是:栈内存和堆内存 + +| 区域名称 | 作用 | +| :--------: | :--------------------------------------------------------: | +| 寄存器 | 给CPU使用,和我们开发无关。 | +| 本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 | +| 方法区 | 存储可以运行的class文件。 | +| 堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 | +| 方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 | + +## 13.6 单个数组的内存图 + +![](/13.6.png) + +## 13.7 多个数组的内存图 + +![](/13.7.png) + +## 13.8 多个数组指向相同内存图 + +![](/13.8.png) + +## 13.9 数组静态初始化 + +### 13.9.1 什么是静态初始化 + + 在创建数组时,直接将元素确定 + +### 13.9.2 静态初始化格式 + +- 完整版格式 + +```java +数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}; +``` + +- 简化版格式 + +```java +数据类型[] 数组名 = {元素1,元素2,...}; +``` + +### 13.9.3 示例代码 + +```java +public class ArrayDemo { + public static void main(String[] args) { + //定义数组 + int[] arr = {1, 2, 3}; + + //输出数组名 + System.out.println(arr); + + //输出数组中的元素 + System.out.println(arr[0]); + System.out.println(arr[1]); + System.out.println(arr[2]); + } +} +``` + +## 13.10 数组操作的两个常见小问题 + +### 13.10.1 索引越界异常 + +- 出现原因 + +```java +public class ArrayDemo { + public static void main(String[] args) { + int[] arr = new int[3]; + System.out.println(arr[3]); + } +} +``` + +数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。 + +程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。 + +- 解决方案 + + +将错误的索引修改为正确的索引范围即可! + + +### 13.10.2 空指针异常 + +- 出现原因 + +```java +public class ArrayDemo { + public static void main(String[] args) { + int[] arr = new int[3]; + //把null赋值给数组 + arr = null; + System.out.println(arr[0]); + } +} +``` + +arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。 + +- 解决方案 + + +给数组一个真正的堆内存空间引用即可! + + +## 13.11 数组遍历 + +- 数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。 + +```java +public class ArrayTest01 { + public static void main(String[] args) { + int[] arr = { 1, 2, 3, 4, 5 }; + System.out.println(arr[0]); + System.out.println(arr[1]); + System.out.println(arr[2]); + System.out.println(arr[3]); + System.out.println(arr[4]); + } +} +``` + +以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。 + +```java +public class ArrayTest01 { + public static void main(String[] args) { + //定义数组 + int[] arr = {11, 22, 33, 44, 55}; + + //使用通用的遍历格式 + for(int x=0; x max) { + max = arr[x]; + } + } + + //循环结束后打印变量的值 + System.out.println("max:" + max); + + } +} +``` + +## 13.13 作业:评委打分 + +### 13.13.1 案例需求 + +闽大举行选美比赛,男生参赛,10个女生当评委,定义一个数组,存放评分,用随机数模拟打分的过程,用程序算出选手的最后得分【去掉一个最高分,再去掉一个最低分,用剩下的分数求平均值】。 + +### 13.13.2 代码实现 + +```java +/* + 思路: + 1:定义一个数组,用动态初始化完成数组元素的初始化,长度为10 + 2:键盘录入评委分数 + 3:由于是10个评委打分,所以,接收评委分数的操作,用循环改进 + 4:定义方法实现获取数组中的最高分(数组最大值),调用方法 + 5:定义方法实现获取数组中的最低分(数组最小值) ,调用方法 + 6:定义方法实现获取数组中的所有元素的和(数组元素求和) ,调用方法 + 7:按照计算规则进行计算得到平均分 + 8:输出平均分 + */ +public class Test10 { + public static void main(String[] args) { + //定义一个数组,用动态初始化完成数组元素的初始化,长度为10 + int[] arr = new int[10]; + + //键盘录入评委分数 + Scanner sc = new Scanner(System.in); + + //由于是10个评委打分,所以,接收评委分数的操作,用循环改进 + for(int x=0; x max) { + max = arr[x]; + } + } + + return max; + } + + //遍历数组 + public static void printArray(int[] arr) { + System.out.print("["); + + for (int x = 0; x < arr.length; x++) { + if (x == arr.length - 1) { + System.out.print(arr[x]); + } else { + System.out.print(arr[x] + ", "); + } + } + + System.out.println("]"); + } +} +``` +