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.定义了属性,在使用时候需要给属性赋值