欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏开发语言 → 正文
JAVA类初始化顺序,经典例程
07-10-12 15:13:12 作者:半块点心 出处:本站原创

package c06;

import java.util.*;
public class ClassOrderTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new ClassB().display();
  new ClassB().dispA();
  System.gc();
 }

}

class ClassA{
 {
  int x=100,y=getNumber(100);
  System.out.println("ClassA.init block:x="+x+":y="+y);
 }
 
 static{
  int sx=100,sy=getNumber(100);
  System.out.println("ClassA.static block:sx="+sx+":sy="+sy);
 }
 
 int ix=(int)(Math.random()*100);
 final int iy=(int)(Math.random()*100);
 static int iz=getNumber(100);
 int ax=getNumber(100);
 
 static void dispA(){
  System.out.println("ClassA.dispA()");
 }
 static int getNumber(int base){
  System.out.println("ClassA.getNumber(int base)");
  return (int)(Math.random()*base); 
 }
 
 void display(){
  System.out.println("ix="+this.ix);
  System.out.println("iy="+this.iy);
  System.out.println("iz="+this.iz);
  System.out.println("ax="+this.ax);
  dispA();
 }
 
 ClassA(){
  System.out.println("ClassA.constructor");
 }
 protected void finalize(){
  System.out.println("ClassA.destructor");
 }
}

class ClassB extends ClassA{
 static{
  System.out.println("ClassB.static block");
 }
 protected void finalize() {
  System.out.println("ClassB.destructor");
  super.finalize();
 }
 {
  int bx=100;
  System.out.println("ClassB.init block:bx="+bx);
 }
 ClassB(){
  super();
  System.out.println("ClassB.Constructor");
 }
}

/*
 * 运行结果
ClassA.getNumber(int base)
ClassA.static block:sx=100:sy=54
ClassA.getNumber(int base)
ClassB.static block
ClassA.getNumber(int base)
ClassA.init block:x=100:y=74
ClassA.getNumber(int base)
ClassA.constructor
ClassB.init block:bx=100
ClassB.Constructor
ix=78
iy=78
iz=52
ax=82
ClassA.dispA()
ClassA.getNumber(int base)
ClassA.init block:x=100:y=88
ClassA.getNumber(int base)
ClassA.constructor
ClassB.init block:bx=100
ClassB.Constructor
ClassA.dispA()
ClassB.destructor
ClassA.destructor
ClassB.destructor
ClassA.destructor
总结:
1、类只有在使用New调用创建的时候才会被JAVA类装载器装入
2、JAVA类首次装入时,会对静态成员变量或方法进行一次初始化
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从
   本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
*/

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号