装载和初始化


Class c = Class.forName(args[0],true,off.getClass();.getClassLoader(););;
可查看API...............

Class.for(str,true...)
是在装载的时候也进行连接和初始化!!
这时装载的类,其实也进行了初始化!
而Static静态初始化语句是在初始化的时候执行一次!!在接下来的如果还要创建这个类的实例!则不会初始化!!


public interface Assembly
{
public void start();;
}

public class Word implements Assembly
{
static
{
System.out.println("Word static initialization!");;
}

public void start();{
System.out.prinlnt("Word starts");;
}
}

public class Office{
public static void main(String args[]); throws Exception{
Office off = new Office();;
System.out.println("类别准备载入");;
Class c = Class.forName(args[0],true,off.getClass();.getClassLoader(););;
System.out.println("类别准备实例化");;
Object o = c.newInstance();;//这时已经初始化........
Object o2= c.newInstance();;
}
}


执行java Office Word,运行结果如下:
“Loaded Office” 
“类别准备载入”
“Loaded Accembly”
“Loaded Word””
“Word static initialization”
“类别准备实体化”。


但是如果将Office.java中Class.forName(args[0],true,off.getClass().getClassLoader())中的true变为false,再执行java Office Word结果显示为:
“Loaded Office” 
“类别准备载入”
“Loaded Accembly”
“Loaded Word””
“类别准备实体化”
“Word static initialization”。


Class.forName(false)会装载类!但不会初始化!!这时不会执行程序!!看上面的例子!经过试验 Class.forName默认为是true!
例如DriverManager.forName()如果只是重载,而不初始化的话 那么驱动程序就会不会注册!则也就不能正常使用!
在网上看见这个(感觉大错)
Java初始化顺序
1在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)
2,在装载类时,先装载父类A,再装载子类B
3,装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化)
4,装载子类B后,完成静态动作
类装载完成,开始进行实例化
1,在实例化子类B时,先要实例化父类A
2,实例化父类A时,先成员实例化(非静态代码)
3,父类A的构造方法
4,子类B的成员实例化(非静态代码)
5,子类B的构造方法
我感觉有几个 地方不妥!
装载只是接受class文件的字节流,进行解析成为方法区内部的数据结构!装载不一定到使用的时候才开始装载!
在经过验证、准备(类变量的初始化--不是真正的初始化)这时还没有运行程序!
再进行解析,--在常量池里寻找类、字段、引用、接口,把符号引用转换成直接引用
然后进行初始化。[color=red]如果一个类存在超类的话先初始化超类!如果存在类初始化方法,就运行次方法(static块方法)![/color]--初始化过程
上面还说道类只有在new调用时才会被java磊装载器装入!
如果把上面的理解为初始化的话也不对!
初始化有严格的发生时机!
也就是主动使用!1类实例化2使用类的静态方法3调用某个类的或接口的静态字段或者给该字段赋值时!4初始化子类的时候!(这个时候子类初始化所以他本身被要求初始化)
。。。
类实例化--clone newInstance
据自己测试,newInstance是根据构造函数创建实例的!也就是说相当于new
clone 只是初始化 而不调用new
实例化不等于new
一旦类初始化完成后就可以,那么就可以随时使用了!访问方法字段,创建实例!都可以!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值