Java學習筆記-11.運行期間類型評鑑,學習筆記-11
1.Class對象的getClasses()方法擷取的是該類中所有的公用的內部類,以及從父類,父介面繼承來的內部類。getinterfaces()方法返回類繼承的所有介面。
import javax.print.attribute.standard.PrinterInfo;interface HasBatteries{}interface Waterproof{}interface ShootsThings{}class Toy{ Toy(){} Toy(int i){}}class FancyToy extends Toy implements HasBatteries,Waterproof,ShootsThings{ public FancyToy() { // TODO 自動產生的建構函式存根 super(1); }}public class ToyTest { public static void main(String[] args){ Class class1=null; try{ class1=class1.forName("FancyToy"); }catch (ClassNotFoundException e) { // TODO: handle exception } printInfo(class1); Class[] faces=class1.getInterfaces(); for(int i=0;i<faces.length;i++){ printInfo(faces[i]); } Class cy=class1.getSuperclass(); Object cObject=null; try{ cObject=cy.newInstance(); }catch (Exception e) { // TODO: handle exception } printInfo(cObject.getClass()); } static void printInfo(Class cc){ System.out.println("Class name:"+cc.getName()+" is interface? "+cc.isInterface()); }}
2.Class對象的forName()使用時傳遞的類名classname參數是需要全名的,不能只加類名,比如包名.類名,java.lang.String。
package eleven;import java.lang.reflect.*;class Pig { public Pig() { // TODO 自動產生的建構函式存根 } public void T() { } public void A() { } public void ma() { }}public class ShowMethods { public static void main(String[] args) { try { //Class class1 = Class.forName("eleven.Pig"); Class class1 = Class.forName("java.lang.String"); Method[] methods = class1.getMethods(); Constructor[] constructors = class1.getConstructors(); for (int i = 0; i < methods.length; i++) { System.out.println(methods[i].toString()); } for (int i = 0; i < constructors.length; i++) { System.out.println(constructors[i].toString()); } } catch (ClassNotFoundException e) { // TODO: handle exception System.out.println("No such class:" + e); } }}