反射基础(一)

创建User类:

package com.shu.compressphoto.reflect;

/**
 * Created by Administrator on 2017/3/14.
 */
public class User {
    private String uname;
    private String age;
    private String id;
    public String address;

    public User() {
    }

    public User(String uname, String age, String id) {
        this.uname = uname;
        this.age = age;
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}


1.创建class的三种方法:

String path = "com.shu.compressphoto.reflect.User";
try {
    Class u1 = Class.forName(path);//方法一:创建Class
    System.out.println(u1);
    Class<User> u2 = User.class;//方法二:创建Class
    System.out.println(u2);
    User u3 = new User();//方法三:创建Class
    System.out.println(u3.getClass());
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}


结果:
class com.shu.compressphoto.reflect.User
class com.shu.compressphoto.reflect.User
class com.shu.compressphoto.reflect.User
三种方法无论怎么创建只有是一种类型的对象,获取到的class都是一样的。


User user1 = new User();
User user2 = new User("张三","23","0001");
System.out.println("对象创建:"+user1.getClass());
System.out.println("对象创建:"+user2.getClass());
结果:
对象创建:class com.shu.compressphoto.reflect.User
对象创建:class com.shu.compressphoto.reflect.User

无论构造方法是怎样的,同一种类型创建的的class只有一种。

2.获取Class的构造方法,属性值,方法

Class clazz1 = Class.forName(path);//方法一:创建Class
System.out.println(clazz1);
Field uname = clazz1.getField("uname");
Field[] fields = clazz1.getFields();
Field uname1 = clazz1.getDeclaredField("uname");
Field[] declaredFields = clazz1.getDeclaredFields();

获取的所有的属性只是public权限的属性:
public  Field getField(String name)根据属性名获取属性
public Field[] getFields()   获取所有public属性


获取的所有的属性所有权限的属性:
public native Field getDeclaredField(String name) 根据属性名获取属性
public native Field[] getDeclaredFields(); 获取所有public属性


结果:
uname1=private java.lang.String com.shu.compressphoto.reflect.User.uname


同理获取构造方法和方法:

获取的所有的属性只是public权限的属性:
public Method getMethod(String name, Class<?>... parameterTypes)
public Method[] getMethods()

获取的所有的属性所有权限的属性:

public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
public Method[] getDeclaredMethods();


Method getUname = clazz1.getDeclaredMethod("getUname", null);
Method setUname = clazz1.getDeclaredMethod("setUname", String.class);
System.out.println("getUname="+getUname);
System.out.println("setUname="+setUname);
结果:
getUname=public java.lang.String com.shu.compressphoto.reflect.User.getUname()
setUname=public void com.shu.compressphoto.reflect.User.setUname(java.lang.String)

 

获取的所有的属性只是public权限的属性:
public Constructor<T> getConstructor(Class<?>... parameterTypes)
public Constructor<?>[] getConstructors()

获取的所有的属性所有权限的属性:

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
public Constructor<?>[] getDeclaredConstructors()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值