1.反射
什么是反射?
Java
的反射(
reflection
)机制是在
运行
状态中,对于任意一个类,都能够知道这个类的
所有属性和方法
;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java
语言的反射(
reflection
)机制。
反射的类


获取.class文件
想要反射必须要有.class文件,如何获取.class文件有以下几种方法。
class对象只有一个,不管什么方法调用class都会一样
public class TestDemo {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class c1=Class.forName("Reflect.Student");
Student student=(Student) c1.newInstance();
System.out.println(student);
}
}
在这里newInstance会调用无参构造方法进行创建实例

获取私有的构造方法,通过getDeclaredConstructor()方法

先创建构造方法,然后因为调用私有的构造方法,要把权限变为true,最后创建实例
创建对象
修改私有的构造方法
修改私有字段的方法

反射私有的方法
反射的优缺点
优点:
1.
对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法
2.
增加程序的灵活性和扩展性,降低耦合性,提高自适应能力
3.
反射已经运用在了很多流行框架如:
Struts
、
Hibernate
、
Spring
等等。
缺点:
1.
使用反射会有效率问题。会导致程序效率降低。具体参考这里:
http://www.imooc.com/article/293679
2.
反射技术绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂 。
2.枚举
如何枚举?
original方法是可以获取枚举的下标
java中的枚举类很特殊,默认继承于java原生的Enum类,除了values方法,values方法在 Java 中,values()
方法实际上是由 Java 编译器为枚举类型自动生成的一个静态方法,但它并不是直接定义在Enum
类中的。
枚举的构造方法
,枚举的构造方法默认是是私有的反射是不能够创建枚举对象
Lambda表达式
这是我们正常的内部类来重写Comparator
这是Lambda表达式
lambda表达式前面就是接收的参数类型,后面箭头指的是返回的值,代码的可读性比较弱
什么是函数式接口
通过@FunctionalInterface接口来判断是不是函数式接口
没有返回值的时候:
根据test接口中的方法传参个数来确定是否有
上面是正常重写方法

上面是lambda表达式的实现,表示没有接收参数,打印了"这是lambda表达式"
有返回值的时候:
这是有参数有返回值的时候的方法。
变量捕获
在匿名内部类中能使用的一定是常量如果不是常量就会报错:
如图,所有要用常量或者使用final修饰的常量。
在list的foreach方法中遍历数组,并且用accept来接收