您的位置:首页 > 编程语言 > Java开发

反射类的学习

2016-07-19 23:06 369 查看
       今天学习了反射的使用,JVM通过类加载器,将编译后的字节码文件解析成四个部分:Class(类)、Field(属性)、Constructor(构造器)、Method(方法)。

       反射就是通过字节码文件创建对象,并操作对象的方法。

package com.meiran;
import com.meiran.domain.Student;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {
/**
* 获取Class对象的三种方法
*/
@Test
public void testClass() throws Exception {
//1
Class clazz1 = Student.class;
//2、通过对象实例
Student s = new Student();
Class clazz2 = s.getClass();
//3、通过forName---框架中最常用的方法
Class clazz3 = Class.forName("com.meiran.domain.Student");

//new实例-无参的构架方法
Student student = (Student) clazz3.newInstance();

//new实例-有参数的构造方法
Constructor constructor = clazz3.getConstructor(Integer.class, String.class);
Student student2 = (Student) constructor.newInstance(50, "test");
System.out.println(student2);
}

@Test
public void test() {
try {
//获取Class对象
Class clazz = Class.forName("com.meiran.domain.Student");
//new对象
Student s = (Student) clazz.newInstance();
//获取属性对象
Field field = clazz.getDeclaredField("id");
field.setAccessible(true);//设置访问权限,可以访问private

//设置属性值
field.set(s, 584);
System.out.println(field.get(s));

//获取方法对象
Method getNameMethod = clazz.getDeclaredMethod("setName", String.class);
//操作方法
getNameMethod.invoke(s, "bbb");//调用这个方法

Field field2 = clazz.getDeclaredField("name");
field2.setAccessible(true);
System.out.println(field2.get(s));
} catch (Exception e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射