1.内部类: 在一个类中定义另一个类
位置不同分为: 成员内部类 局部内部类
成员内部类 访问特点: 能访问类中成员便变量 private修饰的也可以访问
即使类 又是成员
Outer.Inner oi = new Outer.new Inner(); //不推荐
成员内部类会私有化 不让直接访问
采用方式 method{Innner in = new Inner(0 in.show())}
2.局部内部类 访问特点: 能访问类中成员便变量也可以访问方法中的变量 private修饰的也可以访问
必须在方法中创建对象才能被访问
3.匿名内部类(重点): 是一个特殊的局部内部类 定义在方法中
作用: 将 继承 / 实现 方法重写 创建对象写在了一行
useInter(new Inter(){
@override
public void show(){
sout("匿名内部类");
}
}).show();
4.函数式编程: 拿参数做操作/逻辑
5.Lambda表达式
三要素:
1.():重写方法的参数列表
2.-> 箭头 指向要去做的代码块
3.{} 具体要操作的逻辑代码
6.Lambda表达式省略规则
1.参数只有一个时 ()可以省略 但是无参不能省
2.参数类型可以省略 要么都省 要么都不省
3.{}代码只有一行 可以省略{}; retrun
useFlyable(s -> sout(s));
useAddable((x,y) -> x + y); //return省略
7.System 和 Math 都是工具类
构造器私有化 提供static修饰的静态方法供外界访问
System.exit(0); //退出虚拟机
System.currentMillesTime(); //秒表
System.arrayCope("源数组",srcIndex,"目标数组",destIndex,拷贝个数);
8.Object 是所有Java类的直接或者间接父类
继承中super() 因为Object只有空参构造
自定义的引用数据类型 Student 默认继承Object
如果直接打印stu 会去调用Object.toString() // 包名 + 类名 @ 地址值
但是可以进行toString()重写 //重写后 编译看左运行看右 打印的是属性值
没有重写 默认使用的是Object.equals(); //底层 this == obj 比较的是地址值
重写之后 比较的是属性值是否相等
自定义对象更推荐重写equals() 和 toString();
9.面试题
String类已经重写了equals() 所以比较的是值是否相等
StringBuilder没有重写equals() 用的是父类Object中的equals() 比较的是地址值是否相等