一、匿名对象
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("静态代码块执行了"); }}