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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

.class getClass () forName() 詳解

2019-11-15 00:09:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
.class getClass () forName() 詳解

類名.class是Class對(duì)象的句柄,每個(gè)被加載的類,在jvm中都會(huì)有一個(gè)Class對(duì)象與之相對(duì)應(yīng),如果要?jiǎng)?chuàng)建新的對(duì)象,直接使用Class對(duì)象的局部class.forName就可以了,不需要用new 類名。

java中,每個(gè)class都有一個(gè)相應(yīng)的Class對(duì)象,當(dāng)編寫(xiě)好一個(gè)類,編譯完成后,在生成的.class文件中,就產(chǎn)生一個(gè)class對(duì)象,用來(lái)表示這個(gè)類的類型信息。獲得Class實(shí)例的三中方式:1.利用對(duì)象調(diào)用getClass()方法獲取該對(duì)象的Class實(shí)例2.使用Class的靜態(tài)方法forName(),用類的名字獲取一個(gè)Class實(shí)例3.運(yùn)用.calss的方式獲取Class實(shí)例,對(duì)基本數(shù)據(jù)類型的封裝類,還可以采用.TYPE來(lái)獲取對(duì)應(yīng)的基本數(shù)據(jù)類型的Class實(shí)例

calss ClassTest{           public static void main(String[] args)           {                   /*                   //利用對(duì)象調(diào)用getClass()方法獲取該對(duì)象的Class實(shí)例                   Point pt=new Point();                                   Class c1=pt.getClass();                   System.out.PRintln(c1.getName());                   //結(jié)果:Point                                   //使用Class的靜態(tài)方法forName(),用類的名字獲取一個(gè)Class實(shí)例                   try                   {                           Class c2=Class.forName("Point");                           System.out.println(c2.getName());           //結(jié)果:Point                   }                   catch(Exception e)                   {                           e.printStackTrace();                   }                   //運(yùn)用.calss的方式獲取Class實(shí)例(類)                   Class c3=Point.calss;                   System.out.println(c3.getName());                   //結(jié)果:Point                   //運(yùn)用.calss的方式獲取Class實(shí)例(基本類型)                   Class c4=int.calss;                   System.out.println(c4.getName());                   //結(jié)果:int                   //運(yùn)用.calss的方式獲取Class實(shí)例(基本數(shù)據(jù)類型的封裝類)                   Class c5=Integer.TYPE;                   System.out.println(c5.getName());                   //結(jié)果:int                                   Class c6=Integer.class;                   System.out.println(c6.getName());                   //結(jié)果:java.lang.Integer                   */                                   //以下結(jié)果是:     before new Point()                                   loading point                                   after new Point()                                   loading Line                           //當(dāng)new Point()的時(shí)候加載這個(gè)類,用forName構(gòu)造實(shí)例的時(shí)候也加載該類。                   System.out.println("before new Point()");                   new Point();                   System.out.println("after new Point()");                   try                   {                           Class.forName("Line");                   }catch(Exception e)                   {                           e.printStackTrace();                   }                           }}class Point(){           static           {                   System.out.println("loading point");           }           int x,y;}class Line{           static           {                   System.out.println("loading Line");           }}

在運(yùn)行期間,如果我們要產(chǎn)生某個(gè)類的對(duì)象,java虛擬機(jī)會(huì)檢測(cè)該類型的Class對(duì)象是否已被加載。如果沒(méi)有加載,java虛擬機(jī)會(huì)根據(jù)類的名稱找到.class文件并加載它。一旦某個(gè)類型的Class對(duì)象已經(jīng)被加載到內(nèi)存,就可以用它來(lái)產(chǎn)生該類型的所有對(duì)象。newInstance()調(diào)用內(nèi)中缺省的構(gòu)造方法。

newInstance()調(diào)用類中缺省的構(gòu)造方法,如果要實(shí)例的對(duì)象中有了自己定義的構(gòu)造方法(除重寫(xiě)的和默認(rèn)構(gòu)造方法相同的構(gòu)造方法外)創(chuàng)建此 Class 對(duì)象所表示的類的一個(gè)新實(shí)例

class ClassTest{          public static void main(String[] args)          {                  if(args.length!=1)                  {                          System.out.println("args.length!=1");                          return;                  }                  try                  {                          Class c=Class.forName(args[0]);                          Point pt=(Point)c.newInstance();                          pt.output();                  }catch(Exception e)                  {                          e.printStackTrace();                  }          }}class Point{          int x;          int y;          static           {                  System.out.println("Loading point");          }          void output()          {                  System.out.println("x="+x+",y="+y);          }}

當(dāng)我們?cè)诿钐崾痉旅婢幾g好該類之后,輸入java ClassTest Point的時(shí)候,此時(shí)會(huì)輸出Loading point和x=0,y=0


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 锡林浩特市| 桐梓县| 得荣县| 萨迦县| 营山县| 牡丹江市| 宜春市| 浑源县| 清苑县| 卢氏县| 平邑县| 长岛县| 鞍山市| 抚州市| 昆山市| 武强县| 大埔区| 淮阳县| 诸暨市| 临潭县| 靖西县| 晋城| 安西县| 隆安县| 达日县| 那曲县| 九江县| 潜江市| 隆安县| 巨野县| 名山县| 龙江县| 扎赉特旗| 江阴市| 玉门市| 天镇县| 太和县| 河源市| 都安| 防城港市| 都安|