天天看點

java之路,Class類

封裝類 int -> Integer   float -> Float   long -> Long   double -> Double

       boolean -> Boolean    char -> Char    byte -> Byte 封裝類是隻讀的

class Test

{

 public static void main (String[] args)

 {

  int i = 3;

  Integer in = new Integer(1);

  int j = in.intValue();               //傳回Integer所表示的整形值

  String str = in.toString();          //int 轉為 string

  String str = "123";

  System.out.println(Integer.valueOf(str));  //string轉為int

 }

}

Class類,在java中每一個class都有一個對應的Class對象,用于表示這個類的類型資訊

擷取一個Class執行個體的方式:

1、利用對象調用getClass()方法

2、使用Class類的靜态方法forName(),用類的名字擷取一個Class執行個體

3、運用.class擷取Class執行個體,對于基本資料類型的封裝類,還可以通過.TYPE來擷取對應基本資料類型的Class執行個體

在運作期間,如果要産生某個類的對象,java虛拟機會檢查該類型的Class對象是否已經加載,

如果沒有加載,jvm會根據類名找到.class問價并加載。一旦某個類型的Class對象已經被加載

到記憶體,就可以用它來産生該類型的所有對象

newInstance調用類中預設的構造方法(就是不帶參數的構造方法),可以在不知類名的情況下建立一個執行個體

class ClassTest

 public static void main(String[] args)

  Point pt = new Point();

  Class c1 = pt.getClass();

  try

  {

   Class c2 = pt.forName(Point);    //forName方法會産生異常

  }

  catch(Exception e)

   e.printStackTrace();

  Class c3 = Point.class();

  Class c4 = int.class();

  Class c5 = Integer.TYPE;

  Class c6 = Integer.class();

  System.out.println(c1.getName());

  System.out.println(c2.getName());

  System.out.println(c3.getName());

  System.out.println(c4.getName());

  System.out.println(c5.getName());

  System.out.println(c6.getName());

  System.out.println("before point");

  new Point();          //建立執行個體,列印static裡的語句

  System.out.println("after point");

   Class.forName("Line");   //擷取到類的執行個體

  if(args.length != 1)

   return;

   Class c = Class.forName(args[0]);

  // Point pt = (Point)c.newInstance();   //從指令行傳參 java ClassTest Point

  // pt.output();

  //反射API,傳回對象的資訊,

   Constructor[] cons = c.getDeclaredConstructors();   //傳回所有的構造方法,需要導入java.lang.reflect包

   for(int i=0; i

    System.out.println(cons[i]);

   Method me = c.getDeclaredMethod();   //傳回對象所有的方法

    System.out.println(me[i]);       //調用預設的構造函數

   Class[] params = cons[0].getParameterTypes();   //傳回構造方法的參數資訊,表示參數的類型

   Object[] paramValues = new Object[params.length];  //構造Object數組,為newInstance使用

   {

    if(params[i].isPrimitive())      //isPrimitive判斷是否是基本的資料類型

    {

     paramValues[i] = new Integer(i+3);     //調用基本資料類型的封裝類,給構造方法傳參

    }

   }

   Object o = cons[0].newInstance(paramValues);  //newInstance需要Object數組為參數,傳回一個沒有預設構造函數的類

   Method me = c.getDeclaredMethod();   //傳回所有的方法

   me[0].invoke(o, null);       //調用指定的方法,隻有一個方法,是以me[0]就是output方法。output沒有參數,設定為null

class Point

(

 int x,y;

 static

  System.out.println("segment");

 void output()

  System.out.println("x="x "", + "," + "y=" + y);

 void Point(int x, int y)

  this.x = x;

  this.y = y;

)

class Line

  System.out.println("line");

每一個java程式都有一個單一的Runtime類,通過getRuntime()擷取Runtime執行個體。

它提供了應用程式和環境的接口,可以反映出記憶體等資訊

class RuntimeTest

  Runtime rt = Runtime.getRuntime();

  System.out.println(rt.freeMemory);

  System.out.println(rt.totalMemory);

   rt.exec("notepad");     //exec可以執行外部子程式,打開記事本

   rt.exec("javac hello.java");   //編譯一個檔案

在我們進行程式設計時,逐漸形成了一些典型問題和問題的解決方案,這就是軟體模式。

每一個模式描述了一個在我們程式設計中經常發生的問題,以及該問題的解決方案。

當我們碰到模式所描述的問題,就可以直接用相應的解決方法去解決這個問題,這就是設計模式。

單例(Singleton)模式

   (1)一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體,這個類稱為單例類。

   (2)單例類的一個最重要的特點是類的構造方法是私有的,進而避免了外部利用構造方法直接建立多個執行個體。