折纸的不归路(17)

一.properties

–Map
–HashTable
java.util.properties

1.使用所有Map的方法:用来保存键值对的

put
get
自己的方法
setProperty(String,String);
getProperty(String),返回值String

2.经常用来做配置信息

数据保存的方式:临时保存
数组
集合
持久保存:
文件
数据库
Properties能读取文件,读取的内容是文本,并且保存的数据是key-value形式的数据,并且根据key获得value
Jvm的配置信息也是Properties保存的

3.通过eclipse来添加JVM的运行参数和程序的运行参数

右键–>run as—>Run Configurations—>Arguments

4.创建一个文件

例:创建info.properties

5.读取文件需要的前置知识

数据的流向IO–>input output
Scanner,Programing,arguements,VM arguements—>输入–>程序–>输出–>控制台(cmd)
文件(txt,dll,properties,MP3,MP4,)–>程序—>文件
字符流只能读文本
字节流可以读所有

获取到文件的路径

绝对路径
相对路径

相关代码实现

public class PropertiesTest {
	public static void main(String[] args) throws FileNotFoundException, IOException {
		//获取JVM的配置信息保存在Properties里
		Properties p = System.getProperties();
		p.list(System.out);
		System.out.println(p.getProperty("user.name"));
		System.out.println(p.getProperty("os.name"));
		System.out.println(p.getProperty("java.version"));
		//JVM运行的系统参数可以通过外部进行添加
		System.out.println(p.getProperty("name"));
		//args是程序运行的系统参数
		if(args.length>0) {
			System.out.println(Arrays.toString(args));
			//找到文件的路径
			String path = "/JD2007Code/src/day15/info.properties";
//			String path = "src/day15/info.properties";//相对路径 
			Properties p1 = new Properties();
			p.load(new FileInputStream(new File(path)));
			System.out.println("ming"+p1.getProperty("username"));
			System.out.println("mima"+p1.getProperty("password"));	
		}
	}
}

二.一个类是如何在内存中被使用(被加载)的

.class–>加载到内存的过程
加载—>连接—>初始化(main方法之前)

1.加载

.class加载进内存的过程
java.lang.Class(类的抽象的类)

现实生活中的事物–>抽象成–>class–>student–>再抽象—>
class Class(不是由程序员做的)

如何对一个类再jvm中做唯一标识?
包名+类名=全限类名

Student s1 = new Student();
Student s2 = new Student();
只会产生一个Class的实例

2.连接

验证:
分配空间:静态成员
解析功能:
info();//间接引用
0x1120231//直接引用

3.初始化

1.用到该类时进行初始化

产生该类的对象的时候
使用该类的静态成员(调用静态变量,静态方法)
使用该类子类的时候,父类也要跟着初始化
通过反射来创建实例的时候,Class.forName(全限类名);

初始化静态变量(显性的初始化,隐性的初始化),静态代码块,静态方法
静态成员的初始化是按照顺序从上到下初始化的

2.JVM强制提前对某些类进行初始化

在加载过程中,有程序帮助我们进行类加载

类加载器 ClassLoader

1.类加载器加载的类的来源

.class的来源
JDK中的来源
第三方jar包里的,框架里的
我们自己写的,classpath里的
网络上加载.class文件

2.类加载器的类型

根类加载器:BootstrapClassLoader(c++编写的)
其它类加载器(java实现的)都是ClassLoader的子类
扩展类加载器:ExtensionClassLoader
系统类加载器:SystemClassLoader
自己写一个类加载器必须继承ClassLoader

3.类加载器加载的范围

BootstrapClassLoader

提前加载JDK中的rt.jar,resourse

ExtensionClassLoader

为JDK添加一些功能拓展的jar包,jre/lib/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;
	class Filed{
		String type = "int";
		String name = "i";
		int value = 10;
		String[] modified = "static";
	}

附:创建实例的过程

Teacher t = new Teacher();

1.在栈区开辟空间保存引用
2.在堆区开辟空间保存实际的数据
3.把堆区的内存地址赋值给栈区的引用
4.给变量赋默认值(系统)
5.给变量显示的赋初始值
6.给代码块进行初始化
7.通过对应的构造器来完成对象的创建

四.心得

今天上了一节原理课,并没具有写太多的代码,只是进行了少部分相关内容的代码实现,理解起来也不是很复杂,主要内容都是在给反射做铺垫,今天就写写那个学生管理系统,明天好好学反射.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值