黑马程序员技术交流社区

标题: 【石家庄校区】学习总结3 [打印本页]

作者: 水煮鱼000    时间: 2019-5-19 10:11
标题: 【石家庄校区】学习总结3
十三、Lambda表达式
组成Lambda表达式的三要素:
省略的规则
Lambda表达式和匿名内部类的区别

public interface Addable {
    int add(int x, int y);
}

public interface Flyable {
    void fly(String s);
}

public class LambdaDemo {
    public static void main(String[] args) {
//        useAddable((int x,int y) -> {
//            return x + y;
//        });
        //参数的类型可以省略
        useAddable((x, y) -> {
            return x + y;
        });

//        useFlyable((String s) -> {
//            System.out.println(s);
//        });
        //如果参数有且仅有一个,那么小括号可以省略
//        useFlyable(s -> {
//            System.out.println(s);
//        });

        //如果代码块的语句只有一条,可以省略大括号和分号
        useFlyable(s -> System.out.println(s));

        //如果代码块的语句只有一条,可以省略大括号和分号,如果有return,return也要省略掉
        useAddable((x, y) -> x + y);
    }

    private static void useFlyable(Flyable f) {
        f.fly("风和日丽,晴空万里");
    }

    private static void useAddable(Addable a) {
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
}接口组成新增默认,静态,私有方法方法引用
方法引用符
::  该符号为引用运算符,而它所在的表达式被称为方法引用
引用类方法,其实就是引用类的静态方法
引用对象的实例方法,其实就引用类中的成员方法
引用类的实例方法,其实就是引用类中的成员方法
引用构造器,其实就是引用构造方法
十四、函数式接口函数式接口概述常用函数式接口之Supplier常用函数式接口之Consumer常用函数式接口之Predicate常用函数式接口之FunctionStrem流
Stream流把真正的函数式编程风格引入到Java中
Stream应用于集合、数组。
生成Stream流的方式
Stream流中间操作方法
Stream流终结操作方法
Stream流的收集操作十五、类加载、反射、模块化类加载反射
作用:反射被称为框架技术的灵魂;
模块化
使模块a中的类可以创建模块b中类的对象并使用,
在被调用的模块内创建module-info.java
file://H:\%E5%B0%B1%E4%B8%9A%E7%8F%AD1\%E5%B0%B1%E4%B8%9A%E7%8F%ADse\day15-%E7%B1%BB%E5%8A%A0%E8%BD%BD%E5%99%A8&%E5%8F%8D%E5%B0%84&%E6%A8%A1%E5%9D%97%E5%8C%96\%E7%AC%94%E8%AE%B0\img\05.png?lastModify=1558231862
在要调用的模块创建module-info.java,并写入以下内容
file://H:\%E5%B0%B1%E4%B8%9A%E7%8F%AD1\%E5%B0%B1%E4%B8%9A%E7%8F%ADse\day15-%E7%B1%BB%E5%8A%A0%E8%BD%BD%E5%99%A8&%E5%8F%8D%E5%B0%84&%E6%A8%A1%E5%9D%97%E5%8C%96\%E7%AC%94%E8%AE%B0\img\06.png?lastModify=1558231862
模块的基本使用十六、Junit测试
1.测试分类
2.Junit基本使用

public class Calculator {

    /**
     * 加法
     * @param a
     * @param b
     * @return
     */
    public int add (int a , int b){
        //int i = 3/0;
        return a - b;
    }

    /**
     * 减法
     * @param a
     * @param b
     * @return
     */
    public int sub (int a , int b){
        return a - b;
    }

}public class CalculatorTest {
    /**
     * 初始化方法:
     *  用于资源申请,所有测试方法在执行之前都会先执行该方法
     */
    @Before
    public void init(){
        System.out.println("init...");
    }

    /**
     * 释放资源方法:
     *  在所有测试方法执行完后,都会自动执行该方法
     */
    @After
    public void close(){
        System.out.println("close...");
    }

    /**
     * 测试add方法
     */
    @Test
    public void testAdd(){
        //1.创建计算器对象
        System.out.println("testAdd...");
        Calculator c  = new Calculator();
        //2.调用add方法
        int result = c.add(1, 2);
        //3.断言  我断言这个结果是3
        Assert.assertEquals(3,result);
    }

    @Test
    public void testSub(){
        //1.创建计算器对象
        Calculator c  = new Calculator();
        int result = c.sub(1, 2);
        System.out.println("testSub....");
        Assert.assertEquals(-1,result);
    }
}
3.单元测试需要使用的注解
十七、注解注解概念注解的作用常用的注解自定义注解
public @interface 注解名称{
   
}解析注解
public class Dog {
    public void eat() {
        System.out.println("狗吃肉");
    }
}
public class Cat {
    public void eat() {
        System.out.println("猫吃鱼");
    }
}@Target(value = {ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface AnimalAnnotation {
    String className();   // 记录 全类名
    String methodName();  // 记录 方法名
}
@AnimalAnnotation(className = "com.itheima01.Cat",methodName = "eat")
public class Test06 {
    public static void main(String[] args) throws Exception{
        //获取注解中的属性值
        //1.获取Test06类的Class对象
        Class<Test06> cls = Test06.class;
        //2.通过Class对象来获取注解对象
        AnimalAnnotation animal = cls.getAnnotation(AnimalAnnotation.class);
        //3.通过注解对象调用属性。来获取属性值
        String className = animal.className();
        String methodName = animal.methodName();


        //通过反射来调用方法
        //1.获取Class对象
        Class cls2 = Class.forName(className);
        //2.获取方法
        Method method = cls2.getMethod(methodName);
        //3.执行方法
        method.invoke(cls2.newInstance());
    }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2