反射

一、反射是什么

反射允许运行中的程序【程序的三个阶段,在编写完代码时为Source源代码阶段;在ClassLoader加载类之后,进入Class类对象阶段;在创建类的对象实例时,进行Runtime运行时状态。】,获取自身信息以及操作其方法,成员变量等。

二、反射的作用

 反射一般用在框架中,或者代码编写工具的.之后出现的提示。

三、实现步骤

       0.创建Student类,其拥有三个成员变量,name、age和sex,成员变量对象的getter和setter方法,一个无参构造函数,一个包含三个参数的构造函数,并实现hashcode和equals方法。

package unit1;

public class Student {
    public Student(String name, int age, int sex) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
    public Student() {
    	
    }
	private String name;
    private int age;
    private int sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	private int test() {
		return 1;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + sex;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (sex != other.sex)
			return false;
		return true;
	}
    
    
}

1.获取Class对象

     (1) 通过forName()方法获取,jdbc注册驱动时常用此方法。

           static  Class<?>  forName(String className)  返回与带有给定字符串名的类或接口相关联的Class对象。

     (2) 通过类名获取 ?

           String.class;

     (3)通过类的实例获取

         public final Class<?> getClass()  返回此Object的运行时类。

     需要注意的时,同一个类无论创建了多少个class对象,它们都拥有同一个地址。

     

2.获取任意一个类的方法、成员变量及构造方法。

       public Method[] getDeclaredMethods() throws SecurityException      获取一个类中所有定义的方法,不包括继承的类

      

       public Method[]  getMethods() throws SecurityException         获取类中的所有公共方法,包括继承的方法。

       public  Method  getMethod(String name,Class<?>... parameterTypes)  throws NoSushMethodException,SecurityException    根据方法名和方法参数的Class对象,返回一个Method对象

    

3.获取任意一个类的对象实例

        public T newInstance()  throws InstantiationException,IllegalAccessException  创建此Class对象所表示的类的一个新实例。

       

4.执行任意一个类的方法

       public Object invoke(Object obj,Object... args) throws IllegalAccessException,IllegaArgumentException,InvocationTargetException, 对带有指定参数的指定对象调用由此Method对象表示的底层方法。

         参考文章:https://www.sczyh30.com/posts/Java/java-reflection-1/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值