1、初始化块总在构造器执行之前被调用
2、静态初始化块用于初始化类,在类初始化阶段被执行
3、如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类
4、一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器(比如默认的构造器将失效)
5、修饰类或者方法的修饰符,final和abstract 只能选择其一,final不可改变,abstract只能由后代实现
6、一个字节长度为8位,char类型为2个字节,char类型使用单引号括起来,如果把一个0~65535范围内的int整数赋给char类型,系统会自动把这个int类型 当成char类型来对待。
char t1=97;//可以赋予0到65535之间,输出相应字符,如果赋予65536,则报错。
System.out.println(t1);//输出 a
char t2= 'a'; System.out.println(t2);//a System.out.println((int)t2);//97 char t3='你'; System.out.println(t3);//你 System.out.println((int)t3);//20320
7、构造器不能声明返回值类型(包括void),如果声明了,那么编译不会报错,但是Java会把这个构造器当成一个方法来处理–它就不再是一个构造器。
8、如果堆内存里的对象没有被任何栈内存中的引用所指向,那么将会被垃圾回收,所以想回收某个对象,将之赋值为null即可
9、this 关键字总是指向调用该方法的对象,在构造器中引用该构造器正在初始化的对象,在方法中引用调用该方法的对象。
10、方法重载:java允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。
11、在局部变量覆盖成员变量时,依然可以在方法中显示指定类名和this作为调用者来访问被覆盖的成员变量,这使得编程更加自由。不过大部分时候还是应该尽量避免这种重名的情形。
12、栈内存中的变量无须系统垃圾回收,往往随方法或代码块的运行结束而结束,因此,局部变量的作用域是从初始化该变量开始,直到该方法或代码块运行完成而结束。局部变量只保存基本类型的值或者对象的引用。
13、成员变量扩大了变量的生存时间,这将导致更大的内存开销。
扩大了变量的作用域,这不利于提高程序的内聚性。
14、缩小局部变量的作用范围,从而减少这个变量在内存里停留的时间,减小了内存开销,从而提高程序的运行性能。
15、良好的封装,有两个方面:
将对象的成员变量和实现细节隐藏起来,不允许外部直接访问。
把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。
16、符合javaBean规范的类:一个java类的每个实例变量都被使用private修饰,并为每个实例变量都提供了public修饰的setter和getter方法。
17、java的常用包
java.long:包含了java语言的核心类,如String,Math,System,Thread等,这个包无须手动导入
java.util: 这个包下包含了java大量的工具类/接口和集合框架类/接口,如Arrays,List,Set等
java.NET : java网络编程
java.io: java输入/输出类
java.text:java格式化相关的类
java.sql: java进行jdbc数据库相关的类和接口
java.awt:抽象窗口工具集,
java.swing:Swing图形用户界面编程的相关类/接口
18、java类必须包含一个或一个以上的构造器。当创建一个对象时,系统为这个对象的实例变量进行默认的初始化,这种初始化,把所有的数值类型的实例变量设为0,布尔类型的实例变量设为false,引用类型的实例变量设为null。
19、如果一个类里提供了多个构造器,就形成了构造器的重载。使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句。例如:this(“fale”);
如果this的调用不放在第一行,eclipse会报错。原因不明。
20、关于继承extends,子类扩展了父类,可以获得父类的全部成员变量和方法,但不能获得父类的构造器。
java.lang.Object类是所有类的父类。
21、子类包含与父类同名方法的现象被称为方法重写(override),要遵循:两同两大一小。即:方法名相同,形参列表相同;子类方法返回值类型应比父类方法的返回值类型更小或相等,子类方法声明抛出的异常类,应比父类方法声明抛出的异常类更小或相等;一大,指子类方法的访问权限应比父类方法的访问权限更大或相等。如果父类方法具有private权限,则子类无法访问和覆写。
22、可以使用super(被覆盖的是实例方法)或者父类类名(被覆盖的是类方法,super不能调用父类的类方法或变量)作为调用者来调用父类中被覆盖的方法。
23、如果在构造器中使用super,则super用于限定该构造器初始化的是该对象从父类继承得到的实例变量,而不是该类自己定义的实例变量。
如果在某个方法中访问名为a的变量,但并没有显示指定调用者,那么系统查找a的顺序为:
1)、该方法中是否有局部变量a
2)、该类中是否有成员变量a
3)、父类中是否有成员变量a,依次上朔所有父类,知道Object为止。
24、子类不会获得父类的构造器,但子类构造器可以使用super调用父类构造器。但super调用也必须出现在构造器第一行,所以super和this不会同时出现。
另外,不管是否使用super调用来执行父类构造器,子类构造器总会调用父类构造器一次。因为系统会在执行子类构造器前,隐式调用父类无参数的构造器,父类会先调用更父类的构造器,所以最先执行的总是java.lang.Object类的构造器。
25、多态
java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
当把一个子类的实例对象直接赋给父类引用变量时,这个引用变量的编译类型是父类,运行类型是子类,所以当运行时调用该引用变量的方法时,总是表现出子类的方法,于是:相同类型的变量,调用同一个方法时,呈现多种不同的行为特征,这就是多态。
与方法不同的是,变量则不具有多态性,调用时依然是父类的变量值。
引用变量在编译阶段只能调用其编译类型所具有的方法,但运行时则执行它运行时类型所具有法方法,因此,多态时,可通过反射来调用父类所不具有的子类法方法。
26、继承的坏处,破坏封装,相比之下,组合的封装性更好,但是代码繁琐。
27、组合和继承的区别
来源:https://www.cnblogs.com/lakeslove/p/6925602.html