`
mengzhiang
  • 浏览: 22871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 初始化(一)

阅读更多

最近复习JAVA基础,学习Java初始化,总结如下。

java类的加载 重点:
1:静态成员变量只加载一遍。
2:静态成员不能是局部变量。
3:类先加载内部成员 然后 执行构造方法。

4:先加载静态内部成员,然后加载非静态的内部成员。

 

总结下对象的创建过程,假设有一个名为Dog的类

1:当new Dog时 java解释器查找类路径,定位Dog.class文件。

2:载入Dog.class 文件,创建一个Class对象,并执行所有的静态初始化(只执行一遍)。

3:new Dogs创建对象,为Dog对象在堆上分配足够的内存。

4:这块存储空间清零,自动的将Dog对象中的所有基本类型设置成默认值,引用设置成null。

5:执行所有出现于字段定义处的初始化动作。

6:执行构造器。

 

下面是试验代码。

import static com.study.Print.print;

class Bowl{
	Bowl(int marker){
		print("Bowl("+marker+")");
	}
	void f1(int marker){
		print("f1("+marker+")");
	}
}

class Table {
	static Bowl bowl1 = new Bowl(1);
	Table(){
		print("Table()");
		bowl2.f1(1);
	}
	void f2(int marker){
		print("f2("+marker+")");
	}
	static Bowl bowl2 = new Bowl(2);
}
class Cupboard{
	Bowl bowl3 =  new Bowl(3);
	static Bowl bowl4 = new Bowl(4);
	Cupboard(){
		print("Cupboard()");
		bowl4.f1(2);
	}
	void f3(int marker){
		print("f3("+marker+")");
	}
	static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialzation {
	public static void main(String[] args) {
		print("Create new Cupboard() in main");
		new Cupboard();
		print("create new cupboard in main");
		new Cupboard();
		table.f2(1);
		cupboard.f3(1);
	}
	
	static Table table = new Table();
	static Cupboard cupboard = new Cupboard();
}

/**解答
 * 首先加载StaticInitialzation类,初始化类中的两个变量。
 * 引起加载Table和Cupboard。
 * 加载Table,引起加载bowl1和bowl2,然后调用Table的构造函数Table(),然后执行bowl2的f1方法。
 * 加载Cupboard。首先加载静态的bowl4和bowl5,然后加载非静态的bowl3,然后构造函数,然后bowl4的方法。
 * 然后进入main函数。
 * 创建一个新的Cupboard实例。只加载非静态的Bowl3,不在加载静态的Bowl4和5,静态的只加载一次。
 * 执行table的f2(1)方法和cupload的f3方法。
 * 
 *                    StaticInitialzation
 *                Table            Cupboard
 *   bowl1 bowl2 Table() f1(1)   Bowl(4) Bowl(5) Bowl(3) Cupboard() f1(2)
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Create new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
create new cupboard in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
 */

 

 

0
5
分享到:
评论
2 楼 mengzhiang 2011-08-28  
yangke830 写道
think in java里的代码?

呵呵,是的,最近复习下java基础,就看了Thinking in java 收获真不少。
1 楼 yangke830 2011-08-23  
think in java里的代码?

相关推荐

    java数组初始化详解

    java 数组初始化 详解 doc

    Java初始化块Java初始化块.doc

    Java初始化块Java初始化块

    java 初始化与方法

    源代码以及word文件 博文链接:https://zsl131.iteye.com/blog/624175

    java代码的初始化顺序demo

    一个java代码初始化具体过程的的demo

    45.java数组动态初始化.zip

    45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip...

    44.java数组静态初始化.zip

    44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip...

    java程序初始化顺序

    介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助

    6种方法初始化JAVA中的list集合

    主要介绍了6种方法初始化JAVA中的list集合,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    java初始化和清理

    Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,程序是作为启动过程的一部分立刻被加载,而Java 的 类加载只在需要使用程序代码时才会被加载(每个...

    Java中对象的初始化

    《Java程序设计基础教程》按内容分成五篇:Java 语言入门篇、面向对象篇、数据流应用篇、Java GUI编程篇和高级应用篇,共有二十四讲组成。

    java语法\Java数组声明、创建、初始化

    java语法\Java数组声明、创建、初始化

    java学习之神奇初始化

    如果有static,即静态成员定义,首先初始化static的变量,如,在类Cups中c3在c2前面,可是在输出的结果中,你可以发现,c2是在c3前执行的,这就是因为,所有的static都在第一时间被初始化。

    Java初始化顺序1

    Java初始化顺序1

    Java初始化顺序

    作为一名程序员必须知道Java初始化顺序......

    java中对象创建、初始化、引用

    介绍java对象的创建、初始化、和引用。并分析一下JAVA中对象创建和初始化过程中涉及的相关概念问题。

    基于java的开发源码-ejbCreate函数用于初始化一个EJB实例.zip

    基于java的开发源码-ejbCreate函数用于初始化一个EJB实例.zip 基于java的开发源码-ejbCreate函数用于初始化一个EJB实例.zip 基于java的开发源码-ejbCreate函数用于初始化一个EJB实例.zip 基于java的开发源码-...

    52.java二维数组静态初始化.zip

    52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化....

    51.java二维数组动态初始化.zip

    51.java二维数组动态初始化.zip51.java二维数组动态初始化.zip51.java二维数组动态初始化.zip51.java二维数组动态初始化.zip51.java二维数组动态初始化.zip51.java二维数组动态初始化.zip51.java二维数组动态初始化....

    java类变量初始化顺序

    详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。

    深入Java初始化.pdf

    深入Java初始化.pdf

Global site tag (gtag.js) - Google Analytics