基础笔记2(对象)
1。内存模型:
栈:自动分配连续的空间,后进先去,局部变量
堆:存放new出的对象。
方法区(也是一种堆):类的代码,静态变量,常量
2.构造方法和方法名和类名一致。
3.重载,方法参数类型,个数,顺序,
注意一个问题(基本数据数据类型的自动提升类型:没有对应的才会提升到存在的:比如short 到int)
4.非静态可以调用静态的,静态不能调用非静态,(因为创建的顺序(存在顺序))。
5.this.当前类,构造方法。类似的关键字:super(总是在子类构造器默认第一行(隐式的存在)
6.toSting():返回的是类名和16进制的hash值
7.equals(ob):this==ob即当前对象的比较。(也是tostring()即地址的比较)
8.final :
修饰变量,即是常量,不能修改
修饰方法,不能被重写
修饰类。不能被继承。
9,继承,封装,多态
10.封装:private(类中) default(包中) protect(包和子类中) public(所以类)
成员一般private,get set 使用public 设置,boolean 类型is set.
11多态的基本特征:
继承,重写,父类引用指向子类对象
11.1重写:子类的方法的权限大于等于父类;方法的返回类型和异常小于等于父类。
12:instanceof 判断对象是某类的实例
13:多态补充:
非重写内的方法调用方法,调用的方法是重写的方法。
14.抽象方法:没有方法体的方法。
包含抽象方法的类是抽象类。应用于子类需要重写方法。
15接口:只有常量和抽象方法(一种规范,和实现分离)
默认变量是 public static final
16.回调(callback)或者钩子(hook);模板模式
利用多态将父类调用的方法写好。然后子类重写父类调用的方法,传入父类对象。
m(A a){
1....
2......
a.print();
}
也可以
Interface A {
print(){
}
class B implement A{
print(){}
}
main(){
m(new B());//回调
}
或
m(new A(){
print();});//回调方法
17.内部类:更好的封装
非静态内部类,不能有静态成员,因为内部类对象本身是依赖外部类存在的,和设计理念不符。
但是可以有常量(final static),但必须是数值常量。
非静态内部的调用
外部类.内部类 类名=new 外部类().new 内部类();
内部类可以直接获取外部类的变量
如果有重名,内部的变量获取 this.变量。 外部变量获取:外部类名.this.变量
静态内部类和外部类没有太多的联系(像属于包的关系)
一种方式:mport 路径.外部类.内部类。(像是外部类包下类)就可以平常一样定义此静态内部类了
二种方式:外部.内部类 类名=new 外部类.内部类();
静态内部类和静态方法一样都只能使用外部类的静态属性。
方法内部类:比如方法中加个线程对象
内部对象使用方法中的变量时候,该变量必须是final的即变成常量了,直接复制到对象中。
原因是:生命周期不一样,方法执行完,方法中的变量从栈内删了,而对象可能还在被使用,那么就不能获取到那个变量了。造成生命周期不一致了。
而对于引用对象也是,不加final可能出现,引用被覆盖,然后调用引用得到的是新对象了,方法执行完,内部中本来需要的那个对象没了使用被清理掉了。

浙公网安备 33010602011771号