Java SE 代码块与内部类
目录
代码块
使⽤ {} 定义的⼀段代码称为代码块。
根据代码块定义的位置以及关键字,⼜可分为以下四种:
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{
}
}
//匿名内部类
interface Greeting {
void greet();
}
public class Test {
public static void main(String[] args) {
//匿名内部类是Java中⼀种特殊的嵌套类,它没有类名,在声明的同时完成实例化。匿名内部类通常⽤
于创建只需使⽤⼀次的类
Greeting greeting = new Greeting() {
@Override
public void greet() {
System.out.println("Hello!");
}
};//
greeting.greet();
}
}
1. 外部类中的任何成员都可以在实例内部类⽅法中直接访问
2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
3. 在实例内部类⽅法中访问同名的成员时,优先访问⾃⼰的,如果要访问外部类同名的成员,必须: 外部类名称.this.同名成员来访问
4. 实例内部类对象必须在先有外部类对象前提下才能创建
5. 实例内部类的⾮静态⽅法中包含了⼀个指向外部类对象的引⽤
6. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。
更多推荐




所有评论(0)