码点:字符数
代码单元:一个字符可能占两个单元 length()返回的是代码单元个数
代码块里面不能声明和实例变量或者类变量相同名的变量(局部变量)
switch 可以是 char byte int short string enum
带标签break跳出多重循环 标签名:循环{循环{break;}}//跳这里
依赖:a的方法操作b
聚合:a的对象包含b
关联:一个类知道另一个类的属性和方法
局部变量不会自动初始化,空对象不能调用方法null
构造器与类同名 一个以上 参数可有可无没有返回值 伴随new一起调用
用final可以告诉编译器该方法为内联方法(节约了入栈出栈时间,直接用方法体替换方法的地址)
直接返回一个对象的引用会破坏封装,应该返回一个克隆对象 obj.clone()
使用静态方法(1.不需要类的状态,参数通过显式参数提供,2.只需要访问类的静态域)
java所有方法 按值传值!!!!不能修改基本数据类型 不能修改引用指向另外的一个对象
重载 方法签名不同即可 方法名 参数列表
初始化块 所有数据域初始化为默认值,按照类声明出现顺序执行域初始化语句和初始化块 执行构造器
静态初始化块 类第一次加载和实例域一样除非设置成其他值,否则默认,按类定义顺序执行
finalize方法 会在对象被回收之前调用,调用时间不确定
静态导入, import static java.lang.System.* 以下代码中可以直接用System类的静态方法和静态域
当前类 同一包 子孙 其他包
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
继承:子类继承父类,子类有父类的私有域,但是不能直接访问,只能通过父类的方法或者接口访问,利用super.方法 调用。同理子类构造器只能初始化子类的私有域,对继承的私有域只能通过父类的构造器来初始化,没有显式调用,则调用无参构造器
this 调用隐式参数 调用该类其他构造器
动态绑定:多态,多态不能调用子类新有的方法
重载构析:动态识别,不同签名的同名方法
静态绑定:方法标记为private,static,final或者是构造器,则直接执行该方法,不用动态识别
重写:子类覆盖的方法不能低于父类的可见性。
含有抽象方法,类一定抽象
数组tostring要用 Arrays.tostring(数组)打印 deeptostring()
enum Size{
SMALL(“S”)
SIZE(string s){
this.abbreviation=s;
}
private string abbreviation;
}
仅在枚举构造枚举常量的时候调用构造器
反射modifyer类分析修饰符
接口 常量 静态方法 默认方法default(同名父类优先,若两个接口的冲突,则子类必须重写,没有默认实现,则不存在冲突)
super.clone() 需要实现cloneable接口浅克隆 深克隆需要重新定义public才能允许所有方法克隆对象。
函数式接口
λ表达式(一个闭包)
(String str,...)->{ } 没有参数也需要空括号。
除非可以推导出参数的类型,那么参数类型可以不写
例如:Comparator<String> c =(f,fs)->f.length-fs.length;
如果只有一个参数,并且参数类型可以推导出来 可以省略小括号
ActionListener listener =e->sout(“。。。”);
表达式要么有返回值要么没有,不能在某个分支有而其他地方没有。
表达式可以引用外部函数的传值,只能引用值不会改变的变量,另外,如果在表达式中引用变量,变量在外部改变也不合法,局部变量不同名,拉姆达表达式this表示该方法的引用
方法引用 System.out::println 等价于 x->sout(x) this /super::instanceMethod也可以
构造器引用
类名::new. int[]::new. 等价于 x->new int[x]
p q代表int long double PQ代表Int Long Double
内部类
对其他类隐藏 编写回调函数方便 只有内部类可以为private 常规类具有包可见或公共可见
静态域必须是final
不能有static方法
可以为static,没有外围类的引用特权
局部内部类
不能用public或者private声明 可以访问由final修饰的局部变量
匿名内部类没有类名,所以没有构造器,可以把参数传递给父类的构造器