反射枚举lambda

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来接收

lambda表达式的优缺点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值