一 回顾
1.Junit 主要用于来做局部测试
2.Junit 使用的步骤
A.定义一个普通的方法 访问修饰符public 没有返回值 void
B.在 方法上使用注解 @Test
3.反射:
概念:所有框架的灵魂
反射机制:将类的各个部分 组成一个新的对象 Class对象
获取Class 对象
A.对象名.getClass()
B.类名.class
C.Class.forName("完整包名+类名");
获取构造方法
public Constructor<?>[] getConstructors() 获取所有公有的构造方法
public Constructor<?>[] getDeclaredConstructors() 获取公有包括私有的构造方法
public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取单个公有的构造方法
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
获取单个私有的构造方法
public T newInstance(Object... initargs) 用于实例化对象
获取成员方法
public Method[] getMethods() 获取所有公有的方法(包含父类的方法)
public Method[] getDeclaredMethods() 获取所有的方法(包括私有的)
public Method getMethod(String name,Class<?>... parameterTypes) 获取单个公有的方法
public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 获取单个私有方法
4.jdk8 与jdk9接口的新的特性
jdk8 增加默认方法与静态方法
jdk9 增加私有的方法
5.Lambda表达式
本质:匿名内部接口
前提:必须使用函数型接口
作用:简化匿名内部类的写法
语法:(参数) ->{方法体}
二 反射获取成员变量(重点)
方法名称 | 方法的说明 |
---|---|
public Field[] getFields() | 获取公有的成员变量 |
public Field[] getDeclaredFields() | 获取所有的成员变量 |
public Field getField(String name) | 获取单个成员变量 |
public Field getDeclaredField(String name) | 获取私有的成员变量 |
代码
//获取Class对象
Class cla = Class.forName("com.qf.demo01.Student");
//获取成员变量
Field[] fields = cla.getFields();
for (Field f : fields) {
System.out.println(f);
}
代码
Class cla = Class.forName("com.qf.demo01.Student");
//获取所有的成员变量
Field[] fields = cla.getDeclaredFields();
for (Field f :fields){
System.out.println(f);
}
代码
①Field field.set(对象,“参数”)
Class cla = Class.forName("com.qf.demo01.Student");
//获取单个公有的成员变量
Field f =cla.getField("name");
//获取构造方法
Constructor con = cla.getConstructor();
//实例化对象
Object o = con.newInstance();
//设置成员变量值
f.set(o,"文静");
System.out.println(f.get(o));
代码
Class cla = Class.forName("com.qf.demo01.Student");
//获取单个公有的成员变量
Field f =cla.getDeclaredField("age");
//使用暴力反射去除私有
f.setAccessible(true);
//获取构造方法
Constructor con = cla.getConstructor();
//实例化对象
Object o = con.newInstance();
//设置成员变量值
f.set(o,18);
System.out.println(f.get(o));
三 函数型接口
1.概念:接口中只能有一个抽象方法 可以有默认的方法 以及其它的方法 2.注解:@FunctionalInterface 用于来检查是否是函数型接口 3.函数型接口:作为方法的参数 与 作为方法的返回值
代码-函数型接口的定义
package com.qf.demo02;
@FunctionalInterface
public interface Inner {
void showInfo();
/* void showIn();*/
default void show(){
}
static void show01(){
}
}
代码- 作为方法的参数
接口类
package com.qf.demo03;
@FunctionalInterface
public interface Inner {
void show(String s);
}
测试类
package com.qf.demo03;
public class Test01 {
public static void main(String[] args) {
showInfo("你好",(String s)->{
System.out.println(s);
});
showInfo("你好", s -> System.out.println(s));
}
public static void showInfo(String s,Inner inner){
inner.show(s);
}
}
你好
代码 -作为方法 的返回值
package com.qf.demo04;
import java.util.Arrays;
import java.util.Comparator;
public class Test01 {
public static void main(String[] args) {
String [] arrays={"a","aaa","ab","abcd"};
/* Arrays.sort(arrays, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});*/
// Arrays.sort(arrays,(String o1, String o2)->{
// return o1.length()-o2.length();
// });
// System.out.println(Arrays.toString(arrays));
Arrays.sort(arrays,(o1,o2)->o1.length()-o2.length());
System.out.println(Arrays.toString(arrays));
}
}
四 jdk8 四个函数型接口(了解)
4.1 Supplier 供给型接口(输出)
方法的名称 | 方法的描述 |
---|---|
T get() | 得到一个结果 |