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.局部类的使用

posted @ 2017-11-07 21:21  SkyeAngel  阅读(317)  评论(0编辑  收藏  举报