Day15_Java_Properties_类的加载_反射
java.util.Properties:用来保存键值对
1.使用所有Map的方法
2.经常用来做配置信息
数据保存的方式:临时保存
数组
集合
持久保存:
文件
数据库
Properties能过读取内容是文本,并且保存的数据是key_value形式的数据,并且根据key获取value
jvm也是Properties保存的
3.通过eclipse添加jvm的运行参数和程序的运行参数
右键-->runas-->
4.创建一个文件
info.properties
这种形式的文件叫做properties文件
5.读取文件,需要的前置知识
数据的流向IO--->input output
Scanner,programing arguments,VM arguments--->程序--->输出--->控制台(console)
文件-->程序-->文件
获取到文件的路径
// 创建实例的过程
Teacher t = new Teacher();
1.在栈中开辟空间,保存引用t
2.在堆中开辟空间保存实际数据
3.将堆区空间地址赋给栈区变量
4.对对象中的变量进行隐形赋值
5.对对象中的变量进行显性赋值
6.执行类中的代码块
7.执行对应的构造器
类加载
加载—>连接—>初始化
1.加载
.class 加载进内存的过程
java.lang.Class
如何对一个类在JVM中做唯一标识
包名+类名 = 全限类名
Student s1 = new Student();
Student s2 = new Student();
只会产生一个Class实例
2.连接:
验证:
分配空间:静态成员
解析功能:
info();//简介引用
3.初始化
用到该类的时候进行初始化
产生该类的对象的时候
使用该类的静态成员
使用该类子类的时候,父类也要跟着初始化
通过反射来创建的时候,Class.forName(全限类名);
初始化静态变量(显性的初始化),静态代码块,静态方法
静态成员是按照顺序从上到下执行的
JVM可以强制提前对某些类进行初始化
类加载器 ClassLoader
1.类加载器的类的来源
2.类加载器的类型:
跟类加载器(BooStrapClassLoader)
其他类加载器
都是ClassLoader 的子类
扩展类加载器(ExtensionClassLoader)
系统类加载器(SystemClassLoader)
3.类加载器的范围:
BootstrapClassLoader:提前加载JDK中的rt.jar,resource,jar
ExtensionClassLoader:为JDK添加一些功能拓展的jar包,jre/ext下面的所有jar包里的class
如果想对JDK做一些功能拓展,可以把自己写好的工具类的.class文件使用jar命令打成jar包,放在该目录下
SystemClassLoader:我们自己写的.class文件,由classpath指定目录下所有class文件
4.类加载器之间是有一个子父关系的
该子父关系不是指继承关系,而是实例之间的父子关系
根
拓展
系统
5.类加载器的工作的一些机制
全局加载:
父类委托:
有什么事情找父亲帮忙,如果父亲不帮你,你再自己干
缓存加载:
6.使用类加载器来加载类
反射
一个java程序分为:编译运行
Person p = new Student();
p的编译类型Person
p的运行类型Student
通过该反射产生的镜像对象拥有和原对象一样的属性和方法
镜像对象的属性就是原对象的属性
镜像对象可以获得原对象的与所有方法,构造器,属性,实现的接口,继承的父类,添加的注解,使用的泛型
static int i = 10;
i 抽象成类
class Filed{
String type= “int”
String name = “i”
int value = 10;
int modified ;
}
1.学会使用获得镜像对象,三种方式
1>.知道类的全限类名com.briup.day06.Student
Class.forName(全限类名)
2>.只知道类名
Student.class;
3>.只知道对象的名字,stu1
stu1.getClass();
2.创建一个测试的例子 ReflectTest.java
java/lang.Class 的实例叫做镜像对象
java.lang.reflect
3.具体参见代码