Java學習筆記-11.運行期間類型鑒定
阿新 • • 發佈:2017-06-21
hand 運行期 以及 類繼承 string pig show 內部類 eve
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 implementsHasBatteries,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); } } }
Java學習筆記-11.運行期間類型鑒定