JAVASE之反射,properties初识

来源:互联网 发布:数据库是按一定的结构 编辑:程序博客网 时间:2024/06/05 08:03

Junit单元测试:

Junitjava语言编写单元测试框架,就是取代java类的main方法.Junit属于第三方工具,一般情况下需要导入jar,而多数java开发环境都是集成了Junit.

 

使用方式:

1. 编写测试类,简单理解Junit可以用于取代javamain方法.

2. 在测试类方法上添加注解@Test

3. @Test修饰的方法要求:public void方法名(){...},方法名自定义建议test开头,没有参数.

此外还有注解:

@Test:用于修饰需要执行的方法

@Before:测试方法前执行的方法

@After:测试方法后执行的方法.

 

 

类的加载:

当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载连接,初始化三步来实现对这个类进行初始化.

加载:就是将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象..

连接:验证是否有正确的内部结构,并和其他类协调一致

准备 负责为类的静态成员分配内存,并设置默认初始化值.

解析: 将类的二进制数据中的符号引用替换为直接引用.

初始化: 类的初始化.对象

 

 

类的初始化:

1 ,创建类的实例

2 ,类的静态变量,或者为静态变量赋值

3 ,类的静态方法

4 ,使用反射方式来强制创建某个类或接口对应的java.lang.Class对象.

5 ,初始化某个类的子类

6 ,直接使用java.exe命令来运行某个主类.

 

反射的概述:

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.

要想解剖一个类,必须先要获取到该类的字节码文件对象.解剖一个类,使用的就是Class类中的方法,所以先要获取到每一个字节码文件所对应的Class类型对象.

反射需要用到的成员即方法有:

Class;

Constructor构造

Method方法

Field字段

Instance实例

Invoke执行

 

反射的数据准备:

提供javaBean,用于之后反射操作javaBean规范

提供私有字段,例如:private String id;

必须提供gettersetter方法

提供无参构造方法

 

反射Class获取(三种方式:):

通过类型获得:

语法:类名.class

应用场景:确定类型 等

Class clazz = Bean.class;

通过实例对象获得:

语法:变量.getClass();

应用场景:在方法内部通过参数获得类型等.

Bean bean = new Bean();

Class clazz= bean.getClass();

通过字符串获得;

语法:Class.forName(“全限定类名”);

应用场景:通过配置获得字符串等.

Class clazz= Class.forName(“com.alibaba.com”);

 

反射操作类中的成员:

反射操作构造方法:

通过获取public的构造创建对象.

步骤: 1,获得Class对象

2 获得构造

3 通过构造对象获得实例化对象.

For

Class clazz=Class.forName(“com.alibaba.reflect”);//String类型的有参构造Constructor cons=clazz.getConstructor(String.class);Object obj = cons.newInstance(“张三”);


通过获取private的构造方法创建对象:

获得Class对象

获得指定形参  私有构造

通知jvm,运行实例化私有构造

创建实例,并设置实际参数.

For

Class clazz=Class.forName(“com.alibaba”);Construrctor cons =clazz.getDeclaredConstructor(String.class,String.class);cons.setAccessible(true);Object obj=cons.newInstance(“张三”,”16”);

 

反射操作成员方法:

反射public方法:

获得实例

通过setId方法,设置参数

获得方法,需要明确形参列表,setId

执行方法,bean.setId(...);

确定实例对象,并执行确定方法,具体实际参数.

 

反射private方法:

获得实例

执行方法

获得方法

强制设置运行访问私有访问(暴力)

执行方法

 

反射操作成员属性:

反射public属性:

获得实例对象

给字段赋值

获得字段值

 

反射private属性:

获得实例

获得声明的字段(私有)

设置运行访问私有(暴力)

设置数据

获得数据

Properties的基本操作:

Properties类表示一个持久的属性集.Properties可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串.

特点:

Map接口的子类,map中的方法都可以用

该集合没有泛型,键值都是字符串.

是一个可以持久化的属性集.键值可以存储到集合中.也可以存储到持久化的设备(硬盘,U.光盘).键值的来源可以是持久化的设备.

有和流结合的特有方法:

 

常用方法:

Public object setProperty(String key,String value)调用map的方法put

Public Set<String> getPropertyNames()返回此属性列表中的键集.

Public String getProperty(String key)用指定的键在此属性列表中搜索属性.

 

Property之于map特有的方法:

将集合中内容存储到文件

store(OutputStream comments)

store(Writer comments)

把集合中的数据,保存到指定的流对应的文件中,参数commonts代表对描述的信息

 

读取文件,并保存到集合:

load(InputStream)

load(Reader)

用指定流对应的文件中的数据,读取出来,保存到properties集合中.

 

 

 

 

 

 

 

 

 

 

原创粉丝点击