1、枚举类不能自由创建对象,对象在定义类时已经固定下来了
2、基本数据类型的包装类
3、构造器、普通初始化块、静态初始化块
4、初始化某一个类,其所有父类都会初始化
5、类的结构关系:一般->特殊、整体->部分(类里面包含另一个对象的引用)
6、static修饰的成员不能访问没有static修饰的成员
7、没写构造器,使用默认构造器
8、类修饰符:public、final、abstract
9、field修饰符:-->public、protected、private(其中之一)
-->static(被修饰的成员属于类)
-->final
10、方法修饰符:-->public、protected、private(其中之一)
-->abstract、final(其中之一)
-->static(被修饰的成员属于实例)
11、类的成员:feild、方法、内部类、初始化块
12、构造器修饰符:-->public、protected、private(其中之一)
无返回类型、无return
13、static修饰的feild和方法可以通过类或实例调用
14、数组和类都是引用数据类型
15、把所有引用变量都赋值为null,java会自动释放内存
16、引用变量存在栈内(是指针的封装),对象存在堆内
17、this是在构造器或方法内指向调用对象的引用变量
18、java允许不用this,直接调用同一个对象中的其他方法
19、在static方法中调用另一个普通方法,只能重新创建一个对象(如new aaa.info(),调用方法后,无引用指向这个对象,被回收,只使用一次),不能用this,因为static方法属于类方法,不属于对象,所以不能依赖引用变量(同第6条)
20、this可作为方法的返回值
21、java中参数传递都是值传递,引用也一样
22、static方法可调用同一类中static方法
23、可变形参相当于数组,要在最后一个形参类型后加三个点
24、递归要向已知方向递归
25、方法重载:形参不同
26、重载形参长度可变的方法,要调用形参可变的方法,可传入数组形式的参数,但不推荐
27、成员变量(包括类变量、实例变量)无需显示地初始化;局部变量形参不要,方法局部变量和代码块局部变量都要初始化,否则不能用
28、成员变量之间、局部变量之间不可重名;成员变量和局部变量可以重名
29、package、import、import static
30、同一个包的类可以在不同的位置,只要用package标示即可,并且class要在相应目录下
31、访问控制符:private:同类;default:同包;protected:不同包的子类;public:所有
32、外部类只有default和public
33、一个java文件中至多只能有一个public类
34、通过this(*,*)和super(*,*)可以在构造器中调用其他构造器,但只能在构造器中,并且为第一条语句(因此只能调用一次)
35、java子类不能获得父类的构造器
36、若不指定父类,默认父类为java.lang.Object
37、重写遵循“两同两小一大”原则(子类比父类):方法名,形参;返回值,异常类;访问权限
38、重写的两个方法必须同时是类方法或实例方法
39、子类对象无法访问父类中被重写的方法,只能在子类方法中用super(实例方法)或父类名(类方法)来调用被重写的方法
40、this和super都不能用在static方法中
41、子类继承父类方法,子类和父类的方法可发生重载
42、父类的feild会被子类的同名feild隐藏,但是也会分配内存,可通过super调用
43、若子类没有显式地调用父类构造器,系统会先上溯执行父类地无参数构造器,因此每个类最先执行的是java.lang.Object的构造器
44、编译时类型和运行时类型不同引发多态,编译时表现出父类地行为特征,运行时表现出子类的行为特征
45、引用类型的转换只能在有继承关系的两个类型之间进行,向上转型由系统自动完成,父类转为子类要用强制类型转换,而且要在转换前加instanceof进行判断,否则会出现classCastException异常
46、instanceof前后便已是类型要相同或者有父子继承关系,否则编译不通过
47、不要在构造器中调用可能被子类重写的方法
48、子类要求增加额外的属性和方法
49、不想被继承,可以用final修饰类,private修饰构造器,另外提供一个静态方法来创建实例
50、final方法不能被重写
51、尽量使用private修饰feild和方法
52、继承和组合都能实现类的复用,继承体现的是“是”的关系,组合体现的是“有”的关系
53、组合要在新类中用private修饰被嵌入旧类对象的feild。
54、实例初始化顺序(new时执行):分配feild内存->父类初始化块或声明feild时指定的初始值->父类构造器->子类初始化块或feild初始化->子类构造器
55、初始化块只能用static修饰,这时是对整个类进行初始化
56、类初始化顺序(在第一次用到该类时执行,之后一直存在,不再执行):分配静态feild->父类静态初始化块或静态feild初始化->子类静态初始化或静态feild初始化块
57、object类方法:toString、equals
58、指向null的引用变量也可以访问static类成员
59、单例类:定义一个private static变量缓存创建的实例;构造器用private修饰;定义一个public static方法,用于创建实例(里面可加自定义控制,用于只创建一个实例),外部通过这个方法来获取实例
60、final修饰的变量一旦被赋初值,就不能被改变(由于系统赋给feild的初值无意义,因此系统不会对其隐式初始化,java规定类feild要在声明或静态初始化块中人为初始化;实例feild要在实例初始化块或声明或构造器中初始化)
61、java会使用常量池来管理曾经用过的字符串直接量,之后同样的字符串变量会指向同一块内存
62、在编译时就能确定初值的final变量相当与c语言中的宏变量
63、不可变类:feild用private final修饰,只提供get方法,不提供set方法;引用类型的feild指向的对象是可变的,要想办法保护该feild指向的对象不会被修改
64、缓存实例的不可变类(要多次重复使用时):private修饰构造器;private 缓存数组,用来存储实例;valueOf方法来获取实例(内部用new创建)
65、Integer包装类就是缓存实例的不可变类,但同时也可用new创建
66、有抽象方法的类只能被定义为抽象类;抽象类中可以没有抽象方法
67、抽象类不能被实例化
68、含有抽象方法的类(包括直接定义;继承父类的抽象方法,并且没有完全实现;实现一个接口,没有完全实现其抽象方法)只能被定义为抽象类
69、(private、static、final)与abstract不能同时使用
70、利用抽象类可以更好的发挥多态的优势,无需强制转换为子类
71、抽象类相当于模板;接口相当于规范(不同模块间的耦合标准、不同程序间的通信标准)
72、接口public/default interface,可以继承多个父接口
73、接口没有构造器和初始化块
74、接口修饰符([]中为系统默认,可省略):[public static final] feild(常量),只能在定义时指定默认值;[public abstract] 方法,无静态方法;[public static] 内部类、接口、枚举类
75、接口可看成特殊的类,因此一个java文件中最多只能有一个public接口,并且若定义了public接口,则该java文件必须与该接口同名
76、子类实现接口里的方法都必须用public
77、实现类对象可以直接赋给父接口引用变量
78、所有接口类型的引用变量都可以赋给object类型的引用变量(因为java知道接口类型引用变量会指向一个实现类的对象(显式或隐式子类),而object引用变量可以指向任何对象)
79、设计模式:简单工厂模式(将接口作为组合的一部分传入,这样当被组合的类修改时,不用将所有组合类都进行修改,降低耦合性);命令模式(采用接口作为方法形参类型,在运行时传入想要的代码块进行执行)
80、内部类离开了外部类没有意义;可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节(如成员变量),只能通过类名或实例名来调用;匿名内部类用于创建只需使用一次的类
81、成员内部类是类成员,拥有类成员的属性
82、内部类在外部类中使用跟普通的类相似;在外部类以外使用时,完整类名为“[包名].外部类名。内部类名”
83、非静态内部类对象必须寄存在外部类对象里,因此要创建内部类对象,必须先创建外部类对象,再使用“外部类对象实例.new 内部类”来调用内部类构造器创建内部类
84、在外部类以外的地方创建非静态内部类的子类时,要调用父类构造器,而内部类的构造器需要外部类的实例来调用,所以要向内部类子类的构造器中传入一个外部类的实例,然后用“外部类.super”调用其父类(内部类)的构造器。
85、子类的内部类和父类的内部类可以同名,但不是重写,因为前面还要加上外部类名来限制
86、静态内部类的子类不用调用父类地构造器,所以不用传入外部类实例,平时尽量使用静态内部类
87、局部内部类是在方法中的局部成员,局部成员不能用访问控制符和static修饰
88、局部内部类的子类定义、变量定义、创建实例都只能在所在的方法中进行
89、匿名内部类不能是抽象类,因为在创建类时,同时创建了类的实例;不能定义构造器,因为没有类名,但是可以有实例初始化块
90、匿名内部类可用于命令模式
91、匿名内部类定义的格式为:"new 父类构造器(形参) {类体部分}" 或 "new 实现接口() {类体部分}"
92、匿名内部类要访问外部类的局部变量,要将局部变量用final修饰,否则报错
93、非静态内部类可以当做闭包使用,可当做回调外部类方法的入口
94、用enum定义的枚举类默认继承了java.lang.enum类(实现了java.lang.serializable和java.lang.comparable接口),而不是Object类;
默认使用final修饰,不能被继承;构造器默认用private修饰;所有枚举实例都要在第一行显式地列出,用逗号隔开,系统会自动添加public static final前缀;所有枚举类都有values方法返回所有枚举实例;swich语句的case表达式中可直接使用枚举值的名字,而不用添加枚举类名
95、枚举类若包含抽象方法,系统会默认使用abstract(而非final,且不能人为指定)来修饰类名(但依然不能作为父类),因而可以再定义枚举值时将枚举类当做父类来定义匿名内部类,从而实现每个枚举值都有不同的类体,此时枚举值是这些匿名内部类的实例
96、 枚举类通过实现接口或自己定义抽象方法,都可以使用匿名内部类来创建枚举值
97、垃圾回收机制只负责回收堆中的对象;在回收之前都会调用该对象的finalize()方法
98、垃圾回收状态:可达状态->可恢复状态(调用finalize之前)->不可达状态
99、强制垃圾回收:System.gc()、Runtime.getRuntime().gc()通知系统,但不会立即执行finalize();System.runFinalization()、Runtime.getRuntime().runFinalization()让系统强制调用finalize,无需等待
100、
阅读(1031) | 评论(0) | 转发(0) |