第三章 变量
3.10.2 强制类型转换细节
3.11 Java_String和基本数据类型的转换
第四章 运算符
P65。
i++和++i的底层逻辑。
4.3.2 &&和&的使用区别
4.3.5 逻辑运算符练习题
P75
第一题,先进行x == 6 的比较,然后x再执行x++自增。
注意==与=的使用;赋值真结果就为真,赋值假结果就是假。
4.4.2 赋值运算符的特点
4.7.2 标识符命名规范
4.11 原码,反码,补码
第五章 程序控制结构
5.5.4 switch 注意事项和细节讨论
- 表达式数据类型,应和case 后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int
- switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String)
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;
第6章 数组、排序和查找
6.5 数组赋值机制
- 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
int n1 = 2; int n2 = n1; - 数组在默认情况下是引用传递,赋的值是地址。
6.14.2 二维数组存在形式
6.14.4 使用方式 3: 动态初始化-列数不确定(重要)
public class TwoDimensionalArray03 {
//编写一个 main 方法
public static void main(String[] args) {
/*
看一个需求:动态创建下面二维数组,并输出
i = 0: 1
i = 1: 2 2
i = 2: 3 3 3 一个有三个一维数组, 每个一维数组的元素是不一样的
*/
//创建 二维数组,一个有 3 个一维数组,但是每个一维数组还没有开数据空间
int[][] arr = new int[3][];
for(int i = 0; i < arr.length; i++) {//遍历 arr 每个一维数组
//给每个一维数组开空间 new
//如果没有给一维数组 new ,那么 arr[i]就是 null
arr[i] = new int[i + 1];
//遍历一维数组,并给一维数组的每个元素赋值
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = i + 1;//赋值
}
}
System.out.println("=====arr 元素=====");
//遍历 arr 输出
for(int i = 0; i < arr.length; i++) {
//输出 arr 的每个一维数组
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();//换行
}
}
}
6.16 二维数组使用细节和注意事项
- 一维数组的声明方式有:
int[] x 或者 int x[] - 二维数组的声明方式有:
int y 或者 int[] y[] 或者 int y[] [] - 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[] [] 是一个二维数组
第 7 章 面向对象编程(基础)
7.1.5 对象在内存中的存在形式 (重要!!!!!)
PS1:new类时,先会把类信息加载到方法区------->然后开始根据属性不同分配不同大小的空间,如果是字符串,分配一个地址,指向常量池,如果是基本数据类型就放堆里------->最后把堆地址返回给cat类
PS2:字符串在堆里存的是地址,存在方法区里一个叫常量池的地方,按照引用方式来存放
7.1.9 内存分配机制
PS:对象是引用数据类型,是引用传递,即地址传递。
PS:首先在方法区右加载person类信息,然后new在堆里面开空间,有空间就有地址,空间里面的值是默认值,对象创建完成后把堆空间地址返回给p1;下一步找到age赋值,而对于字符串来说,会在方法区左的常量池创建,然后给堆返回创建好的地址
7.1.10 类和对象内存分配机制与流程
7.2.2 方法调用机制
- 调用方法会产生一个新栈。当方法返回后,方法栈就会销毁。
7.2.5 成员方法使用细节
7.4.4 递归重要规则
-
执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
-
方法的局部变量是独立的,不会相互影响,比如n变量
-
如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据
-
递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟了
-
当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
7.5 方法重载
7.6 可变参数
7.6.1 可变参数的基本概念
7.6.2 可变参数的案例
7.6.3 可变参数注意事项和使用细节
7.7 作用域
7.7.1 基本使用
- 注意第四条!全局变量(类的属性)有默认值,局部变量没有默认值。
7.7.2 注意事项和使用细节
7.8 构造器/构造方法
7.8.1 基本介绍&语法
7.8.3 构造器的注意事项和使用细节
- 注意第7点,非常重要!一旦自己定义了构造器,默认的就被覆盖率,不是重载!如果还想使用,就显示定义一下,即手动重载一下。
7.9 对象创建的流程分析
7.10.4 this的注意事项和使用细节
- 普通name是就近原则,this.name是访问属性,准确定位
7.10.5 课堂练习题
public class test {
public static void main(String[] args) {
Person p1 = new Person("mary", 20);
Person p2 = new Person("jack", 30);
System.out.println("p1和p2比较的结果是" + p1.compareTo(p2));
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean compareTo(Person p) {
//名字和年龄完全一样
// if(this.name.equals(p.name) && this.age == p.age) {
// return true;
// } else {
// retrun false;
// }
return this.name.equals(p.name) && this.age == p.age;
}
}
7.12 本章练习题
public class test {
public static void main(String[] args) {
A01 a01 = new A01();
double[] arr = null;
Double res = a01.max(arr);//返回的是包装类的对象
if(res != null) {
System.out.println("arr的最大值:" + a01.max(arr));
} else {
System.out.println("arr的输入有误");
}
}
}
// 思路分析:
// 1.类名 A01
// 2.方法名 max
// 3.形参 (double[])
// 4.返回值 (double)
// 5.先完成正常的业务,再考虑代码的健壮性,再优化代码
class A01 {
public Double max(double[] arr) {
//如果一个元素都没有/传入null怎么返回呢?注意顺序,注意上面的代码也要改变
if(arr != null && arr.length > 0) {
//null是没有分配地址,[]是分配地址没有值
double max = arr[0];//假定第一个元素是最大的开始
for(int i = 1; i < arr.length; i++) {
if(arr[i] > max) {
max = arr[i];
}
}
return max;
} else {
return null;//用包装类,如果一个都不满足,返回空
}
}
}
- 注意这段代码的健壮性操作,max方法返回的是Double封装类,可以返回null。而不是返回double数据类型,double数据类型不能返回null。
第 8 章 面向对象编程(中级)
8.1.3 idea快捷键
8.1.4 模板
8.2 包
8.2.3 快速入门
- 俩同名类不可以同时import引入,第一个引入后,使用不用加前缀,其他的在代码中引用就要加前缀区分。
8.3 访问修饰符
8.3.1 访问修饰符规则