java基础

  • 1、进制转换
  • 2、字节和位
  • 3、数据类型分类
  • 4、标识符
  • 5、整数型
  • 6、 字符类型和字符集
  • 7、基础数据类型变量定义的注意事项
  • 第二天
  • 1、类型转换
  • 2、常量
  • 3、两种常见的输出语句
  • 4、运算符
  • 1.算术运算符
  • 2.+号的使用
  • 3.自增自减运算符
  • 4.赋值运算符
  • 5.关系运算符
  • 6.逻辑运算符
  • 7.短路逻辑运算符
  • 8.三元运算符
  • 9.位运算符
  • 10.移位运算符<<
  • 5、原码反码补码
  • 第三天
  • 1、流程语句与控制语句
  • 1.流程语句
  • 2.控制语句
  • 1、dowhile语句的格式:
  • 2、for语句的基本格式:
  • 3、if语句格式
  • 4、switch语句的基本格式:
  • 5、while循环的格式:
  • 2、运算符优先级的注意事项


1、进制转换

**十进制数据转成二进制数据:**使用除以2获取余数的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgKvTO5v-1654785551570)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654329404564.png)]

**二进制数据转成十进制数据:**使用8421编码的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hJjmPwvE-1654785551572)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654329520397.png)]

2、字节和位

**字节(Byte):**是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八

位, 也表示一些计算机编程语言中的数据类型和语言字符。

**位(bit):**是数据存储的最小单位。也就是二进制。二进制数系统中,每个0或1就是一个位,叫

做bit(比特),其中8 bit 就称为一个字节(Byte)。

转换关系:

8 bit = 1 Byte

1024 Byte = 1 KB

1024 KB = 1 MB

1024 MB = 1 GB

1024 GB = 1 TB

常用cmd命令

命令

操作符号

盘符切换命令

盘符名:

查看当前文件夹内容

dir

进入文件夹命令

cd 文件夹名

退出文件夹命令

cd …

退出到磁盘根目录

cd \

清屏

cls

退出

exit

3、数据类型分类

基本数据类型:包括 整数 、 浮点 、 字符 、 布尔 。

引用数据类型:包括 类 、 数组 、 接口 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SZIM94We-1654785551574)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654330036426.png)]

4、标识符

标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是 标识符。

命名规则: 硬性规定

标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 等。

标识符不能以数字开头。

标识符不能是关键字。

命名规范: 软性要求

包名规范:

多个英文单词:开头为公司域名的倒序,每个单词之间用 . 进行连接,例如:

com.atguigu.demo01

类名规范:

一个英文单词:单词首字母大写,例如:Dog

多个英文单词:每个单词首字母大写(大驼峰式),例如:HelloWorld

方法名规范:

一个英文单词:单词字母全部小写,例如:main

多个英文单词:第一个单词首字母小写,第二个单词以后(包含)每个单词首字母大写

(小驼峰式);例如:getMax,getSum,getName

变量名规范:

一个英文单词:单词字母全部小写,例如:result

多个英文单词:第一个单词首字母小写,第二个单词以后(包含)每个单词首字母大写

(小驼峰式),例如:maxNum

自定义常量名:

一个英文单词:单词字母全部大写,例如:PI

多个英文单词:单词字母全部大写,每个单词之间用下划线 _ 进行连接,例如:

DEFAULT_CAPACITY

5、整数型

int是最常用的整数类型,因此在通常请下,直接给出一个整数值默认就是int类型。除此之外,有

如下三种情形必须指出。

1)如果直接将一个较小的整数值(在byte或short类型的取值范围内)赋给一个byte或者short类 型的变量,JVM会自动把这个整数值转换成byte或者short类型来处理。

2)如果使用一个巨大的整数值(超出了int类型的取值范围,且在long的取值范围内)时,JVM不会自动把这个整数值当成long类型处理。如果希望JVM把一个整数值当成long类型来处理,应

在这个整数值后增加1或者L作为后缀。通常推荐使用L,因为英文字母l很容易跟数字1搞混。

3)如果把一个较小的整数值(在int类型的取值范围以内)直接赋给一个long类型的变量,这并不是因为JVM会把这个较小的整数值当成long类型来处理,JVM依然把这个整数值当成int类型来处理,只是因为int类型的值会自动类型转换到long类型。(类型转换后面讲解)

Java中整数值有4种表示方式:

十进制

二进制,Java7.0种新增的特性,以0b或0B开头。

八进制,以0开头

十六进制,以0x或者0X开头,其中1015分别以af(此处的a~f不区分大小写)来表示。

6、 字符类型和字符集

字符集:在计算机的内部都是二进制的0、1数据,为了让计算机可以直接识别人类文字,将人类的

文字和一个十进制数进行对应起来组成一张表格。

字符集是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集

(Character set)是多个字符的集合,常见字符 集名称:ASCII字符集、GB2312字符集、GBK字符集、 GB18030字符集、Unicode字符集等。计算 机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII

(American Standard Code for Information Interchange 美国标准信息交换码)。

Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编

码方案等。Java语言 内部使用16位的Unicode字符集作为编码方式。

7、基础数据类型变量定义的注意事项
  • 初始化值必须在变量的取值范围内,如果超出,编译报错;
  • 定义初始化long类型变量,初始化值后面需要添加字母L或者l,推荐使用L;
  • 定义初始化float类型变量,初始化值后面需要添加字母F或者f;
  • 在方法中定义的变量,在使用前必须进行初始化;
  • 在同一作用域内定义的变量不可以同名;
    【作用域】:就是变量直接所属的那对大括号;
  • 变量的使用不能超出所属的作用域范围,否则编译报错;
  • 在定义初始化的变量时,可以先定义后初始化,推荐使用直接定义初始化方式;
  • 在定义初始化同一种数据类型多个变量时,可以通过一个数据类型在一行上直接定义多个变量,中 间用 逗号“,” 间隔

第二天

1、类型转换

类型转换
含义:数据类型之间的转换
分类:
基本类型间的转换
引用类型间的转换(暂不涉及)
基本类型和包装类型间的转换(暂不涉及)
基本类型和字符串类型间的转换(暂不涉及)

基本类型转换
含义:
将基本类型的数据进行类型转换
分类:
隐式转换(自动转换)
显式转换(强制转换)
格式:
数据类型A 变量名 = (数据类型A)数据类型B的数据值;
注意:
基本类型转换的格式适用于自动转换,也适用于强制转换,在自动转换时可以省略不写

自动转换(隐式转换)
含义:
将取值范围较小的数据类型转换成取值范围较大的数据类型
格式:
取值范围较大的数据类型 变量名 = (取值范围较大的数据类型)取值范围较小的数据类型的数据值
注意:
1.在自动转换时,可以将类型转换的格式省略不写
2.boolean不可以进行基本类型转换

根据基本类型取值范围大小关系总结如下:
		byte < short < int < long < float < double
				char < int < long < float < double

面试题:
	在内存中每创建一个long类型变量,占8个字节,每创建一个float类型变量,占4个字节,为什么long的取值范围要比float的取值范围小?
		1.基本类型转换只和取值范围有关,和占用字节数无关
		2.long的取值范围中最大的整数是2^63-1,这个数小于2^63
		float的取值范围中最大的整数大于3.4*10^38
			3.4*10^38 > 2*10^38 > 2*8^38 = 2*(2^3)^38 = 2*2^114= 2^115
		综上所述:long的取值范围比float的取值范围小

强制转换(显式转换)
含义:
将取值范围较大的数据类型转换为取值范围较小的数据类型
格式:
取值范围较小的数据类型 变量名 = (取值范围较小的数据类型)取值范围较大数据类型的数据值;
注意:
尽量避免强制转换,因为可能会发生精度的损失和数据的溢出

基本类型转换的注意事项:
1.基本类型转换的格式适用于自动转换,也适用于强制转换,在自动转换时,格式可以省略不写;
2.基本类型转换是七种数值类型间的转换,与boolean类型无关
3.尽量避免强制转换,因为可能会发生精度的损失和数据的溢出
4.byte,short,char这三种数据类型只要参与数学运算,先将数据越级提升成int类型,再参与运算操作;如果没有参与数学运算,依然遵循取值范围的特点转换

2、常量

常量:
含义:在程序中其值不可以发生改变的量
分类:
字面值常量
自定义常量(暂不涉及,讲解final关键字时讲解)

字面值常量:
	含义:单独的一个值,不具备任何意义,需要结合其它语句进行使用
	分类:
		整数字面值常量
		浮点字面值常量
		字符字面值常量
		布尔字面值常量
		字符串字面值常量
		空字面值常量

常量的注意事项:
1.给byte,short,char类型变量进行赋值操作时,如果右边的初始化值是字面值常量,且还在该数据类型的取值范围内,JVM的编译器自动在编译时期将其优化为byte类型数据,我们将这一优化称之为"常量优化机制"

2.给变量进行赋值操作时,如果右边的初始化值是一个数学运算式子,且运算的符号两边都是字面值常量和运算后的结果还在该数据类型的取值范围内,JVM的编译器会将这一运算过程由运行时期提前至编译时期,在生成.class文件已运算完毕,我们将这一优化称之为"常量优化机制"

3、两种常见的输出语句

换行输出语句:
格式:System.out.println(输出内容);
特点:在控制台打印内容后,进行"回车换行"处理
直接输出语句:
格式:System.out.print(输出内容);
特点:在控制台打印内容后,不做任何处理
注意事项:
换行输出语句如果里面没有任何内容,直接进行回车换行处理
直接输出语句如果里面没有任何内容,编译报错

回车:将光标移动到该行的行首
换行:将贯标移动到下一行相同的位置

4、运算符

含义:在程序中用来连接变量或常量的符号

表达式:
含义:在程序中用运算符连接起来的式子

常见运算符的分类
算术运算符
赋值运算符
关系运算符
逻辑运算符
三元运算符
位运算符

1.算术运算符

含义:
在程序中针对变量或常量进行运算操作的运算符
分类:
数学运算符

+, - , * , / , %(取余)
自增运算符
++
自减运算符

数学运算符的注意事项:
	/:取的是两个数相除的商
	%:取的是两个数相除的余数

需求:获取指定四位数中个位,十位,百位,千位上的数字

public static void main (String[] args) {
		//声明并初始化四位整数
		int num = 1234;

		//获取该四位数各位位上的数字
		int ge = num % 10;
		int shi = num / 10 % 10;
		int bai = num / 100 % 10;
		int qian = num / 1000 % 10;

		System.out.println("个位上的数字是:" + ge);
		System.out.println("十位上的数字是:" + shi);
		System.out.println("百位上的数字是:" + bai);
		System.out.println("千位上的数字是:" + qian);
	}

对于一个数(num)个十百千万的位数求法规律:

个位:num%10

十位:num/10%10

百位:num/100%10

千位:num/1000%10

万位:num/10000%10

…位:num/…%10

2.+号的使用

+号的多种用法:
1.加法运算符
2.字符串连接符

字符串连接符
含义:当+号两边有任何一边出现了字符串时,+号不再起到加法运算操作,而是转换成字符串连接符,将两边的内容进行连接操作,得到新的字符串

3.自增自减运算符

自增自减运算符(++,–)
自增运算符:
含义:将变量进行+1操作,再将结果赋值给该变量
格式:
变量名++
++变量名
特点:
单独使用:
前++和后++的运算结果是一样的,运算过程可以忽略不计
复合使用:
如果++在前,先自增,再使用
如果++在后,先使用,再自增
自减运算符:
含义:将变量进行-1操作,再将结果赋值给该变量
格式:
变量名–
–变量名
特点:
单独使用:
前–和后–的运算结果是一样的,运算过程可以忽略不计
复合使用:
如果–在前,先自减,再使用
如果–在后,先使用,再自减

4.赋值运算符

含义:
进行赋值操作的运算符
分类:
基础赋值运算符
=
扩展赋值运算符
+= , -= , *= , /= , %= , …
含义:将运算符两边的内容进行运算操作,再将运算后的结果赋值给左边变量

注意:
		扩展的赋值运算符再将结果赋值给左边的变量之前,会根据左边的变量的数据类型针对结果进行隐式的强制转换
5.关系运算符

含义:
针对变量进行比较的运算符
分类:
< , <= , > , >= , == , !=
注意:
1.关系表达式的结果一定是boolean值
2.在程序中不要将写成=,也不要将=写成

==的含义:
比较基本类型数据值是否相等

!=的含义:
比较基本类型数据值是否不等

6.逻辑运算符

含义:
用来连接boolean值结果的运算符
分类:
基础逻辑运算符
& , | , ^ , !
短路逻辑运算符
&& , ||

基础逻辑运算符
	运算符&:
		含义:
			与,且
		特点:
			有false则false
		场景:
			判断多个条件是否同时满足

	运算符|:
		含义:
			或
		特点:
			有true则true
		场景:
			判断多个条件是否至少满足一个

	运算符^:(了解)
		含义:
			异或
		特点:
			相同为false,不同为true
		场景:
			判断两个条件结果是否不等

	运算符!:
		含义:
			非
		特点:
			非false则true,非true则false
		场景:
			针对boolean值结果进行取反
7.短路逻辑运算符

&& ||

运算符&&:
		含义:
			双与,短路与
		特点:
			有false则false
		注意:
			&和&&的结果是一样的;&&具有短路效果,当运算符前面的表达式结果为false时,运算符后面的表达式不会被执行;如果是&的话,无论运算符前面的表达式结果是true还是false,运算符后面的表达式都会被执行,在实际应用中更推荐是用&&


	运算符||:
		含义:
			双或,短路或
		特点:
			有true则true
		注意:
			|和||的结果是一样的;||具有短路效果,当运算符前面的表达式结果为true时,运算符后面的表达式不会被执行;如果是|的话,无论运算符前面的表达式结果是true还是false,运算符后面的表达式都会被执行,在实际应用中更推荐是用||
8.三元运算符

含义:含有三个未知量的运算符
格式:
关系表达式 ? 结果值1 : 结果值2;
流程:
1.先确认关系表达式的结果是true还是false
2.在确认关系表达式结果的同时,统一结果值1和结果值2的数据类型
3.如果是true,执行统一数据类型后的结果值1;
如果是false,执行统一数据类型后的结果值2;

9.位运算符

含义:针对二进制进行操作的运算符
目的:
1.查看源码
2.面试题
分类:
按位运算符
& , | , ^ , ~
移位运算符:
<< , >> , >>>

按位运算符&:
	含义:
		按位与,当两位相同时为1时才返回1

按位运算符|:
	含义:
		按位或,只要有一位为1即可返回1

按位运算符^:
	含义:
		按位异或。当两位相同时返回0,不同时返回1

按位运算符~:
	含义:
		按位非,将操作数的每个位(包括符号位)全部取反
10.移位运算符<<

含义:
将指定数据的二进制往左移动指定的位数
格式:
指定数据 << 移动位数
特点:
将指定数据的二进制往左移动指定的位数,符号位也随之移动,如果低位出现了空位,需要补0进行占位

移位运算符>>:
	含义:
		将指定数据的二进制往右移动指定的位数
	格式:
		指定数据 >> 移动位数
	特点:
		将指定数据的二进制往右移动指定的位数,符号位也随之移动,如果高位出现了空位,需要补和符号位相同的数字进行占位

移位运算符>>>:
	含义:
		将指定数据的二进制往右移动指定的位数
	格式:
		指定数据 >>> 移动位数
	特点:
		将指定数据的二进制往右移动指定的位数,符号位也随之移动,如果高位出现了空位,需要补0进行占位
5、原码反码补码

相同点:
在程序中都是针对二进制数据进行定点表示法:
(1)原反补针对二进制规定了符号位,最高位即符号位,正数为0,负数为1
(2)原反补针对存储占用的字节数进行二进制补全,不足位数,在符号位后面进行补0操作
int类型的1:
二进制1
定点表示法:
00000000 00000000 00000000 00000001
不同点:
原码:是屏幕显式数据的二进制定点表示法
补码:计算机中所有的数据操作都拿原码的补码形式进行计算操作
反码:针对原码和补码进行转换的中间量

数据存储操作过程:
	1.显式的数据==>数据的原码
		如果数据是正整数,符号位确认为0,并补足位数
		如果数据是负整数,符号位确认为1,并补足位数
	2.数据的原码==>数据的反码
		如果数据是正整数,数据的反码与其原码相同
		如果数据是负整数,数据的反码是针对原码进行逐位取反,符号位保持不变
	3.数据的反码==>数据的补码
		如果数据是正整数,数据的补码与其反码相同
		如果数据是负整数,数据的补码在其反码的基础上进行+1运算
	4.数据的补码==>结果的补码
		数据的存储或操作
	5.结果的补码==>结果的反码
		如果结果是正整数,结果的反码与其补码相同
		如果结果是负整数,结果的反码在其补码的基础上进行-1运算
	6.结果的反码==>结果的原码
		如果结果是正整数,结果的原码与其反码相同
		如果结果是负整数,结果的原码是针对反码进行逐位取反,符号位保持不变
	7.结果的原码==>显式的结果
		如果结果是正整数,直接转换显式结果
		如果结果是负整数,忽略符号位,将其直接转换显式结果并添加负号

将int类型的130强制转换成byte类型
	1.显式的数据==>数据的原码
		数据的原码:00000000 00000000 00000000 10000010
	2.数据的原码==>数据的反码
		数据的反码:00000000 00000000 00000000 10000010
	3.数据的反码==>数据的补码
		数据的补码:00000000 00000000 00000000 10000010
	4.数据的补码==>结果的补码
		结果的补码:10000010
	5.结果的补码==>结果的反码
		结果的反码:10000001
	6.结果的反码==>结果的原码
		结果的原码:11111110
	7.结果的原码==>显式的结果
		显式的结果:-126

第三天

1、流程语句与控制语句
1.流程语句

顺序结构:代码从上至下依次执行
流程控制作用于顺序结构中

流程控制:
	流程控制语句:
		分支结构:
			if语句
			switch语句
		循环结构
			for语句
			while语句
			dowhile语句
	流程控制代码块:
		调用结构:
			方法

学习流程控制的小技巧
1.记住流程控制的语法格式
2.记住流程控制的语法流程
3.精通流程控制的实际应用

三种循环的区别:
1.循环语句的执行次数(当循环条件语句为false时,循环体语句至少执行的次数)
for语句和while语句当循环条件语句为false时,循环体语句至少执行0次
do…while…语句当循环条件语句为false时,循环体语句至少执行1次
2.实际开发中如何选择
有明显的循环次数或循环范围,选择for语句
没有明显的循环次数或循环范围,选择while语句
在实际开发中不会选择do…while…语句

2.控制语句

含义:操作流程控制的语句
分类:
break
continue
return(暂不涉及)

break关键字
	场景
		1.switch语句中
		2.循环语句中
	作用:
		1.结束switch语句
		2.结束循环语句

continue关键字:
	场景:
		循环语句中
	作用:
		跳出本次循环,继续下一次循环


控制语句的注意事项:
	在和控制语句相同的作用域内,控制语句的后面不可以编写任何代码,
	否则编译报错,因为永远执行不到

流程控制语句的注意事项:
if语句,for语句,while语句如果{}中的语句体有且仅有一行时,
{}可以省略不写,但是实际开发中推荐写上

1、dowhile语句的格式:

do {
循环体语句
} while (循环条件语句);

执行流程:
	1.先执行循环体语句;
	2.再确认循环条件语句的结果是true还是false;
	3.如果是true,跳回第1步,继续执行;
	  如果是false,dowhile语句结束;

为了和for循环进行转换,衍生出dowhile语句的扩展格式
	初始化语句
	do {
		循环体语句
		迭代语句
	} while (循环条件语句);
2、for语句的基本格式:

for (初始化语句;循环条件语句;迭代语句) {
循环体语句
}

初始化语句:声明初始化循环变量的语句
	循环条件语句:循环的判断条件
	循环体语句:重复执行多次的代码
	迭代语句:循环的后续操作
执行流程:
	1.先执行初始化语句;
	2.确认循环条件语句的结果是true还是false;
	3.如果是true,执行循环体语句;
	  如果是false,for语句结束;
	4.执行迭代语句;
	5.跳回第2步,继续执行

练习:打印所有的水仙花数

什么是水仙花数呢?
	所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
	举例:153就是一个水仙花数。
	153 = 1*1*1 + 5*5*5 + 3*3*3
public class ForDemo05 {
	public static void main (String[] args) {
		//遍历所有的三位数
		for (int i = 100 ; i < 1000 ; i++) {
			//获取每个三位数的个位,十位,百位上的数字
			int ge = i % 10;
			int shi = i / 10 % 10;
			int bai = i / 100 % 10;

			//进行数据的筛选
			if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
				System.out.println(i);
			}
		}
	}
}

分析以下需求,并用代码实现:
(1)打印出四位数字中个位+百位=十位+千位并且个位数为偶数,千位数为奇数的数字,并打印符合条件的数字的个数
(2)符合条件的数字,每行显示5个,用空格隔开,打印格式如下:
1012 1034 1056 1078 1100
1122 1144 1166 1188 1210
//…
符合条件的数字总共有: 165个

public class ForDemo07 {
	public static void main (String[] args) {
		//声明并初始化计数器变量
		int count = 0;

		//遍历所有的四位数
		for (int i = 1000; i < 10000 ; i++) {
			//获取每个四位数中的个位,十位,百位,千位
			int ge = i % 10;
			int shi = i / 10 % 10;
			int bai = i / 100 % 10;
			int qian = i / 1000 % 10;

			//进行数据的筛选
			if ((ge + bai == shi + qian) && (ge % 2 == 0) && (qian % 2 == 1)) {
				//计数器变量累加
				count++;

				//打印符合要求的数字
				if (count % 5 == 0) {
					System.out.println(i);
				} else {
					System.out.print(i + " ");
				}
			}
		}


		//打印计数器变量
		System.out.println("符合条件的数字总共有: " + count + "个");
	}
}
3、if语句格式

if语句的第一种格式
if (条件判断语句) {
语句体
}

执行流程:
	1.先确认条件判断语句的结果是true还是false;
	2.如果是true,执行语句体,if语句结束;
	  如果是false,if语句语句;

if语句的第二种格式:
if (条件判断语句) {
语句体1
} else {
语句体2
}

执行流程:
	1.先看条件判断语句的结果是true还是false;
	2.如果是true,执行语句体1;
	  如果是false,执行语句体2;
注意事项:
	if语句的语句体可以是多行逻辑代码,三元运算符只能是结果值,具有一定的局限性,在实际开发中更推荐使用if语句的第二种格式

if语句的第三种格式:
if (条件判断语句1) {
语句体1
} else if (条件判断语句2) {
语句体2
}

else if (条件判断语句n) {
语句体n
} else {
语句体n+1
}

执行流程:
	1.先确认条件判断语句1中的结果是true还是false
	2.如果是true,执行语句体1,if语句结束;
	  如果是false,确认条件判断语句2中的结果是true还是false
	......
	3.当所有条件判断语句的结果都是false,执行else中的语句体n+1

注意:
	if语句的第三种格式,else语句在部分场景中可以省略不写,但是推荐写上

练习

x和y的关系满足如下:
x>=3 y = 2x + 1;
-1<x<3 y = 2x;
x<=-1 y = 2x - 1;
根据给定的x的值,计算出y的值并输出。

public static void main (String[] args) {
		//声明并初始化x变量
		int x = 5;

		//声明y变量
		int y;

		//针对x进行判断
		if (x >= 3) {
			y = 2 * x + 1;
		} else if (x > -1 && x < 3) {
			y = 2 * x;
		} else {
			y = 2 * x - 1;
		}

		//打印y的值
		System.out.println("y = " + y);
	}
4、switch语句的基本格式:

switch (选择值) {
case 数据值1:
语句体1
break;
case 数据值2:
语句体2
break;

case 数据值n:
语句体n
break;
default:
语句体n+1
break;
}

执行流程:
	1.先确认选择值的最终结果是多少
	2.选择数据值1和选择值进行匹配,看是否匹配成功;
	3.如果匹配成功,执行语句体1,执行break,switch语句结束;
	  如果匹配失败,选择数据值2和选择值进行匹配,看是否匹配成功;
	......
	4.当所有的数据值和选择值都匹配失败,执行default中的语句体n+1,执行break,switch语句结束;

switch语句的注意事项:
1.switch语句()中选择值的数据类型只支持以下几种:
基本类型:原则上在内存中只支持int类型,因为自动转换可以衍生出byte,short,char
引用类型:
JDK5.0(包含)以后:支持枚举Enum类型
JDK7.0(包含)以后:支持字符串String类型
2.swtich语句中的default和if语句的第三种格式中else类似,可以省略不写,推荐写上
3.swtich语句中的default和case位置可以互换,但不影响执行流程
4.switch语句中的break可以省略不写,但是会出现case穿透效果

根据指定的月份输出对应季节
一年有四季`````
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12,1,2 冬季

if语句和switch语句的区别:
if语句可以针对范围或条件进行判断,但switch语句不能,在实际应用中更推荐使用if语句,在底层中switch语句的执行效率比if语句高,但是在硬件过剩的今天,这点效率可以忽略不计

public class SwitchDemo03 {
	public static void main (String[] args) {
		//声明并初始化月份变量
		int month = 5;

		if (month >= 1 && month <= 12) {
			if (month == 1) {
				System.out.println("冬季");
			} else if (month == 2) {
				System.out.println("冬季");
			} else if (month == 3) {
				System.out.println("春季");
			} else if (month == 4) {
				System.out.println("春季");
			} else if (month == 5) {
				System.out.println("春季");
			} else if (month == 6) {
				System.out.println("夏季");
			} else if (month == 7) {
				System.out.println("夏季");
			} else if (month == 8) {
				System.out.println("夏季");
			} else if (month == 9) {
				System.out.println("秋季");
			} else if (month == 10) {
				System.out.println("秋季");
			} else if (month == 11) {
				System.out.println("秋季");
			} else {
				System.out.println("冬季");
			}
		} else {
			System.out.println("月份有误");
		}

		System.out.println("================================");

		if (month >= 1 && month <= 12) {
			if (month == 3 || month == 4 || month == 5) {
				System.out.println("春季");
			} else if (month == 6 || month == 7 || month == 8) {
				System.out.println("夏季");
			} else if (month == 9 || month == 10 || month == 11) {
				System.out.println("秋季");
			} else {
				System.out.println("冬季");
			}
		} else {
			System.out.println("月份有误");
		}

		System.out.println("================================");

		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;
		}

		System.out.println("================================");

		switch (month) {



			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;

			case 1:
			case 2:
			case 12:
				System.out.println("冬季");
				break;

			default:
				System.out.println("月份有误");
				break;
		}
	}
}
5、while循环的格式:

while (循环条件语句) {
循环体语句
}

执行流程:
	1.先确认循环条件语句的结果是true还是false;
	2.如果是true,执行循环体语句;
	  如果是false,while语句结束;
	3.跳回第1步,继续执行

为了和for语句之间进行转换,衍生出while循环扩展格式:

	初始化语句
	while (循环条件语句) {
		循环体语句
		迭代语句
	}

练习:趣味折纸

题目:
世界最高山峰是珠穆朗玛峰,它的高度是8848.86米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问,折叠多少次,不低于珠穆朗玛峰的高度?

public class WhileDemo02 {
	public static void main (String[] args) {
		//声明并初始化折纸的次数计算器变量
		int count = 0;

		//声明并初始化珠峰高度变量和纸厚度变量
		int zf = 88488600;
		int zhi = 1;

		//考虑到没有明显的循环次数,选择while循环
		while (zhi < zf) {
			//计数器累加
			count++;

			//进行折纸
			zhi *= 2;
		}

		System.out.println("count = " + count);
	}
}
2、运算符优先级的注意事项

1.Java中运算符的优先级和数学中的优先级不一样,不是谁优先级高,就最先执行谁,而是式子从左到右依次执行,
遇到运算符的时候,再考虑优先级问题,先执行谁后执行是谁的问题
2.不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成;
3.不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序
4.如果表达式中出现了自增自减运算符,并且出现了(),这个时候需要特殊注意优先级问题
5.如果表达式中出现了自增自减运算符,且=的两边出现了相同的变量,这个时候需要特殊注意优先级问题
6.如果表达式中出现了扩展的赋值运算符,需要将扩展的赋值运算符拆分成基础赋值运算符再进行计算
7.除了上述情况外,不需要特殊关注运算符优先级问题