Java基础——代码块、接口与内部类
初始化块(代码块):类的第四个成员
1.代码块如果有修饰的话,只能是static
2.分类:
2.1静态代码块:
格式:
static{
}
1.里面可以有输出语句
2.随着类的加载而加载,而且只被加载一次
3.多个静态代码块之间按照顺序结构执行
4.静态代码块的执行要早于非静态代码块
5.静态的代码块只能执行静态的结构(类属性、类方法)
2.2非静态代码块:
格式:
{
}
1.对类的属性(静态的&非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的&非静态的)
2.里面可以有输出语句
3.一个类中可以有多个非静态的代码块,多个代码块间按照顺序结构执行
4.每创建一个类的对象,非静态代码块就加载一次(可加载多次)
5.非静态代码块的执行早于构造器
属性的赋值顺序:
1.默认初始化
2.显式初始化 或 代码块初始化(此处两个结构按照顺序执行)
3.构造器中
4.通过方法对对象的属性进行修改
接口:是一个与类并行的概念,是抽象方法和常量值定义的集合
1.是一种特殊的抽象类,是常量和抽象方法的集合,不能包含变量和一般方法
1)常量 (public static final省去) int i = 12;
2)抽象方法 (public abstract省去) void method();
(实现)class SubClass implements InterfaceA{}
2.接口是没有构造器的
3.接口定义的是一种功能,此功能可以被类所实现(implements InterfaceA)
class CC extends DD implements AA{}
4.实现接口的类,必须要重写其中所有的抽象方法,方可实例化。若此类没有重写所有的抽象方法,则此类仍为一个抽象类
5.类可以实现多个接口。————Java中的继承是单继承
class SubClass implements InterfaceA, InterfaceB{}
6.接口与接口之间也是继承的关系,且可以实现多继承
Interface InterfaceA extends InterfaceB, InterfaceC {}
7.接口与具体的实现类之间也存在多态性
Java中继承的特点:类的继承是单继承,但是可以实现接口,而且可以实现多个接口
但是接口与接口之间的继承可以是多继承的。
接口用法总结:
1.通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
2.通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩展功能。
3.接口主要用来定义规范。解除耦合关系。
接口的应用:
1.代理模式:为其他对象提供一种代理以控制对这个对象的访问
2.工厂方法(FactoryMethod):
概述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
适用性:
1. 当一个类不知道它所必须创建的对象的类的时候
2. 当一个类希望由它的子类来指定它所创建的对象的时候
3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
总结:
FactoryMethod模式是设计模式中应用最为广泛的模式,在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。FactoryMethod解决的就是这个问题,它通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。
内部类:
1.在类的内部再定义类,
2.内部类的分类:成员内部类(声明在类内部且方法外)vs 局部内部类(声明在方法里)
3.成员内部类特点:
3.1是外部类的一个成员:1.可以有修饰符(public、protected、private、缺省)2.static, final、static 3.可以调用外部类的属性、方法
3.2具体类的特点:1.abstract 2.还可以在其内部定义属性、方法、构造器
4.局部内部类
5.关于内部类,掌握3点:
1.如何创建成员内部类的对象
1.创建静态内部类的对象,可以直接通过外部类调用静态内部类的构造器
Person.Dog d = new Person.Dog();
2.创建非静态内部类的对象,必须先创建外部类的对象,通过外部类的对象调用内部类的构造器
Person p = new Person();
Person.Bird b = p.new Bird();
2.如何区分调用外部类、内部类的变量 this.name(哪个类调用的就是哪个类的this),preson.this.name;
3.局部类的使用