day24: 反射获取成员变量(重点)、 函数型接口、 四个函数型接口、Stream、注解

一 回顾

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() 得到一个结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LI JS@你猜啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值