国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java 實例化類的方法

2019-11-06 06:51:13
字體:
來源:轉載
供稿:網友

學習java的同學注意了!!! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!

  Java中,類的實例化方法有四種途徑:

1)使用new操作符

2)調用Class對象的newInstance()方法

3)調用clone()方法,對現有實例的拷貝

4)通過ObjectInputStream的readObject()方法反序列化類

1.ClassInstance.java

復制代碼
 1 import java.io.*; 2  3 class ClassInstance implements Cloneable, Serializable { 4     PRivate String str = "測試..."; 5     public void fun(){ 6         System.out.println(str); 7     } 8     public ClassInstance(String str){ 9         System.out.println("有參類的實例化");10         this.str += str; 11     }12     public ClassInstance(){13         System.out.println("無參類的實例化");14     }15     public Object clone(){16         return this;17     }18 }復制代碼

2.ClassInstanceTest.java

復制代碼
 1 import java.io.*; 2 import java.lang.reflect.*; 3  4 public class ClassInstanceTest{ 5     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, 6            IllegalaccessException, IOException,InvocationTargetException, NoSuchMethodException{ 7         //第一種類的實例化方式 8         ClassInstance ci01 = new ClassInstance("01"); 9         ci01.fun();10 11         //第二種類的實例化方式12         ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance();13         ci02.fun();14 15         //第三種類的實例化方式16         ClassInstance ci03 = (ClassInstance) ci01.clone();17         ci03.fun();18 19         //第四種類的實例化方式20         FileOutputStream fos = new FileOutputStream("ci.tmp");21         ObjectOutputStream oos = new ObjectOutputStream(fos);22         oos.writeObject(ci01);23         oos.close();24         fos.close();25         26         FileInputStream fis = new FileInputStream("ci.tmp");27         ObjectInputStream ois = new ObjectInputStream(fis);28         29         ClassInstance ci04  = (ClassInstance) ois.readObject();30         ois.close();31         fis.close();32         33         ci04.fun();34         System.out.println("--------------------額外測試--------------------");35         ClassInstance ci05 = null;36         //額外的思考 在第二種類實例化的方式中有沒有一種方法實現有參數的構造方式37         //獲得類的構造信息38         Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();39         //找到我們需要的構造方法40         for(int i=0;i<ctor.length;i++ ){41             Class[] cl = ctor[i].getParameterTypes();42             if(cl.length == 1){43                 //實例化對象44                 ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"});45             }46         }47         ci05.fun();48     }49 }復制代碼

 

 

3.輸出結果

復制代碼
1 有參類的實例化2 測試...013 無參類的實例化4 測試...5 測試...016 測試...017 -------------------額外測試--------------------8 有參類的實例化9 測試...05復制代碼

 

  除了這幾種情況可以實例化一個Java類對象外,隱式調用實例化也是利用了已上集中情況。例如常見的方法:

復制代碼
1 public class ClassInstance{2   public ClassInstance(){3   }4     public ClassInstance getInstance(){5     return new ClassInstance();6   }7 }復制代碼

  

  通過觀察結果,我們發現無論哪一種方式必須經過的一步---調用構造方法。無論怎樣構造函數作為初始化類的意義怎樣都不會改變。

學習Java的同學注意了!!! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 交城县| 柏乡县| 红桥区| 轮台县| 乌兰浩特市| 翁源县| 四川省| 郑州市| 鄂温| 青海省| 项城市| 鲁山县| 壤塘县| 夏邑县| 珠海市| 子洲县| 绥棱县| 襄汾县| 富锦市| 松阳县| 乌审旗| 南木林县| 保定市| 湖南省| 云浮市| 临猗县| 新津县| 蓬溪县| 松潘县| 平利县| 平定县| 禹城市| 马尔康县| 南江县| 滨州市| 安平县| 宁武县| 铜鼓县| 阿拉尔市| 舞阳县| 宁蒗|