1、函数式接口:有且仅有一个抽象类方法,但是Object的抽象方法可以放在里面
2、lambda表达式有延迟加载的特点,会先判断是否能执行,才会建立接口对象
3、常见的函数式接口:
(1)Runnable (Thread线程) Comparator(sort排序)
(2)Suplier<T>用来获取一个泛型参数指定类型的数据
①T get()
(3)Comsumer<T>消费一个数据,其数据类型由泛型决定
①accept()
(4)Predicate 需要对某种类型的数据进行判断的时候 ,结果返回布尔值
①Predicate<String> pre test()方法
(5)Function 转换元素类型
①Function<String ,Integer> fun 作为参数的时候 apply()
1、Stream流:是一个函数模型,不是数据结构,不是集合
(1)简化集合的代码操作,单列集合都可以成为Stream流对象,
(2)前提是操作之后返回的还是Stream流对象
(3)
(4)转换为Stream流都只是单列集合,双列集合要现获取键/值,再转
①格式1 list.Stream();// 集合转Stream流
②格式2 Stream.of(array[]数组);// 数组转Stream流,静态方法
(5)Stream.foreach()遍历的方法,终结方法(后面不再接其他方法,返回的不是Stream对象)
Void foreach(Consumer<?super T>action);
接收的是一个Consumer接口函数,会将每一个元素交给该函数进行处理
(6)Stream.filter(判断方法体);// 过滤器的方法,不是终结方法
如果判断为true则存储,false则不存,过滤掉
(7)Stream对象只能使用一次,(已经传递走了)不能再调用方法了,
(8)Stream.map(Function<?super T,?extends R> mapper);// 映射,将元素转换
(9)Stream.count();// 统计流中元素的个数,返回的是long类型整数,终结方法
(10)Stream.limit(long maxsize);// 对流进行截取,只取用前n个元素,返回的是流
(11)Stream.skip(long n);// 跳过前面n个元素,如果n>count,则返回的是长度为0的空流
(12)Stream.concat(Stream1,Stream2);// 拼接2个Stream流,得到一个新的Stream流
2、方法引用
(1)格式(对象::对象的方法) System.out::println
(2)静态方法 类名::类中的方法 例,Math::abs
(3)父类 super::方法名
(4)本类 this::方法名
(5)构造 返回对象::new 例,Person::new
数组的构造器 例如int[]::new
1、Junit的单元测试
(1)黑盒测试,不需要写代码,给输入值,看能不能得到期望的值
(2)白盒测试,需要写代码,看程序的具体执行流程
4.导包import org.junit.Test
红色:测试失败
绿色:测试成功
断言:Assert.AssertEquals(期望值,结果变量);// 看结果与期望是不
是一样
(3)@Before:修饰的方法会在测试方法之前被自动执行,
(4)@After:修饰的方法会在测试方法之后自动执行,不论有没有异常
2、反射:框架设计的灵魂
(1)框架:半成品软件,可以再框架的基础上进行软件开发,简化编码
(2)反射机制:将类的各个部分封装为其他对象
①优势,可以在程序运行过程中,操作这些对象
②可以解耦,提高程序的课扩展性
(3)字节码文件对象获取方式
①Class.forName(“包名.全类名”);将字节码文件加载进内存,返回class对象
多用于配置文件,将类名定义在配置文件中,读取文件,加载类
②类名.class:通过类名的属性class获取
多用与参数传递
③对象.getClass(),是object中定义的 // 3中class对象都是同一个
用于对象的获取字节码的方式
④*同一个字节码文件(*class)在一次程序运行中,只会加载一次
(4)class功能概述
①获取功能
1)Get成员变量 4个,s指”们”,公共的-getFiled / getDeclaredFiled-获取所有的
setAccessible(true);暴力反射,忽略访问权限修饰符的安全检查
2)/构造方法 4个 Constructor
Con.newInstance(...);// 创建构造对象,空参的时候同class对象的方法
3)/成员方法 4个 Method // 包含Object的共有方法 ,
Method.invoke(参数);// 执行方法
Class<ClassPerson> cpc = ClassPerson.class;
// 创建成员方法对象,传递的参数是方法名称,方法要传递参数的时候,传的也是数据类型class文件对象
Method eat = cpc.getMethod("eat",int.class,int.class);
// 和构造方法一样,要成员方法执行需要传递声明类对象,有参数的还要传递参数
ClassPerson p=new ClassPerson();
// 成员方法对象调用执行方法invoke(声明类对象,参数列表)
eat.invoke(p,1,2);
// 调用一个无参数的成员方法并执行
Method drink = cpc.getMethod("drink");
drink.invoke(p);
4)/类名 getNmae()
3、注解
(1)@Deprecated 注解该方法已过时
(2)@SuppressWarnings(all) 压制警告,括号可以不要,加All是压制所有警告,放类上面
(3)自定义注解
①元注解格式 public @interface 注解名称{属性列表abstract()} 本质就是接口
(4)元注解
①@Target(value={ElementType.Type})//表示该注解只能作用于类上:
描述注解能够作用的位置,Method作用于方法上,FIELD作用与成员变量上
②@Retention():表示注解被保留的阶段,3种阶段Source/Class/Runtime
③@Documented:描述注解是否被抽取到API文档中
④@Inherited:描述注解是否被子类继承
(5)解析注解 |
|