加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Java类的实例化探究

发布时间:2021-12-15 11:59:44 所属栏目:PHP教程 来源:互联网
导读:Java类的实例化(instantiation)具有显性的和隐性的区别。 一般编程时,我们锁使用new的方法实例化,这是最简单直接的显性实例化。另外还有三种实例化,分别为反射机制中的newInstance()方法,类的clone()方法 和 解串行化使用的ObjecInputStream中的getObjec

Java类的实例化(instantiation)具有显性的和隐性的区别。
 
一般编程时,我们锁使用new的方法实例化,这是最简单直接的显性实例化。另外还有三种实例化,分别为反射机制中的newInstance()方法,类的clone()方法 和 解串行化使用的ObjecInputStream中的getObject()方法。
 
而隐性的实例化则出现在java程序的整个生命周期中,包括String 、 Class ,StringBuffer 或者StringBuilder的实例化。
 
详细内容如下:
 
 
 
显性的实例化:
 
1.直接使用new关键字创建新的对象。
 
调用相应的构造函数完成实例化。(类中的非静态成员变量如果有初始化语句,都会被隐式的加入到构造函数中)代码如下:
 
public class Test  {  
  
    String strA = "xyz";  
    String strB ;  
      
    public Test(String str){  
        strB = str ;  
    }  
    public static void main(String[] args){  
            Test t = new Test("abc");  
    }  
      
}  
在eclipse中装了ASM bytecode插件后,观察.class文件中的构造函数对应的字节码如下:
INVOKESPECIAL Object.<init>() : void  
   ALOAD 0: this  
   LDC "xyz"  
   PUTFIELD Test.strA : String  
   ALOAD 0: this  
   ALOAD 1: str  
   PUTFIELD Test.strB : String  
   RETURN  
关键在于LDC"xyz"这条指令,明显可以看出,这是用于strA初始化的字符串。
 
由此我们可以归纳出,在没有调用 本类中其他的构造函数的情况下,每次类的构造函数中都会按如下顺序进行:
 
a)隐式(或显性)的调用父类的构造函数,
 
b)然后执行写在构造函数外的成员变量的初始化赋值
 
c)最后再执行构造函数中的命令。
 
如果是有显性的调用本类其他构造函数(必须是放在构造函数第一步执行),那么对于这个构造函数,处理过程就简单些了:
 
a)调用那个构造函数。
 
b)执行之后的代码。
 
public class Test  {  
  
    String strA = "xyz";  
    String strB ;  
      
    public Test(String str){  
        this();  
    }  
    public Test(){  
        strB = "mno";  
    }  
      
    public void print(){  
        System.out.println(strB);  
    }  
      
    public static void main(String[] args){  
            Test t = new Test("abc");  
            t.print();  
    }  
      
      
}  
执行结果为
mno  

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读