static关键字:
- 修饰变量。该变量成为类变量,该变量一般为所有类中所有成员共享,在该类中其他方法可以直接调用使用,在其它类中可以直接通过类名调用使用。
- 修饰方法。该方法成为类方法,一般工具类中的方法都用static所修饰,方便其他类直接调用工具类中方法使用。工具类构造器一般会做私有化处理。
- 修饰代码块。改代码块就成为静态代码块,一般做初始化使用。
- 被static修饰的成员都会变成类成员,所属为类。一般通过类名.成员名调用
- 静态成员在类的字节码文件加载到方法区的时候就会调用执行:静态变量会被放到堆内存中的静态区中;静态方法在加载到方法区时就会执行;静态代码块也是在字节码文件加载到方法区时就会执行,且只会执行一次。
- 非静态成员与静态成员的区别:静态成员属于类,非静态成员属于对象。静态成员在类的字节码文件加载到方法区时就会执行。非静态成员只有在创建对象时才会被执行。
- 非静态成员与静态成员的联系:静态方法中只能使用静态变量或者静态方法,不能使用非静态变量和非静态方法。非静态方法可以使用静态成员。
- 静态方法中没有this关键字。
- 是什么? 让对象只能被创建一次
- 怎么做?私有化构造器;定义一个类变量记住一个对象;定义一个类方法返回对象
- 继承通过extends关键字使两个类产生关联。
- 子类会可以直接使用父类中的非私有化属性和方法,从而减少重复代码的编写提高编码效率。
- 继承为单继承(只能继承一个父类),但可以多层继承(即可以有爷爷类)。所有类都直接或者间接继承自object类
- 方法重写:子类可以重写父类中的方法(子类把从父类继承下来的虚方法表里面的方法进行覆盖才叫重写)即方法名相同参数列表也相同;为什么要重写?父类中的方法无法满足子类中的需要,比如toString()方法。私有方法静态方法final修饰的方法无法被重写(因为私有的静态的最终的不进虚方法表)。
- 子类构造器:子类构造器中隐含了super()即父类的构造器,子类通过构造器在被创建对象同时会调用构造器中的父类构造器,从而也把父类中的内容构造出来。子类构造器有两种形式,一是无参构造即super(),二是有参构造即super(父类中的非私有成员变量)。其中super()是默认存在的,当父类中没有无参构造,只有有参构造时就会报错,因此类中最好无参构造有参构造都要包含。
- 兄弟构造器:this()调用本类中其他构造器。为什么要用?当需要用到构造器中不完全传参时,可以使用子类构造器。
- this和super必须放在构造器中第一行的位置,且两个不能同时存在。
- 子类创建对象过程:在创建子类对象时,子类的字节码文件会和父类的字节码文件一同加载到方法区,子类对象中的属性包含子类中的属性和父类中的属性。即对象是靠两张设计图一同设计出来的。
- 多态包含对象多态和行为多态(多态的行为也叫向上转型)
- 多态的条件:一、两个类之间存在继承或实现关系,二、父类变量引用子类对象,三、存在方法重写
- 多态的优点:一、解耦合。 二、可以在方法的形参中是用父类类型,方便传入子类类型的对象,以进行方法的多态。
- 劣势:无法使用子类中特有的方法。解决方法向下转型(即强制类型转换)把父类变量在强制转换为原对象类型。在类型转换时可以使用instanceof关键字判断类型是否相同,避免程序出错。
- 修饰变量,当此变量为基本数据类型时,此时该变量为常量,只能被赋值一次,无法被再次赋值;当该变量为引用数据类型是,该变量存储的地址不会发生改变,但其中的内容可以发生改变。
- 修饰方法,此时该方法无法被重写。
- 修饰类,此时该类无法被继承。
- 抽象类是被abstract关键字修饰的类
- 抽象类中可以有成员变量,成员方法,类变量,构造方法,getset方法,但是不可以有类方法。
- 抽象类不能被创建对象,只有被子类继承,通过子类来创建对象。子类继承时,必须重写抽象方法。因此抽象类可以更好地支持多态,因为子类必定重写父类中的抽象方法。
- 模板方法设计模式:第一步:设计模板方法,第二部,设计抽象方法。在模板方法中调用抽象方法,而抽象方法交给子类去重写。可以使用final来修饰模板方法,避免模板被子类重写。
- 接口是interface关键字修饰的类
- 接口中的变量一般都是常量,默认被public static final修饰
- 接口中的方法都是抽象方法。必须在接口实现类中对其进行重写
- 好处:补充了单继承的劣势,可以面向接口编程