代码块
使⽤ {} 定义的⼀段代码称为代码块。
根据代码块定义的位置以及关键字,⼜可分为以下四种:
1. 普通代码块
2. 构造块(有的书上叫实例代码块)
3. 静态块
4. 同步代码块
public class Student{ private String name; private String gender; private int age; private double score; private static String classRoom; // 实例代码块 { this.name = "bit"; this.age = 12; this.gender = "man"; System.out.println("I am instance init()!"); } // 静态代码块 static { classRoom = "bit306"; System.out.println("I am static init()!"); } public Student(){ System.out.println("I am Student init()!"); } public static void main(String[] args) { Student s1 = new Student(); Student s2 = new Student(); } }注意:
1.静态代码块不管⽣成多少个对象,其只会执⾏⼀次
2. 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
3.如果⼀个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执⾏(合并)
4.实例代码块只有在创建对象时才会执⾏
代码块与构造方法的执行顺序:
1.父类的静态代码块
2.子类的静态代码块
3.父类的实例代码块
4.父类的构造方法
5.父类的实例代码块
6.父类的构造方法
内部类
当⼀个事物的内部,还有⼀个部分需要⼀个完整的结构进⾏描述,⽽这个内部的完整的结构⼜只为外 部事物提供服务,那么这个内部的完整结构最好使⽤内部类。在Java中,可以将⼀个类定义在另⼀个 类或者⼀个⽅法的内部,前者称为内部类,后者称为外部类。内部类也是封装的⼀种体现。
内部类的分类
1. 成员内部类(普通内部类:未被static修饰的成员内部类和静态内部类:被static修饰的成员内部类)
2. 局部内部类(不谈修饰符)、匿名内部类 注意:内部类其实⽇常开发中使⽤并不是⾮常多,⼤家在看⼀些库中的代码时候可能会遇到的⽐较 多,⽇常开始中使⽤最多的是匿名内部类。
public class OutClass { // 成员位置定义:未被static修饰 --->实例内部类 public class InnerClass1{ } // 成员位置定义:被static修饰---> 静态内部类 //用来创建节点 static class InnerClass2{ } public void method(){ // ⽅法中也可以定义内部类---> 局部内部类:⼏乎不⽤ class InnerClass5{ } } }1. 外部类中的任何成员都可以在实例内部类⽅法中直接访问
2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
3. 在实例内部类⽅法中访问同名的成员时,优先访问⾃⼰的,如果要访问外部类同名的成员,必须: 外部类名称.this.同名成员来访问
4. 实例内部类对象必须在先有外部类对象前提下才能创建
5. 实例内部类的⾮静态⽅法中包含了⼀个指向外部类对象的引⽤
6. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。