java基础8

unit6 方法引用

1.Lambda表达式的简化,先有函数式接口Lambda表达式,再有方法的引用

方法引用符号:

 

通过对象名引用成员方法:略

通过类名引用静态成员方法:

  接口:

@FunctionalInterface
public interface Calable {
//整数绝对值运算接口
int calAbs(int number);
}

实现:
public class StaticMethodReference {
//定义一个方法,参数传递接口的参数number
public static int method(int number,Calable c){
return c.calAbs(number);
}

public static void main(String[] args) {
//调用上述定义的method方法,传递的参数是number=-2,Lambda表达式
int number = method(-2,(number1 -> {
return Math.abs(number1);
}));
System.out.println(number);

//方法引用的使用,同上实现
int number2 = method(-1,Math::abs);
System.out.println(number2);
}
}

通过super引用父类的成员方法:super父子类继承关系

通过this引用本类的成员方法:this当前对象

2.类的构造器:类名称::new 

//函数式接口,测试类中可以传递Lambda表达式
@FunctionalInterface
public interface PersonBuilder {
Person builderPerson(String name);
}
-----------------------------------------
public class PersonTest {
public static void printName(String name, PersonBuilder pb){
//定义一个方法,参数传递name和接口
Person person = pb.builderPerson(name);
System.out.println(person.getName());
}

public static void main(String[] args) {
//调用上概述方法,函数式接口,可以传递Lambda表达式的
printName("sjw",(String name)->{
return new Person("sjw");
});

//使用person的带参构造方法,通过传递的姓名创建对象
printName("linzi",Person::new);
}
}

数组构造器:类似上述。。

 

unit7 单元测试,反射,注解

1.单元测试:Junit

黑盒测试,白盒测试

步骤:1.定义一个测试类--测试用例

    2.定义测试方法--可以独立运行

      3.方法加入@Test

        4.加载Junit4

   ------》》

import org.junit.Assert;
import org.junit.Test;
public class CalculatorTest {
@Test
public void testAdd(){
Calculator c = new Calculator();//创建对象
int result = c.add(1,2);//调用方法
System.out.println(result);
//使用断言操作处理结果,期望结果对比预算结果
Assert.assertEquals(3,result);
}
}

@Before:初始化方法

@After:释放资源方法

2.反射:框架设计,框架算是一个半成品,只需在这基础上添加即可

反射机制:将类的各个组成部分封装为其他对象,这就是反射机制

 反射好处:1.在程序运行中,操作这些对象   2.可以解耦,提高程序可扩展性

------------------------------------------------------------------------------------------------------------------------------------------------------------

获取字节码Class对象:*.class ,在一次程序运行时候,只会被加载一次

Class aClass = Class.forName("demo27.Person");
System.out.println(aClass);
Class bClass = Person.class;
System.out.println(bClass);
Person p = new Person();
Class cClass = p.getClass();
System.out.println(cClass);
---------------------------------------------------------
Class对象功能概述:

//Class对象功能,获取Field
//获取的是public修饰的成员变量
Class<Person> personClass = Person.class;
Field[] fields = personClass.getFields();
for (Field field : fields) {
System.out.println(field);
}
//获取构造方法,getConstructor,返回一个构造器
Class<Person> personClass = Person.class;
Constructor constructor = personClass.getConstructor(String.class,int.class);
System.out.println(constructor);
//获取指定名称的方法
Class personClass = Person.class;
Method eat_method = personClass.getMethod("吃");
Person person = new Person();
eat_method.invoke(person)

例子:添加配置问件和类的对象
 

 

 改配置文件,可以使得程序扩展性更强!

3.注解:Annotation,也叫元数据,是一种代码级别的说明,@****

 

 

 

 

   1.属性的返回值类型:基本数据类型,String,枚举,注解,以上类型的数组

   2.定义了属性,在使用时候需要给属性赋值

    

 

 

 

posted @ 2020-08-01 13:42  only~~  阅读(81)  评论(0编辑  收藏  举报