Java學(xué)習(xí)30 2020-03-24

內(nèi)容

1.獲取Class對(duì)象的三種方式
2.創(chuàng)建Class對(duì)象所表示的類的一個(gè)新實(shí)例
3.可變長(zhǎng)參數(shù)

一.獲取Class類型對(duì)象的三種方式

1.第一種方式

   Class c1 = Class.forName("對(duì)象.Employee");

forName需要全名
c1引用保存內(nèi)存地址指向堆中的對(duì)象,該對(duì)象代表的是Employee整個(gè)類

2.第二種方式(更形象)

    Class c2 = Employee.class;//這種方式更形象一點(diǎn)

java中每個(gè)類型都有 class 屬性(注意:是”類型“,不是“類”。int是一種“類型”,但是它不是“類”)

3.第三種方式

    Employee e = new Employee();
    Class c3 = e.getClass();

java中任何一個(gè)對(duì)象都有g(shù)etClass方法
c3是運(yùn)行時(shí)類(e的運(yùn)行時(shí)類是Employee)

4.具體使用示例

import java.util.Date;

public class 測(cè)試程序   {                                                                                                             
                                                                                                                        
    public static void main(String[] args) throws Exception  {
   
        //第一種方式
        Class c1 = Class.forName("對(duì)象.Employee");//forName需要全名
        //c1引用保存內(nèi)存地址指向堆中的對(duì)象,該對(duì)象代表的是Employee整個(gè)類
        
        //第二種方式
        //java中每個(gè)類型都有 class 屬性
        Class c2 = Employee.class;//這種方式更形象一點(diǎn)
        
        //第三種方式
        //java中任何一個(gè)對(duì)象都有g(shù)etClass方法
        Employee e = new Employee();
        Class c3 = e.getClass();//c3是運(yùn)行時(shí)類(e的運(yùn)行時(shí)類是Employee)
        
        //c4,c5c6都代表Date這個(gè)類
        Class c4 = Date.class;//c4代表Date這個(gè)類
        
        Class c5 = Class.forName("java.util.Date");//必須寫類全名,類全名帶有包名
        
        Date d = new Date();
        Class c6 = d.getClass();
        
        Class c7 = int.class;
        //c7代表int類型
    
    }

   
    
}



5.注意點(diǎn)

①因?yàn)镋mployee這個(gè)類在JVM中只有一個(gè),所以c1,c2,c3的內(nèi)存地址是相同的,指向堆中唯一的一個(gè)對(duì)象。
②記?。篺orName需要類的全名。獲取包名可以右鍵類名然后點(diǎn)擊“復(fù)制限定詞“
③Class.forName();會(huì)執(zhí)行靜態(tài)語句塊,也就是說它是把A.class文件裝載到JVM中的過程
而A.class不會(huì)

        //將A.class文件裝載到JVM中的過程
        Class.forName("包名.A");
        //靜態(tài)語句塊會(huì)執(zhí)行
        
        //不會(huì)執(zhí)行靜態(tài)語句塊
        Class c = A.class;

二.創(chuàng)建Class對(duì)象所表示的類的一個(gè)新實(shí)例

獲取Class類型的對(duì)象之后,可以創(chuàng)建該“類”的對(duì)象

1.newInstance()

只能調(diào)用相應(yīng)類的無參數(shù)構(gòu)造方法,如果沒有這個(gè)構(gòu)造方法,則會(huì)報(bào)“實(shí)例化異?!?/strong>這個(gè)錯(cuò)誤

2.使用示例

import java.util.Date;

public class 測(cè)試程序   {                                                                                                             
                                                                                                                        
    public static void main(String[] args) throws Exception  {
   
        Class c = Class.forName("對(duì)象.A");
        
        //創(chuàng)建此Class對(duì)象所表示的類的一個(gè)新實(shí)例
        Object o = c.newInstance();//只會(huì)調(diào)用A的無參數(shù)構(gòu)造方法
    
        
    
    }

   
    
}
 class A{
     A(){
         System.out.println("A的無參數(shù)構(gòu)造方法");
     }
 }

輸出結(jié)果


三.可變長(zhǎng)參數(shù)

1.介紹

就是可以傳遞多個(gè)參數(shù),參數(shù)數(shù)目不定。

2.形式

類似void m(int ... a){}

3.注意點(diǎn)

①方法在調(diào)用的時(shí)候,傳遞的參數(shù)可以是0~N個(gè)。如果可以精確匹配的方法,則調(diào)用該方法,不會(huì)再去執(zhí)行可變長(zhǎng)參數(shù)的那個(gè)方法。
②可變長(zhǎng)參數(shù)可以等同看作數(shù)組,所以也可以傳遞數(shù)組名。
③可變長(zhǎng)參數(shù)只能出現(xiàn)一次,并且只能出現(xiàn)在所有參數(shù)的最后一位

4.使用示例

import java.util.Date;

public class 測(cè)試程序   {                                                                                                             
           
    //1.m1方法在調(diào)用的時(shí)候,傳遞的參數(shù)可以是0~N個(gè)
    public static void m1(int ...a) {
        System.out.println("int...a");
    }
    
    //2.如果可以精確匹配的方法,則調(diào)用該方法,不會(huì)再去執(zhí)行可變長(zhǎng)參數(shù)的那個(gè)方法
    public static void m1(int i) {
        System.out.println(i);
    }
    
    //3.可變長(zhǎng)參數(shù)可以等同看作數(shù)組
    public static void m2(String...args) {
        for(int i = 0;i < args.length;i++) {
            System.out.println(args[i]);
        }
    }
    
    //4.可變長(zhǎng)參數(shù)只能出現(xiàn)一次,并且只能出現(xiàn)在所有參數(shù)的最后一位
    //public static void m3(String...args,int a);這條語句會(huì)報(bào)錯(cuò)
    public static void m3(int a,String ...args) {
        //這個(gè)方法就是合適的
    }
    public static void main(String[] args) throws Exception  {

        m1(2);
    
        m2("我是","中","國","人");
        String[] s = {"我","是","中國人"};
        m2(s);//也可以直接傳數(shù)組名
        
    
    }

   
    
}

運(yùn)行結(jié)果

2
我是





中國人

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 反射庫提供了一個(gè)非常豐富且精心設(shè)計(jì)的工具集,以便能夠動(dòng)態(tài)編寫能夠操縱Java代碼的程序。這項(xiàng)功能被大量應(yīng)用于Jav...
    Steven1997閱讀 712評(píng)論 0 2
  • 5繼承 5.1 類、超類和子類 重用部分代碼,并保留所有域?!癷s-a”關(guān)系,用extends表示。 已存在的類被...
    我快要上天啦閱讀 952評(píng)論 1 3
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,012評(píng)論 0 11
  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法,并非Fa...
    孫小磊閱讀 2,184評(píng)論 0 3
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡(jiǎn)書還為我保存起的...
    Jenaral閱讀 3,144評(píng)論 2 9

友情鏈接更多精彩內(nèi)容