大家都知道Java是一門面向對象編程語言,在Java世界裡,萬事萬物皆對象,那個Java中怎麼表示對象呢? Class
我們知道Java中的對像都是Object類的子類,那麼今天我們就一起來研究一下Java中的Class的使用。
問一下小問題:類是對象嗎?類是誰的對象?答案是:類是對象,是java.lang.Class類的實力對象。
package com.edu.hpu;
public class Test { public static void main(String[] args) { //通過new實例化一個對象Foo foo = new Foo(); //通過實例化對象的getClass()方法得到Class類的實例Class c1 = foo.getClass(); //任何一個類都有一個隱含的靜態變量class Class c2 = Foo.class; //c1、c2表示了Foo類的類類型(class type) System.out.println(c1 == c2); Class c3 = null; try { //第三種獲得類的類類型的方法c3 = Class.forName("com.edu.hpu.Foo"); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(c1 == c3); try { //通過類的類類型來創建類的實例對象Foo c4 = (Foo) c1.newInstance(); c4.start(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }}class Foo{ public void start(){ System.out.println("Foo類"); }}通過上面的代碼大家是不是對於Class有了一個更深入的認識,我們可以通過new關鍵字來創建類的實例對象,同樣可以通過類的類類型來創建類的實例對象,獲取類的類類型的方式以上有三種形式,他們得到的類類型只有一個,所以c1==c2==c3:true。
經過上面的簡單介紹大家是不是對於Java中的class有了一個更深入的認識,下面我們通過一個小例子為大家介紹一下類類型與類的實例在實際中的使用。
class Offices{ public static void main(String [] args){ if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel e = new Excel(); e.start(); } }}大家看一下上面的代碼,當我們編譯時,是否可以正常通過?這裡我們需要說一下編譯與運行:編譯時刻加載的類是靜態加載類;運行時刻加載的類是動態加載類。 Class.forName("l類的全稱");不僅代表了類類型,而且代表了動態加載類。上面的例子中,Word、Excel我們並不一定用的到,但是當我們編譯時,如果Word、與Excel不存在,那麼便會出錯。所以接下來我們通過類類型動態加載類的方式來實現上面的邏輯。
class Office{ public static void main(String [] args){ try{ Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble)c.newInstance(); oa.Write(); }catch(Exception e){e.printStackTrace();} }} interface OfficeAble{ public void Write();}class Word implements OfficeAble{ public void Write(){ System.out.println("Word...start..."); }}class Excel implements OfficeAble{ public void Write(){ System.out.println("Excel..Write.."); }}這樣我們就可以根據需要動態的增加類,方便我們應用的功能拓展。