import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import org.junit.Test;
/**
*
* java.lang.Class 反射的源头
*
* java的运行机制 java文件 经过 编译 javac.exe 编译成 .class文件 再通过 java.exe 运行.class 文件
*
* 此 .class 文件加载到内存以后 ,就是一个运行时类,存在缓存区
*
* 类被加载的过程 : 加载class文件到内存 并且创建一个 java.lang.Class --->类的连接,将二进制数据合并到JRE ---> 类初始化 JVM对类进行初始化。
*
* 1、每个运行时类 只能被加载一次 。 不管获取几次 ,该类 只能被加载一次 ,不管 获不获取,该运行时类都一直存在。
* 2、有了Class类的实例后 才可以进行以下操作:
* 创建对应的运行时类对象 newInstance();获得运行时类的实例。
* 获取对应运行时类的完整结构(属性 。方法。构造器。内部类 ,父类, 类所在的包,异常。注解)
* 调用对应运行时类的指定的结构 (属性、方法、构造器)
*
*
* ClassLoader 类 加载器 ClassLoader cl2 = this.getClass().getClassLoader();
*
*
* @author Administrator
*
*/
public class TestReflect1 {
@Test
public void testClass() throws Exception{
// 获取 运行时类 Class类 的几种方式 方式一 : <不管获取几次 ,该类 只能被加载一次 ,不管 获不获取,该运行时类都一直存在。>
Class clazz1 = String.class;
System.out.println(clazz1.getName());
// 方式二:
Class clazz2 = Class.forName("java.lang.String");
System.out.println(clazz2.getName());
// 方式三:通过一个类的对象 获取 Class
String s = new String("sdg");
Class clazz3 = s.getClass();
System.out.println(clazz3.getName());
// 方式四:
ClassLoader cl =this.getClass().getClassLoader();
Class c = cl.loadClass("java.lang.String");
System.out.println(c.getName());
ClassLoader cl2 = this.getClass().getClassLoader();
System.out.println(cl2);// 系统类加载器 AppClassLoader 是最常用的类的加载器<自定义类 等 >
ClassLoader cl3= cl2.getParent();
System.out.println(cl3);// ExtClassLoader 扩展类的加载器 加载 <jdk里面的常用类>
ClassLoader cl4= cl3.getParent();
System.out.println(cl4);// BootStapClassLoader 引导型类的加载器 , 用C++编写 ,不允许被用户获取 <核心的引导区类>
// 读取配置文件的方式:
// 1、文件在具体的包下 用 ClassLoader 获取 流的方式
// ClassLoader cl2 = this.getClass().getClassLoader();
InputStream ins = cl2.getResourceAsStream("day19_01/jdbc.properties");
// 2、配置文件在项目的根目录下 io流
// InputStream ins = new FileInputStream(new File("jdbc.properties"));
Properties p = new Properties();
p.load(ins);
String user =p.getProperty("user");
String pass =p.getProperty("pass");
System.out.println(user);
System.out.println(pass);
}
}
java 反射机制 笔记 reflection .class
最新推荐文章于 2023-06-16 11:23:28 发布