首页 > 代码库 > 复习java基础第七天(反射)
复习java基础第七天(反射)
一:目标
Ø理解 Class 类
Ø理解 Java 的类加载机制
Ø学会使用 ClassLoader 进行类加载
Ø理解反射的机制
Ø掌握 Constructor、Method、Field 类的用法
Ø理解并掌握动态代理
1、Class类 Person类ReflectionTest类
–对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。
对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。
一个 Class 对象包含了特定某个类的有关信息。
– Class 对象只能由系统建立对象。
– 一个类在 JVM 中只会有一个Class实例。
– 每个类的实例都会记得自己是由哪个 Class 实例所生成 。
获取 Class 对象的方式:
Class类的常用方法:
三种类加载器(ClassLoader):
练习代码:
1 package com.shellway.test; 2 3 public class Person { 4 String name; 5 String age; 6 7 public String getName() { 8 return name; 9 }10 11 public void setName(String name) {12 this.name = name;13 }14 15 public String getAge() {16 return age;17 }18 19 public void setAge(String age) {20 this.age = age;21 }22 23 public Person(String name, String age) {24 super();25 this.name = name;26 this.age = age;27 System.out.println("有参数的构造器。。。。");28 }29 30 public Person() {31 System.out.println("无参数的构造器。。。。");32 }33 }
1 package com.shellway.test; 2 3 import static org.junit.Assert.*; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.InputStream; 7 import java.lang.reflect.Field; 8 import org.junit.Test; 9 10 public class ReflectionTest {11 @Test12 public void testClassLoader() throws ClassNotFoundException,13 FileNotFoundException {14 ClassLoader classLoader = ClassLoader.getSystemClassLoader();15 System.out.println(classLoader);16 classLoader = classLoader.getParent();17 System.out.println(classLoader);18 classLoader = classLoader.getParent();19 System.out.println(classLoader);20 21 // 测试由哪个类加载器进行加载22 classLoader = Class.forName("com.shellway.test.Person")23 .getClassLoader();24 System.out.println(classLoader);25 26 // 调用getResourceAsStream获取类路径下文件对应的输入流27 InputStream in = null;28 in = this.getClass().getClassLoader()29 .getResourceAsStream("com/shellway/test/test.properties");30 // new FileInputStream("com/shellway/test/test.properties");31 System.out.println(in);32 }33 34 @Test35 public void testNewInstance() throws ClassNotFoundException,36 InstantiationException, IllegalAccessException {37 String className = "com.shellway.test.Person";38 Class clazz = Class.forName(className);39 Object obj = clazz.newInstance();// 实际上调用的是无参数的构造器创建的实例。40 System.out.println(obj);41 }42 43 @Test44 public void test() throws ClassNotFoundException {45 // 1.得到Class对象的三种方法46 // 1.1直接通过类名.class的方式得到47 Class clazz = null;48 clazz = Person.class;49 Field[] fields = clazz.getDeclaredFields();50 System.out.println(clazz);51 52 // 2.1通过对象调用getClass()方法来获取53 Person person = new Person();// Object obj =new Person();54 clazz = person.getClass(); // clazz = obj.getClass();55 56 // 3.1通过全类名的方式获取,用的最多的57 String className = "com.shellway.test.Person";58 clazz = Class.forName(className);59 }60 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。