Junit单元测试:
Junit是java语言编写单元测试框架,就是取代java类的main方法.Junit属于第三方工具,一般情况下需要导入jar包,而多数java开发环境都是集成了Junit.
使用方式:
1. 编写测试类,简单理解Junit可以用于取代java的main方法.
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;
必须提供getter或setter方法
提供无参构造方法
反射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集合中.