`
zhangyeny
  • 浏览: 30645 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java中class实例化的过程

阅读更多
/**
 * 1.非继承类的实例化顺序: 静态块-->静态字段-->实例块-->实例字段-->构造器
 * 2.当静态field赋值当前类的实例,实例初始化,但这个field下面的静态field不会在这个实例化过程中实例化,为甚?
 * 		可能是这此实例化相当于第二次,所以静态块不执行
 * 3.静态field和静态块在jvm只会被初始化一次,而实例field和实力块每次新对象创建都会被实例化
 * @author wb-zhangye
 *
 */
public class Children {
	static {
		System.out.println("Children static block");
	}
	
	// instance block
	{
		System.out.println("Children instance block");
	}
	
	// constructor
	public Children(){
		System.out.println("Children Constructor");
		System.out.println(CHILDSTATICNUM + ":" + childInstanceNum); 
	}
	
	// static field
	public static final Children CHILD = new Children();
	public static final int CHILDSTATICNUM = getNum();
	private static int getNum() {
		System.out.println("Children static field initialing");
		return 911;
	}
	
	// instance field
	public final int childInstanceNum = getInstanceNum();
	private int getInstanceNum() {
		System.out.println("Children instance field initialing");
		return 110;
	}
}


当我们使用一个类时,会有两种使用方式。实例化此类和直接调用此类的静态字段或者静态方法
首先在此声明一点:block和field的优先级相同,他们执行的顺序跟他们的位置相关
@First  直接实例化
1.非继承类的实例化顺序: 静态块||静态字段-->实例块||实例字段-->构造器
2.当静态field赋值当前类的实例,实例初始化,但这个field下面的静态field
不会在这个实           例化过程中实例化,为甚?
可能是这此实例化相当于第二次,所以静态块不执行
3.静态field和静态块在jvm只会被初始化一次,而实例field和实力块每次新对象创建都会被实例化
@Second  使用此类的静态字段
  按照静态块||静态field的方式初始化
@Third   使用此类的静态方法
  按照静态块||静态field的方式初始化,然后调用静态方法

对于继承体系的类,则是同样的规则,不过静态总是优于非静态。
因为静态方法和field(不管是不是静态)都是编译期确定的,所以不会受到runtime时期的影响。但对于可以被overide非静态方法,如果父类的field或者构造器引用了此方法,此时子类复写的方法万万不能引用子类的非静态field,因为此时子类的非静态field没有初始化,只是默认值。虽然语法上可以这么用,但不是作者的本意
分享到:
评论

相关推荐

    Java泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    基于java的企业级应用开发:Bean的实例化.ppt

    Bean的实例化 在面向对象的程序中,想要使用某个对象,就需要先实例化这个对象。同样,在Spring中,要想使用容器中的Bean,也需要实例化Bean。实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和实例...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java对象实例化

    JAVA类,只要知道了类名(全名)可以创建其实例...  除此之外,还可以利用java.lang.Class类来实现JAVA类的实例化。  1、空构造方法  如果类有空构造方法,如下面的类 public class NewObject { String name;

    java-agent-class-logger:用于记录所有实例化类的简单Java代理

    用于记录所有实例化类的简单Java代理这是查看您实例化的类以及对同一类进行操作的频率的简便方法构建记录器: mvn package测试应用程序: java -javaagent:target/ClassLogger-1.0.0-jar-with-dependencies.jar -...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java经典编程源码基础例程300.zip

    实例070 实例化Class类的几种方式 107 实例071 查看类的声明 108 实例072 查看类的成员 110 实例073 查看内部类信息 112 实例074 动态设置类的私有域 113 实例075 动态调用类中方法 115 实例076 动态实例化类 116 ...

    java编程基础,应用与实例

    1.4 Java程序开发过程 7 1.5 运行第一个Java程序 7 1.6 巩固练习 8 第2章 理解对象与类 9 2.1 什么是对象 9 2.2 什么是类 9 2.3 HelloJava示例的分析 11 2.4 巩固练习 12 第3章 Java语言的基本...

    cglib动态生成java类

    cglib动态生成java类

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    Java开发技术大全(500个源代码).

    errorInit.java 演示变量初始化错误的程序 integerExample.java 演示各种整型变量的使用 isPrime.java 判断素数 leapYearByIf.java 用if语句判断闰年 leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

    Java学习代码实例 JAVA基础,JAVA面向对象,JAVA高级.rar

    生活中我们解决问题就是按照对象化的方式进行的。如果程序也能够按照生活的中的方式来解决问题,那么程序就更符合人类的思维习惯,代码看起来会更易理解、更简单、更易维护。 public class Test { public static ...

    Java用户名密码验证实例.rar

    Java用户名密码验证实例,Java窗口程序,可以学习一下在窗体中如何初始化文本输入框、初始化密码输入框、登录按钮事件处理、初始化按钮事件处理等,并设定不允许用户改变窗口大小,运行效果如截图所示。  public ...

Global site tag (gtag.js) - Google Analytics