文章目录
- 注释
- 关键字
- 字面量
- 变量
- 数据类型
- 八种基本数据类型
- 引用数据类型(后面讲解)
- 标识符
- 键盘录入
- IDEA相关操作
- 运算符
- 算数运算符
- 基础运算
- 进阶运算
- 数字相加
- 字符串相加
- 字符相加
- 自增自减运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 短路逻辑运算符
- 三元运算符/三元表达式
- 运算符的优先级
- 判断和循环
- 流程控制语句
- 顺序结构
- 分支结构
- if语句
- switch语句
- if和switch的区别
- 循环结构
- for循环
- while循环
- 两道力扣算法题
- do while循环
- break和continue
注释
注释:对代码的解释说明,不参与编译和运行
- 单行注释:
//
- 多行注释:
/*...*/
- 文档注释
关键字
关键字:被java赋予特定含义的英文单词
//举例:
class,byte,int,short,long,float,double,char,boolean
- 特点
- 全部小写
- 特殊颜色标记
- 类:最基本的组成单元(如人身上的细胞)。class:创建一个类
字面量:数据在程序中的书写格式
字面量
字面量:数据在程序中的书写格式
- 整数(int)
- 小数(double)
- 字符串:用双引号括起来的内容
- 注意:不管括什么都是字符串,即使内容是空格,或者什么都不写(只有两个双引号)
""和" "都是字符串
- 字符:用单引号括起来的内容,内容有且只有一个
- 注意:如果内容大于一个,或者没有内容,会报错
'abc'会报错
- 布尔:表示真假,只有两个值true和false
- 空:一个空值,null,不能直接打印,只能用字符串打印
- 举例:
System.out.println("null");
- 制表符\t: 在打印的时候,把前面字符串的长度用空格补齐到8,或者8的整数倍。最少补1个空格,最多补8个空格。
- 作用:让数据对齐,方便制表
变量
变量:值有可能发生改变的量。
作用:方便之后使用。
- 变量的定义格式:
//数据类型 变量名 = 数据值;
数据类型限定了只能存储的数据的类型。
//a只能存储整数:
int a = 10;
注意事项:
- **变量名不能重复!**但可以采用this关键字区分
- 一条语句可以定义多个变量
//正确示范:
int a=10,b=20;
//错误示范:
int a,b = 10,20;
- 变量使用之前必须要赋值
//错误示范:只定义没赋值
int a;
//System.out.println(a);
//正确示范:
int a;
a=100;
System.out.println(a);
//建议:在定义变量时就赋好值,不要分开
- 对于for循环:求和的变量不能定义在循环的里面,因为变量只在所属的大括号中有效。如果把变量定义在循环里面,那么当前变量只在本次循环中有效。当本次循环结束后,变量就会从内存中消失,下一次循环开始又会定义一个新的变量
- 使用变量:
- 输出打印
- 参与计算
- 修改记录的值
数据类型
八种基本数据类型
- 整数类型
- 关键字:
- byte:-128~127
- short:-32768~32767
- int(默认):10位数范围
- long:19位数范围(注意:long类型变量定义时,在数据值的后面要加一个L(大小写都可以)作为后缀,否则报错)
long a=999999999L;
- 浮点数
- 关键字:
- float:
(注意:float类型变量定义时,在数据值的后面要加一个F(大小写都可以)作为后缀,否则报错)
float a = 10.1F;
- double(默认):
取值范围在所有数据类型中最大
- 字符
- 关键字:
- char:0~65535
- 布尔
- 关键字:
- boolean:true,false
引用数据类型(后面讲解)
标识符
给类、方法、变量起的名字。
- 标识符命名规则
- 硬性要求:如果不符合会报错
- 只限数字、字母、下划线、美元符号四种
- 不能以数字开头
- 不能是关键字
- 区分大小写
//举例:
int class = 10;会报错
int Class = 10;不会报错
- 软性建议:
- 见名知意
- 小驼峰命名法:适用于方法和变量
- 标识符是一个单词时,全部小写
- 标识符是多个单词时,第一个单词首字母小写,后续每一单词首字母大写
- 大驼峰命名法:适用于类名
- 标识符是一个单词时,首字母小写
- 标识符是多个单词时,每一单词首字母大写
键盘录入
- Java帮我们写好一个类叫Scanner,这个类就可以接收键盘输入的数字。
- 步骤:
- 导包:导入要用的类。注意要写在类定义的上面
import java.util.Scanner;
- 创建对象:只有变量名sc可动,其他都是固定格式
Scanner sc = new Scanner(System.in);
- 接受数据:只有变量名i可动,其他都是固定格式
int i = sc.nextInt();
IDEA相关操作
全称Intellij IDEA,java语言的开发集成环境,业内公认java开发最好的工具
集成环境:编写、编译、执行、调试一体的开发工具,程序员只需要关注写代码和运行两方面
IDEA项目结构:层层包含
- project项目
- module模块
- package包
- class类
- 编写代码
psvm:程序主入口
sout:输出语句
类相关操作
- 删除类
- 新建类
- 修改类:文件名要和类名保持一致,修改类名还要同时修改文件名
模块相关操作
- 新建
- 删除
- 修改
- 导入
项目相关操作
- 关闭
- 新建
- 打开
- 修改
运算符
运算符:对字面量或者变量操作的符号。
- 举例:加号、减号等
表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
- 举例:a+b
算数运算符
基础运算
- +:加
- -:减
- *:乘
- /:除
- %:取模,做除法运算然后取其余数
- 取模的应用场景:
- 判断A是否可以被B整除
- A是否为偶数
- 斗地主发牌(之后了解)
注意:
- 整数参与计算,结果只能是整数,小数部分直接抹去
- 如果计算有小数参与计算,结果返回小数,但是有可能不精确(JAVASE进阶部分,后续讲解)
进阶运算
数字相加
注意:数据类型不一样不能运算,转成一样的才能运算
隐式转换(自动类型提升):
- 规则一:取值范围小的数据和取值范围大的数据进行计算,小的会自动转换成大的,然后再进行运算(小变大)
//举例:
int a = 10;
double b = a;
//a会先自动提升为double数据类型,然后赋值给b(底层原理后面学)
- 规则二:byte,short,char三种类型的数据在运算的时候,不管有没有更大的数据类型参与,都会直接先提升为int,然后再进行运算
//举例:
byte a = 10;
byte b = 20;
c = a + b;
//当a和b进行相加运算的时候,会先提升为int类型,因此最后c是int类型
强制转换: 如果把一个取值范围大的数值,赋值给取值范围小的变量(大变小),是不允许直接赋值的。如果一定要这么做就需要加入强制转换
- 格式:
目标数据类型 变量名 = (目标数据类型)被强转的数据
//举例:
double a = 12.3;
int b = (int)a
//a的取值范围大,b的取值范围小,如果要让a赋值给b,需要在a前面加上括号和目标数据类型
- 注意:如果要转换的过大,强制转换结果会出错(不是报错),可以用“用水盆里的水倒入一个水杯中‘理解。
//举例:
int a = 300;
byte b = (byte) a;
//这时候结果会出错(不是报错),因为300超出byte取值范围(-128~127)
- 注意:强制转换要注意括号是整体的数据
//错误示范:
byte a = 10;
byte b = 20;
byte c = (byte)a + b;
//正确示范:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
字符串相加
字符串的+操作:当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符了。会将前后的数据都看成字符串进行拼接,并产生一个新的字符串。
//举例:
"123"+123
"123123"
- 注意:连续进行“+”操作,会从左到右执行
//举例1:
1+2+"100"
"3100"
//举例2:
'中'+"abc"+true
"中abctrue"
- 注意:如果拼接的是变量,会用变量的值进行拼接,而不是当作字符串
//举例:
int age = 18;
system.out.println("我的年龄是" + age +"岁")
"我的年龄是18岁"
字符相加
字符的+操作:当字符+字符或者字符+数字时,会把字符通过ASCII码表查询到对应的数字再计算
- 注意:字符+字符串,字符不会转换为数字
//举例1:字符+数字
'a'+1
98
//举例2:字符+字符串
'a'+"abc"
"aabc"
自增自减运算符
++
:自增运算符,给变量的值加一
--
:自减运算符,给变量的值减一
- 使用场景一:单独计算
符号可以放在变量前面,也可以放在后面,单独写一行结果是一样的
//举例:
int a = 10;
a++;
//打印得11
- 使用场景二:(参与计算时用的很少,了解即可)
注意:参与计算时,放在变量前面和后面,结果不同
先用后加:用完了再自增
//举例:
int a = 10;
int b = a++;
//打印得b是10,a是11
先加后用:自增完了再用
//举例:
int a = 10;
int b = ++a;
//打印得b是11,a是11赋值运算符
赋值运算符
=
:赋值+=
:加后赋值
//举例:
int a = 10;
int b = 20;
a += b;
//a和b先加,再赋值给变量a。打印得a是30,b是30
*=
:乘后赋值/=
:除后赋值%=
:取余后赋值- 注意:+=,*=,/=,%=底层都隐藏了一个强制转换,避免结果出错
举例:
short s = 1;
s += 1;
上述代码等于下列代码:
s = (short)(s+1);
关系运算符
-
==
:判断是否相等,相等返回true,不相等返回false -
!=
:判断是否不相等,不相等返回true,相等返回false -
>
:判断是否大于 -
>=
:判断是否大于等于 -
<
:判断是否小于 -
<=
:判断是否小于等于 - 注意:
- 关系运算符返回的结果都是boolean类型
- 运算符中间没有空格
逻辑运算符
&
:逻辑与(并且),两边同时为真才为真,只要其中有一个为假,结果就为假|
:逻辑或(或者),两边都为假才为假,只要其中有一个为真,结果就为真
- 使用场景1:用户和密码同时正确,才能登陆——逻辑与&
- 使用场景2:相亲,只有有一房或者一车就能结婚——逻辑或|
^
:逻辑异或(了解即可),相同为false,不同为true
- 异或的记忆法:两人结婚,两男或两女为false,一男一女为true
!
:逻辑非(取反),对true取反返回false,对false取反返回true
- 注意:取反的感叹号不要写多次,要么不写,要么只写一次。因为两个感叹号等于没有。
短路逻辑运算符
短路逻辑运算符:对逻辑运算符进行优化,提高效率。
短路效果:简单理解,当左边的表达式能确定最终的结果,那么右边就不会参与运行了
&&
:具有短路效果的与,运行结果等于单个&,即两边同时为真才为真,只要其中有一个为假,结果就为假,但如果左边已经判定为假,右边就不会参与判定了||
:具有短路效果的或,运行结果等于单个|,即两边都为假才为假,只要其中有一个为真,结果就为真,但如果左边已经判定为真,右边就不会参与判定了
//举例:
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;
System.out.println(result);//false
System.out.println(a);//11
System.out.println(b);//10
//因为左边++a < 5已经确定为假,因此右边表达式++b不会运行,因此a为11,b为10
最常用的逻辑运算符:&&,||,!
三元运算符/三元表达式
三元运算符:进行判断,根据判断的结果选择进行哪个表达式输出
格式:关系表达式?表达式1:表达式2;
先进行关系表达式,如关系表达式为真,则进行表达式1;如为假,则进行表达式2,
- 注意:表达式的结果必须被用,比如存在一个变量中或者打印
//举例:
int a = 10;
int b = 20;
int c = a>b?a:b;
//返回20
- 使用场景1:用三元表达式判断两只老虎的体重是否相同,如果相同输出“相同”,不同则输出“不同”。
- 使用场景2:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。
运算符的优先级
只需要记忆:小括号优先于其他所有运算符!
判断和循环
流程控制语句
流程控制语句:通过一些语句,控制语句的执行流程
顺序结构
java默认结构,按代码从上往下的顺序,依次执行
分支结构
if语句
- if语句第一种格式
格式:if(关系表达式){语句体;}
执行流程:如果关系表达式为true,则执行大括号里的语句体;如果为false就不执行语句体,而是继续执行if后面的语句
- 注意点:
- 大括号的开头建议写在第一行的末尾
- 语句体如果只有一句代码,大括号可以省略不写,但是还是建议写,因为有时候不确定是不是只有一句,例如:
int a = 10;
是两句代码,包含定义变量和赋值 - 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号中
- if语句第二种格式
格式:if(关系表达式){语句体1;}
else{语句体2;}
执行流程:如果关系表达式为true,则执行大括号里的语句体1,而且不会执行语句体2,if语句结束;如果为false则不执行语句体1,执行语句体2,if语句结束
- if语句第三种格式
格式:
if(关系表达式1){语句体1;}
else if(关系表达式2){语句体2;}
...
else{语句体n+1;}
执行流程:如果关系表达式1为true,则执行大括号里的语句体1,如果为false则判断关系表达式2,一直到语句体n+1
switch语句
格式:
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给出的值不允许重复
- switch扩展知识点
- default位置和省略:
- 位置:可在任意位置,但一般写在最下面
- 省略:可以省略,语法不会有问题,但不建议省略
- case穿透:没有break语句导致。可以用来简化代码。
- 执行流程:首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配。如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。如果没有发现break,那么程序会继续执行下一个case的语句体(不管有没有匹配成功),一直遇到break或者右大括号为止。举例:
- switch新特性:仅JDK12及以上版本有。利用
->
和大括号把break省去。
如果语句体只有一行,那么大括号可以省略。举例:
if和switch的区别
switch和if第三种格式各自的使用场景:
- if的第三种格式:一般用于对范围的判断
- switch:把有限个数据一一列举出来,让我们任选其一
循环结构
for循环
格式:
for(初始化语句;条件判断语句;条件控制语句){
循环语句体;
}
执行流程:
1.执行初始化语句,只会执行一次,是循环的开始条件
2.执行条件判断语句,看其结果是true还是false,判断有没有达到循环的结束条件
3.如果是false,循环结束
4.如果是true,执行循环体语句执行条件控制语句
5.回到2.继续执行条件判断语句
//举例:打印1-5
for(int i = 1;i <= 5;i++){
System.out.println(i);
}
- 练习1:累加求和
- 注意事项:
- 求和的变量不能定义在循环的里面,因为变量只在所属的大括号中有效
- 如果把变量定义在循环里面,那么当前变量只在本次循环中有效。当本次循环结束后,变量就会从内存中消失,下一次循环开始又会定义一个新的变量
while循环
//格式:
//初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
执行流程(和for一样):
1.执行初始化语句,只会执行一次,是循环的开始条件
2.执行条件判断语句,看其结果是true还是false,判断有没有达到循环的结束条件
3.如果是false,循环结束
4.如果是true,执行循环体语句执行条件控制语句
5.回到2.继续执行条件判断语句
- for和while的对比(从课本角度)
- for循环中,控制循环的变量(初始化语句),因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- while循环中,控制循环的变量(初始化语句),对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- for和while的对比(从实际开发角度)
- for循环中:知道循环次数或者循环的范围
- while循环:不知道循环的次数和范围,只知道循环的结束条件。
练习1:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?(用while)
两道力扣算法题
- 题一:给你一个整数x。如果×是一个回文整数,打印true,否则,返回false 。解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。
- 题二:求商和余数。给定两个整数,被除数和除数(都是正数,且不超过int的范围)将两数相除,要求不使用乘法、除法和%运算符。得到商和余数。
do while循环
用的非常少,了解即可。
//格式:
//初始化语句;
do{
//循环体语句;
//条件控制语句;
}while(条件判断语句);
break和continue
- 无限循环:循环一直进行下去,停不下来,因此无限循环语句下面的代码永远执行不到
for(;;){
语句体;
}
while(true){
语句体;
}
do{
语句体;
}while(true);
- 跳转控制语句:在循环过程中跳转到其他语句执行
-
continue
:结束本次循环,继续下次循环
//continue举例:
for(int = 1;i<=5;i++){
if(i == 3){
continue;
}
sout(i)
}
//如果i=3,结束本次循环,继续下次循环。
//结果打印:
1
2
4
5
-
break
:表示结束当前循环,但是当循环嵌套的时候,只能退出break当前所在循环。