黑马程序员技术交流社区
标题:
java 中静态内部类字段的问题
[打印本页]
作者:
Zhang_qian
时间:
2012-5-14 12:54
标题:
java 中静态内部类字段的问题
java 中静态内部类字段什么时候初始化?是在外部类加载的时候就初始化吗?高手帮忙讲解一下,谢谢
作者:
niceBoy
时间:
2012-5-14 13:08
內部類也是類么,應為是靜態,所以應該是在首次用到時初始化一次(僅供參考,個人見解)
作者:
赵茹艳
时间:
2012-5-14 13:20
不是,首先,静态内部类中并不是所有字段都是静态的,也有非静态的,如果字段是静态的,就会在外部类加载的时候分配空间进行初始化,如果不是静态字段就在创建对象的时候分配空间进行初始化。你可以理解成和普通类的字段一样,只不过他是随着外部类的加载而加载的,因为这个内部类是静态的,外部类一加载内部类就加载了。
作者:
It's_Zero
时间:
2012-5-14 13:33
嗯 我认为是在调用的时候初始化 而不是在一开始初始化 因为我下面的这个代码中直接访问报错了
public class InerClassDemo {
public static void main(String[] args){
//new Inner().x; 报错了 不能直接访问这个x
new Inner();
new Inner().show();
new OutClassDemo.InnerClass();
}
static class Inner{
static{
System.out.println("内部类静态代码块" +Inner.x);//输出内部类静态代码块0
}
static int x = 12;
static void show(){
System.out.println(x);
}
static{
System.out.println("内部类静态代码块"+Inner.x);//输出内部类静态代码块12
}
}
}
class OutClassDemo{
static class InnerClass{
static{
System.out.println("外部类中的内部类静态代码块"+InnerClass.x);//输出外部类中的内部类静态代码块0
}
static int x = 20;
static{
System.out.println("外部类中的内部类静态代码块"+InnerClass.x);//输出外部类中的内部类静态代码块20
}
}
}
复制代码
作者:
赵茹艳
时间:
2012-5-14 13:38
错了错了,静态内部类中的字段无论是静态的还是非静态的,都是实例化的时候才会初始化,在这一点上他和普通的类是不一样的
作者:
赵茹艳
时间:
2012-5-14 13:40
之前是在一java编程思想书上看到的,但是实际测试结果是后一种,以实际测试结果为准
作者:
Zhang_qian
时间:
2012-5-14 17:56
It's_Zero 发表于 2012-5-14 13:33
嗯 我认为是在调用的时候初始化 而不是在一开始初始化 因为我下面的这个代码中直接访问报错了 ...
谢谢帮助,我再好好看看
作者:
赵茹艳
时间:
2012-5-14 21:53
java 中静态内部类字段什么时候初始化?这句中的静态内部类字段是指静态内部类本身还是静态内部类的字段呢?如果指的是静态内部类本身,那么并不是在外部类加载的时候就初始化的,他们是独立的。如果指是静态内部类的字段的话,又分为两种情况,一种是静态的字段,静态的字段是在内部类加载的时候初始化的,另一种是非静态字段,非静态字段是在创建内部类实例的时候才会被初始化。也就是说内部类的加载与外部类是相互独立的,没有依赖性。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2