目录
自增自减运算符
自增++自减--运算符作用:
对当前变量值进行+1-1的赋值操作
i++、++i单独使用时没有区别
++、--如果在表达式中或者同时有其他操作,放在变量前后会有明显区别
int a=1;
int r=++a;
//结果:a=2 r=2
int a=1
int r=a++;
//结果:r=1 a=2
面试考点
int k=3;
int p=5;
int rs=k++ + ++k - --p +p-- - k-- + ++p +2;
System.out.println("i="+k);
System.out.println("r="+p);
System.out.println("r="+rs);
//结果:k=4 p=4 rs=9
在运算过程中,需要同步更新k和p的值
JDK、JRE、JVM关系
JDK=JRE+开发工具集(javac、javadoc等)
JRE=JVM+javase标准类库
如果只想运行开发好的 .class 文件 只需要 JRE
标准类库作用是包含了一些开发中常用的方法,比如lang包、util包
Java语言版本历史
java5.0:标志性版本
java8.0:最稳定版本
java17:2021长期维护版本,带有TLS的都是长期稳定维护的
Java三大平台
Java EE: Java 语言的(企业版),用于 Web 方向的网站开发。
Java SE: Java 语言的(标准版),用于桌面应用的开发,是其他两个版本的基础。
Java ME: Java 语言的(小型版),用于嵌入式消费类电子设备
IDEA操作
模块操作
创建模块
删除模块
注意:模块的删除,只是从左侧列表中临时删除,硬盘中还是存在的.
项目操作
关闭项目
修改项目名
-
关闭项目
-
从列表中移除当前项目
-
到硬盘中手动修改项目名称
IDEA常用快捷键
Ctrl + alt + L | 格式化代码 |
---|---|
Alt + shift + ↑ | 上移当前行 |
Alt + shift + ↓ | 下移当前行 |
Alt+回车 | 导入包,自动修正 |
Ctrl+N | 查找类 |
Ctrl+R | 替换文本 |
Ctrl+F | 查找文本 |
Shift+F6 | 重构-重命名 |
Ctrl+X | 剪切当前行 |
Ctrl+D | 复制行 |
Ctrl+/ | 批量加入单行注释,再按一次就是取消 |
Ctrl+Shift+/ | 批量加入多行注释,再按一次就是取消 |
Alt+1 | 快速打开或隐藏工程面板 |
F2 | 高亮错误或警告快速定位 |
Ctrl+F12 | 可以显示当前文件的结构 |
Debug工具的使用
1. 加断点
2. 右键选择Debug运行
3. 点哪里 : Step Over (程序向下执行一步)
4. 看哪里 :
Debugger :
Frames : 可以看到程序中有哪些方法正在执行
Variables : 可以看到变量的变量过程
Console : 控制台
5.点击多个断点可以在执行代码时直接跳转到对应的下一个断点。
标识符
自己对类、方法、变量起的名字
规则
1、数字、字母、下划线、美元符
2、数字不能开头
3、不能是关键字
规范化命名
驼峰命名
小驼峰命名法 : 变量
1. 一个单词的时候, 所有字母小写
2. 多个单词的时候, 从第二个单词开始首字母大写
大驼峰命名法 : 类
1. 一个单词的时候, 首字母大写 Student Test Demo
2.如果是多个单词, 每个单词首字母大写 GoodStudent
java数据类型
注:声明float型数据,需在数据后加f或F。声明long类型时,也需要在后面加l或L。
自动类型转换
隐式转换介绍
将取值范围小的数据或变量, 给取值范围大的变量赋值, 可以直接赋值
注:这里的小的大的指的是取值范围,不是字节大小。
取值范围从小到大: byte short int long float double
注:float占用4个字节,long占用8个字节,但是float的取值范围比long大。因为小数二进制的存储方式,比整数更加节省空间。
byte、short、int这三个数据类型在运算过程中会直接提升为int再进行运算
举例说明
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;//答案错误,在运算时这两个变量会直接提升为int再进行运算,除非强制类型转换。
byte b = 3 + 4;
//3和4都是字面量,默认是int类型,按理应该会报错。但java存在常量优化机制,在编译的时候自动将3和4相加,在.class 文件中保存的是7这个值。
逻辑运算符使用注意事项
& |和&& ||区别
& |没有短路效果,即&左边的值无论是true或false都会执行右边的逻辑,&&的短路效果体现在若左边是false右边将不会执行。
举例
int x = 3;
int y = 4;
boolean result = ++x > 5 && y-- < 3;
System.out.println(result); // false
System.out.println(x); // 4
System.out.println(y); // 4
//因为左边条件是false,右边的代码将不会执行,所以y的值将不会自减
扩展赋值运算符注意事项
扩展赋值运算符+=、-=等内部存在强转效果
double num1 = 12.3;
int num2 = 10;
num2 += num1; // num2 = (int)22.3;
System.out.println(num2); // 22
逻辑语句注意事项
循环语句和跳转语句注意事项
break和continue异同点
异:break跳过某一层循环,continue则跳过某一次循环的执行,继续下一次。
同:两者都只能在循环中使用,这两个关键字下面不能写代码,属于无效代码
for循环注意事项
for循环中()定义的变量在整个循环结束后,会从内存中释放。for循环中{}定义的变量在每一轮循环结束后,会从内存中释放。
switch语句注意事项
switch语句中的()可以接收的类型有基本数据类型中的byte short int char 和引用数据类型的enum(JDK5) String(JDK7),如果case中没有break则会开启case穿透现象。
switch(1){
case 1:
sout("1");
case 2:
sout("2");
break;
}//结果输出1 2
基本数据类型和 String 类型的转换
二维数组的遍历
二维数组可以理解为里面保存的是多个一维数组。
int arr[][]={
{1,2,3},
{4,5,6},
{7,8,9}
}
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
sout(arr[i][j]);
}
}
数组的内存图
方法区:字节码文件加载时进 入的内存 栈:方法运行时,所进入的内存 堆:new出来的数据,都会进入堆内存,开辟空间,产生地址值。
方法重载
同一个类中,出现多个方法名称相同,但是形参列表是不同的,那么这些方法就是重载方法。修饰符、返回值类型都无所谓。
形参列表不同指的是:形参个数、类型、顺序不同。不关心形参的名称。
break和continue区别?
break:跳出并结束当前所在循环的执行。
continue:用于跳出当前循环的当次执行,进入下一次循环。只能在循环中使用