文章目录

  • 注释
  • 关键字
  • 字面量
  • 变量
  • 数据类型
  • 八种基本数据类型
  • 引用数据类型(后面讲解)
  • 标识符
  • 键盘录入
  • 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'会报错
  • 布尔:表示真假,只有两个值truefalse
  • :一个空值,null,不能直接打印,只能用字符串打印
  • 举例:
System.out.println("null");
  • 制表符\t: 在打印的时候,把前面字符串的长度用空格补齐到8,或者8的整数倍。最少补1个空格,最多补8个空格。
  • 作用:让数据对齐,方便制表

java 判断2个矩形是否在范围内_java 判断2个矩形是否在范围内

变量

变量:值有可能发生改变的量。

作用:方便之后使用。

  • 变量的定义格式
//数据类型 变量名 = 数据值;

数据类型限定了只能存储的数据的类型。

//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 判断2个矩形是否在范围内_python_02

判断和循环

流程控制语句

流程控制语句:通过一些语句,控制语句的执行流程

顺序结构

java默认结构,按代码从上往下的顺序,依次执行

分支结构
if语句
  • if语句第一种格式
格式:if(关系表达式){语句体;}

执行流程:如果关系表达式为true,则执行大括号里的语句体;如果为false就不执行语句体,而是继续执行if后面的语句

  • 注意点
  1. 大括号的开头建议写在第一行的末尾
  2. 语句体如果只有一句代码,大括号可以省略不写,但是还是建议写,因为有时候不确定是不是只有一句,例如:int a = 10;两句代码,包含定义变量赋值
  3. 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号中
  • 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当前所在循环。