构造器:

构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类无法创建实例。


同一个类中构造器B可直接调用构造器A,通过 this,并且要是第一句。

如果为构造器定义了返回值类型,或者用了 void,编译不会出错,但 Java会把这个所谓的构造器当成方法处理。

子类不能获得父类的构造器,但子类总会调用父类构造器一次。

子类可用 super来调用父类构造器。

子类构造器第一行使用 super显示调用父类构造器,根据 super的实参列表选择调用父类哪一个构造器。


子类构造器没有使用 super及 this 。系统会在执行子类构造器之前,隐式调用父类无参构造器。若父类没有无参构造器则报错。

某个子类构造器第一行使用 this显示调用本类其他构造器,则执行本类其他构造器时隐式调用父类构造器。若父类没有无参构造器则报错。

初始化子类对象时,父类构造器总会在子类构造器之前执行,父类也会一直上溯一直到java.lagn.Object类的构造器,从上网下执行。


子类使用某一没显示指定字段的顺序:

当前方法内是否有该字段--->当前类是否有该字段--->查找该类的直接父类是否有该字段---->该父类的父类一直到java.lang.Object类 。没有的话就编译错误。

创建子类时,不仅为该类的实例变量分配内存,也会为它从父类继承到的所有实例变量分配。如C继承B,B继承A,A中两个,B中三个,C中两个。则会有2+3+2=8个。




super:

super用于某一对象调用它从父类继承到的方法或者字段。不与 static共存。

this:

this关键字总指向调用该方法的对象。所以 this与 static不能共存,因为 static修饰的方法属于类。

形参:

Java只有值传递。

作用域整个方法内有效。

一个方法最多只有一个长度可变的形参,并且要放在最后。

public void test (int a,String... books) books 相当于一个数组,不过写法比数组简洁。test(1,"123","1234")。数组的话则为:test(1,new String[]{"123","1234"})

访问控制符:

private:只能在当前类的内部访问

default:外部类或者同一包内的其他类访问

protected:同一个包内的其他类以及不同包的子类

public:所有类都可以访问

private跟 protected对外部类没意义

方法重载:

同一个类中方法名相同,形参列表不同构成重载。不能根据 返回值 不同,同名,同形参列表来实现重载。


变量:

成员变量:在类范围内定义的变量,无须显示初始化,系统会在这个类的准备阶段或者创建该类的实例时进行默认初始化,规则同数组动态初始化规则。

局部变量:在方法里定义的变量,除了形参,必须显示初始化。

多态:

Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时由实际赋给该变量的对象决定。

初始化块:

在创建Java对象时隐式执行,而且在执行构造器之前执行。可以将多个构造器中相同的代码提取出来。

静态初始化块比普通初始化块先执行。两种初始化块都会上溯到java.lang.Object类,然后往下执行。执行了该类的静态初始化块才完成了该类的初始化过程。

完成了类的初始化该类就在JVM一直存在,所以静态初始化块只会执行一次。

null对象可以访问它所属类的类成员。

final:

final修饰的变量必须显示地指定初始值。

final修饰的类字段,必须在静态初始化块中或声明该字段时指定初始值。

final修饰的实例字段,必须在非静态初始化块、声明该字段时、构造器中指定初始值。但只能赋值一次。

抽象类:

可以有非抽象方法,可以有字段,方法,构造器,初始化块,内部类,枚举类。可以不实现父类的所有方法。

接口:

方法都是抽象方法。可以有字段(必须是常量,有 static 跟 final两个修饰符,)。没有构造器跟初始化块。

接口可以继承接口,类可以实现多个接口,接口写在 extends 类后面,用关键字 implements。

内部类:

外部类不能访问内部类的实现细节,内部类可以访问外部类的所有数据。