Java学习笔记-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);
        }
    }

}
原文地址:https://www.cnblogs.com/junshijie/p/7059870.html