首页 > 其他 > 详细

通过类对象来获取类中的属性,方法,构造器

时间:2020-04-20 22:20:30      阅读:62      评论:0      收藏:0      [点我收藏+]

获取类的信息(实际开发用的很少,但是要知道)

通过Class对象来获取类中的变量,方法,构造器,属性等。其中包括私有个公有!

package Reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test06 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        Class c1 =  Class.forName ("Reflection.User");
//        User user = new User ();
//        c1 =user.getClass ();
        System.out.println (c1.getName ());//获得包名加类名
        System.out.println (c1.getSimpleName ());//获取类名
        Field[] fields = c1.getFields ();
        for (Field field : fields) {//只能打印public方法
            System.out.println (field);
        }
        fields = c1.getDeclaredFields ();//可以强制获取所以方法,包括私有
        for (Field field : fields) {
            System.out.println (field);
        }
//        Field name = c1.getField("name");//获取指定属性的值
//        System.out.println (name);
        Field name1 = c1.getDeclaredField ("name");//获取指定属性的值
        System.out.println (name1);
//获取本类的全部方法,包括其父类的全部public方法。
        Method[] methods =c1.getMethods();
        for (Method method : methods) {
            System.out.println ("正常的方法:"+method);
        }
        //获取全部的方法,包括私有
        methods = c1.getDeclaredMethods ();
        for (Method method : methods) {
            System.out.println ("全部的方法:"+method);
        }
        Method getName = c1.getMethod ("getName",null);
        Method setName = c1.getMethod ("setName",String.class);//传入的参数类型
    //获取不同类型构造器的两种方式
        Constructor[] constructors = c1.getConstructors ();
        for (Constructor constructor : constructors) {
            System.out.println (constructor);
        }
        constructors = c1.getDeclaredConstructors ();
        for (Constructor constructor : constructors) {
            System.out.println ("#"+constructor);
        }
        Constructor declaredConstructor =  c1.getDeclaredConstructor (String.class,int.class,int.class);
        System.out.println ("指定:"+declaredConstructor);
    }
}
运行结果:
Reflection.User
User
private java.lang.String Reflection.User.name
private int Reflection.User.id
private int Reflection.User.age
private java.lang.String Reflection.User.name
正常的方法:public java.lang.String Reflection.User.getName()
正常的方法:public int Reflection.User.getId()
正常的方法:public void Reflection.User.setName(java.lang.String)
正常的方法:public void Reflection.User.setId(int)
正常的方法:public int Reflection.User.getAge()
正常的方法:public void Reflection.User.setAge(int)
正常的方法:public final void java.lang.Object.wait() throws java.lang.InterruptedException
正常的方法:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
正常的方法:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
正常的方法:public boolean java.lang.Object.equals(java.lang.Object)
正常的方法:public java.lang.String java.lang.Object.toString()
正常的方法:public native int java.lang.Object.hashCode()
正常的方法:public final native java.lang.Class java.lang.Object.getClass()
正常的方法:public final native void java.lang.Object.notify()
正常的方法:public final native void java.lang.Object.notifyAll()
全部的方法:public java.lang.String Reflection.User.getName()
全部的方法:public int Reflection.User.getId()
全部的方法:public void Reflection.User.setName(java.lang.String)
全部的方法:public void Reflection.User.setId(int)
全部的方法:public int Reflection.User.getAge()
全部的方法:public void Reflection.User.setAge(int)
public Reflection.User()
public Reflection.User(java.lang.String,int,int)
#public Reflection.User()
#public Reflection.User(java.lang.String,int,int)
指定:public Reflection.User(java.lang.String,int,int)

通过类对象来获取类中的属性,方法,构造器

原文:https://www.cnblogs.com/li33/p/12740727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!