java 反射机制 笔记 reflection .class

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);
		
		
		
	}
	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值