java数据的初始化
2015-05-18 20:57
197 查看
public class StaticInitialization {
public static void
main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new
Cupboard();
System.out.println("Creating new Cupboard() in main");
new
Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table=new
Table();
static Cupboard cupboard=new
Cupboard();
}
class Bowl{
Bowl(int
marker){
System.out.println("Bowl("+marker+")");;
}
void f1(int
marker){
System.out.println("f1("+marker+")");
}
}
class Table{
static Bowl
bowl1=new Bowl(1);
Table(){
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int
marker){
System.out.println("f2("+marker+")");
}
static Bowl
bowl2=new Bowl(2);
}
class Cupboard{
Bowl
bowl3=new Bowl(3);
static Bowl
bowl4=new Bowl(4);
Cupboard()
{
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int
marker){
System.out.println("f3("+marker+")");
}
static Bowl
bowl5=new Bowl(5);
}
output:
Bowl(1) //先静态非静态变量 在构造器
Bowl(2)
Table() //先静态非静态变量 在构造器
f1(1)
Bowl(4)
//静态变量和非静态变量先加载静态变量
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
//静态变量只加载一次 下次不会不用加载
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
总结一下对象的创建过程假设有个名为Dog的类;
1.即使没有显式地使用this关键字,构造器实际上也是静态方法,因此,当首次创建类型
为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法/静态域首次被访问时
.java解释器必须查找类路径,以定位Dog.class文件.
2然后载入Dog.class,有关静态初始化的所有动作,
都会执行,因此,静态初始化只在calss对象首次加载的时候进行一次。 3当用 new
Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间
4这块存储空间会被清零,这就自动地将对象中的所有基本类型数据都设置成了默认值,
(对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null
5执行所有出现于字段定义处的初始化动作。6执行构造器。
public static void
main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new
Cupboard();
System.out.println("Creating new Cupboard() in main");
new
Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table=new
Table();
static Cupboard cupboard=new
Cupboard();
}
class Bowl{
Bowl(int
marker){
System.out.println("Bowl("+marker+")");;
}
void f1(int
marker){
System.out.println("f1("+marker+")");
}
}
class Table{
static Bowl
bowl1=new Bowl(1);
Table(){
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int
marker){
System.out.println("f2("+marker+")");
}
static Bowl
bowl2=new Bowl(2);
}
class Cupboard{
Bowl
bowl3=new Bowl(3);
static Bowl
bowl4=new Bowl(4);
Cupboard()
{
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int
marker){
System.out.println("f3("+marker+")");
}
static Bowl
bowl5=new Bowl(5);
}
output:
Bowl(1) //先静态非静态变量 在构造器
Bowl(2)
Table() //先静态非静态变量 在构造器
f1(1)
Bowl(4)
//静态变量和非静态变量先加载静态变量
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
//静态变量只加载一次 下次不会不用加载
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
总结一下对象的创建过程假设有个名为Dog的类;
1.即使没有显式地使用this关键字,构造器实际上也是静态方法,因此,当首次创建类型
为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法/静态域首次被访问时
.java解释器必须查找类路径,以定位Dog.class文件.
2然后载入Dog.class,有关静态初始化的所有动作,
都会执行,因此,静态初始化只在calss对象首次加载的时候进行一次。 3当用 new
Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间
4这块存储空间会被清零,这就自动地将对象中的所有基本类型数据都设置成了默认值,
(对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null
5执行所有出现于字段定义处的初始化动作。6执行构造器。
相关文章推荐
- 【Java基础知识】继承体系中的成员关系,this,super关键字的使用,数据初始化
- java学习(2)数组详解(包括数据的初始化、比较、排序、重要方法)
- 【Java】【TIJ】验证Java对类的基本数据类型的成员的默认初始化结果
- Javaweb 项目启动数据初始化
- Java Int 数据类型,非初始化时的值
- JAVA基本数据类型初始化--笔记
- [Think in Java 笔记] 静态数据(Static data)的初始化
- Java中数据初始化
- JAVA JTable 关于表格初始化设置、表格事件监听及数据更新问题
- java三种初始化数据域方法
- 静态数据的初始化(Think in java P95页代码解析)
- JAVA中初始化数据的方法?
- JAVA中静态数据、非静态数据和构造器初始化的顺序
- Java初始化servlet数据
- 初始化数据库数据到内存(实质保存到java对象)
- Thinking in java 之'数据初始化'
- (1)疯狂java:数据与内存的控制____数组初始化__1.1.2 数组一定要初始化吗
- [Think in java]静态数据的初始化
- java类的初始化块/执行顺序,实例化对象数据赋值
- Java数据初始化顺序