匿名对象、内部类、匿名内部类、局部代码块、构造代码块、静态代码块

一、匿名对象

  1、定义:

      没有引用变量的对象。比如  new Person()。

 

二、内部类:

  1、定义:定义在类中的类

  2、分类:

    1)成员内部类:

      定义格式:

public class Class1 {
    private class Class2{
        
    }
}

      访问方式: 

        Class2 c2 = new Class1().new Class2();

    2)局部内部类

      定义格式及访问方式:   

    public static void show(){
        class Class3{
            
        }
        new Class3();
    }

      注:内部类不能使用public关键字修饰,内部类的修饰符参考局部变量。

三、匿名内部类

  匿名内部类是最常用到的内部类,它属于局部内部类的一种。

  1、使用场景:

    临时定音鼓IE某一指定类型的子类。

    定义后即刻创建刚刚定义的这个子类对象

  2、作用和定义格式:

    作用:匿名内部类是创建某个类型子类对象的快捷方式。

    格式:   

      new 父类或接口(){
          //进行方法重写
      };

    代码演示:

//已经存在的父类:
public abstract class Person{
    public abstract void eat();
}
//定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量
Person  p = new Person(){
    public void eat() {
        System.out.println(“我吃了”);
}
};
//调用eat方法
p.eat();

 三、局部代码块、构造代码块、静态代码块

  1、局部代码块:   

    局部代码块是定义在方法或语句中   

    特点:

       以”{}”划定的代码区域,此时只需要关注作用域的不同即可

      方法和类都是以代码块的方式划定边界的

    代码演示:

class Demo{
    public static void main(String[] args)    {
        {
                  int x = 1;
                 System.out.println("普通代码块" + x);
        }
        int x = 99;
        System.out.println("代码块之外" + x);
    }
}
//  结果:  普通代码块1  
//       代码块之外99

    2、构造代码块:  

        构造代码块是定义在类中成员位置的代码块

        特点:

          优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作

           每创建一个对象均会执行一次构造代码块。

        代码演示:     

public class Person {
    private String name;
    private int age;
    //构造代码块
    {
        System.out.println("构造代码块执行了");
    }
    Person(){
        System.out.println("Person无参数的构造函数执行");
    }
    Person(int age){
        this.age = age;
        System.out.println("Person(age)参数的构造函数执行");
    }
}

    3、静态代码块     

      静态代码块是定义在成员位置,使用static修饰的代码块。

      特点:

        它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

         该类不管创建多少对象,静态代码块只执行一次。

        可用于给静态变量赋值,用来给类进行初始化。

      代码演示:     

public class Person {
    private String name;
    private int age;
     //静态代码块
    static{
        System.out.println("静态代码块执行了");
    }
}

 

 

posted @ 2018-12-28 11:33  XiaoBBai  阅读(520)  评论(0编辑  收藏  举报