=============================封裝類(lèi)===============
針對(duì)八種基本數(shù)據(jù)類(lèi)型定義的相應(yīng)的引用類(lèi)型-封裝類(lèi)(包裝類(lèi),包裹類(lèi))
基本數(shù)據(jù)類(lèi)型????????? 封裝類(lèi)
?boolean?????????????? Boolean
?byte????????????????? Byte
?short???????????????? Short
?int?????????????????? Integer
?long????????????????? Long
?char????????????????? Character
?float???????????????? Float
?double??????????????? Double
所有的封狀類(lèi)都是一個(gè)只讀類(lèi)(不能修改的).針對(duì)沒(méi)個(gè)基本類(lèi)型我們只能建立一個(gè)這讀的。
class Test
{
?public static void main(String[] args)
?{
??int i=3;
??Integer in=new Integer(i);
??int j=in.intValue();
??System.out.println(j);
??String str=in.toString();? //把Integer對(duì)象轉(zhuǎn)換為String類(lèi)型
??System.out.println("str="+str);
??
??String str1="123";
??System.out.println(Integer.valueOf(str1));? //把String類(lèi)型轉(zhuǎn)換為Integer類(lèi)型
??
??boolean b1=false;
??Boolean b=new Boolean(b1);
??String s1=b.toString();
??System.out.println(s1);
??
??String s2="NO";
??System.out.println(Boolean.valueOf(s2));
?}
}
*****************Class*********************
1> 在Java中,每個(gè)class都有一個(gè)相應(yīng)的Class對(duì)象。也就是說(shuō),當(dāng)我們編寫(xiě)一個(gè)類(lèi),編譯完成后,在生成
?? 的.class文件中,就會(huì)產(chǎn)生一個(gè)Class對(duì)象,用于表示這個(gè)類(lèi)的類(lèi)型信息。
2> 獲取Class實(shí)例的方法有三種:
?? <1>利用對(duì)象調(diào)用getClass()方法獲得該對(duì)象的Class實(shí)例。
?? <2>使用Class類(lèi)的靜態(tài)方法forName(),用類(lèi)的名字獲取一個(gè)Class的是實(shí)例。
?? <3>運(yùn)用.class的方式來(lái)獲取Class實(shí)例,對(duì)于基本數(shù)據(jù)類(lèi)型的封裝類(lèi),還可以用.TYPE來(lái)獲取相應(yīng)的
????? 基本數(shù)據(jù)類(lèi)型的Class實(shí)例。
?? <4>在運(yùn)行期間,如果我們要產(chǎn)生某個(gè)類(lèi)的對(duì)象,JAVA虛擬機(jī)(JVM)會(huì)檢查該類(lèi)型的Class對(duì)象是否被
????? 加載,如果沒(méi)有加載,JVM會(huì)根據(jù)類(lèi)的名稱找到.class文件并加載它。一旦某個(gè)類(lèi)型的Class對(duì)象已
????? 經(jīng)被加載到內(nèi)存,就可以用它來(lái)產(chǎn)生該類(lèi)型所有的對(duì)象。
?? <5>newInstance()調(diào)用類(lèi)中缺省的構(gòu)造方法。(好處是我們?cè)诓恢李?lèi)的名字的情況下去創(chuàng)造一個(gè)實(shí)例)
import java.lang.reflect.*;?????? //子包必須手動(dòng)導(dǎo)入
class ClassTest
{
?public static void main(String[] args)//throws Exception
?{
??/*
??Point pt=new Point();?????????????
??Class c1=pt.getClass();//利用對(duì)象調(diào)用getClass()方法獲得該對(duì)象的Class實(shí)例
??System.out.println(c1.getName());
??
??Class c2=Class.forName("Point");//使用Class類(lèi)的靜態(tài)方法forName(),用類(lèi)的名字獲取一個(gè)Class的是實(shí)例
??System.out.println(c2.getName());
??
??Class c3=Point.class;//運(yùn)用.class的方式來(lái)獲取Class實(shí)例
??System.out.println(c3.getName());
??
??Class c4=Integer.TYPE;//封裝類(lèi)用.TYPE來(lái)獲取相應(yīng)的基本數(shù)據(jù)類(lèi)型的Class實(shí)例。
??System.out.println(c4.getName());
??*/
??/*
??System.out.println("before new Point()");
??new Point();
??System.out.println("after new Point()");
??Class.forName("Line");
??*/
??/*
??if(args.length!=1)
??{
???return;
??}
??try
??{
???Class c=Class.forName(args[0]);
???Point pt=(Point)c.newInstance();
???pt.output();
??}
??catch(Exception e)
??{
???e.printStackTrace();
??}
??*/
??if(args.length!=1)
??{
???return;
??}
??try
??{
???Class c=Class.forName(args[0]);
???Constructor[] cons=c.getDeclaredConstructors();
???/*
???for(int i=0;i<cons.length;i++)
???{
????System.out.println(cons[i]);
???}
???Method[] ms=c.getDeclaredMethods();
???for(int i=0;i<ms.length;i++)
???{
????System.out.println(ms[i]);
???}*/
???Class[] params=cons[0].getParameterTypes();
???Object[] paramValues=new Object[params.length];
???for(int i=0;i<params.length;i++)
???{
????if(params[i].isPrimitive())
????{
?????paramValues[i]=new Integer(i+3);
????}
???}
???Object o=cons[0].newInstance(paramValues);
???Method[] ms=c.getDeclaredMethods();
???ms[0].invoke(o,null);
??}
??catch(Exception e)
??{
???e.printStackTrace();
??}
??
?}
}
class Point
{
?static
?{
??System.out.println("Loading Point");
?}
?int x,y;
?void output()
?{
??System.out.println("x="+x+","+"y="+y);
?}
?Point(int x,int y)
?{
??this.x=x;
??this.y=y;
?}
}
class Line
{
?static
?{
??System.out.println("Loading Line");
?}
}