package com.imooc.reflect; public class ClassDemo1 { public static void main(String[] args) { //Foo的實例對象如何表示 Foo foo1 = new Foo();//foo1就表示出來了. //Foo這個類也是一個實例對象,Class類的實例對象,如何表示呢 //任何一個類都是Class的實例對象,這個實例對象有三種表示方式 //第一種表示方式--->實際在告訴咱們任何一個類都有一個隱含的靜態成員變量class Class c1 = Foo.class; //第二中表達方式--->已經知道該類的對象經過getClass方法 Class c2 = foo1.getClass(); /* * 萬事萬物皆對象,類也是對象,是Class類的實例對象,這個對象咱們稱爲該類的類類型 * c1, c2 表示了Foo類的類類型(class type) */ //無論c1 or c2都表明了Foo類的類類型,一個類只多是Class類的一個實例對象 System.out.println(c1 == c2); //第三種表達方式 Class c3 = null; try { c3 = Class.forName("com.imooc.reflect.Foo"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(c2 == c3); //咱們徹底能夠經過類的類類型建立該類的對象實例---->經過c1 or c2 or c3建立Foo的實例對象 try { Foo foo = (Foo)c1.newInstance();//須要有無參數的構造方法 foo.print(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Foo{ void print(){ System.out.println("foo"); } }