day24

day24

一、反射获取成员变量

1.public Field[] getFields()  获取公有的成员变量
2.public Field[] getDeclaredFields()  获取所有的成员变量
3.public Field getField(String name)  获取单个的成员变量
4.public Field getDeclaredField(String name)  获取指定的成员变量,包括私有的成员变量

成员变量类:

package com.lt.demo05;

public class Student {
    public String name;
    private  int age;
//    protected int sex;
}

代码-测试类:

package com.lt.demo05;

import javax.naming.Name;
import java.lang.reflect.Field;

public class Test01 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        //获取Student对象的class对象
        Class<?> aClass = Class.forName("com.lt.demo05.Student");
        //获取class对象的所有的公有的成员变量
        Field[] fields = aClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        System.out.println("********************");
        //获取所有的成员变量
        Field[] fields1 = aClass.getDeclaredFields();
        for (Field field : fields1) {
            System.out.println(field);
        }

        System.out.println("************************");
        //获取单个的成员变量,传的参数是你需要寻找的属性名
        Field field = aClass.getField("name");
        System.out.println(field);


        System.out.println("******************");
        //可以获取指定的成员变量,包括私有的成员变量
        Field age = aClass.getDeclaredField("age");
        Field age01 = aClass.getDeclaredField("name");
        System.out.println(age);
        System.out.println(age01);
    }
}

二、jdk1.8的四个接口

1.Supplier接口(供给型接口):方法
	T get() 得到一个结果
2.Consumer消费型接口:方法
	A.void accept(T t)   在给定的参数上执行此操作(消费的方法)
	B.default Consumer andThen(Consumer<? super T>after)  
		可以连接多个消费型接口(可以进行多次消费)
3.Predicate 断言型接口  用于来进行判断
	A.boolean test(T t)  用于来进行做判断
	B.default Predicate and(Predicate<? super T> other)  并且  &&
	C.default Predicate or(Predicate<? super T> other)  或者  ||
	D.default Predicate negate()  非  !
4.Funtion函数型接口:转换型
	A.default Function<T,V> andThen(Function<? super R,? extends V>after)
		链接多喝函数型接口
	B.R apply(T t) ==>将T类型转换为R类型   用于进行转换

三、stream

1.stream是一个接口,主要用于来进行数据筛选,过滤,相当于流水线
2.stream提供了两类方法:延迟方法(返回的是stream,还可以在上面进行操作)
					  终结方法(返回值不是Stream,后面不能进行操作)
3.1 获取stream对象
1.default Stream stream()  只有单列集合可以使用这个方法(Collection以及其子类)
2.static Stream of(T... values)  数据转换成stream对象

案例

package com.lt.demo06;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class Test01 {
    public static void main(String[] args) {
        //集合转换成stream对象
        List<String> li = new ArrayList<>();
        li.add("张三");
        li.add("李四");
        li.add("王五");
        li.stream().forEach((s)->{
            System.out.println(s);
        });

        //Integer类型的数据转换成stream对象
        Stream.of(10,31,51,12).forEach((Integer i)->{
            System.out.println(i);
        });
    }
}

3.2 常用的方法
1.Stream filter(Predicate<? super T> predicate)
	表示对数据进行过滤(是延迟方法)
2.void forEach(Consumer<? super T> action)
	对stream的书局进行遍历(是延迟方法)
3.long count() 返回stream对象的元素个数(不是延迟方法)
4.Stream limit(long maxSize)  
	返回值的长度的stream的元素(是延迟方法)
5.Stream map(Function<? super T,? extends R>mapper)
	用来做数据转换(是延迟方法)
6.Stream skip(long n)  跳过指定长度的元素(是延迟方法)
7.static Stream concat(Stream<? extends T> a,Stream<? extends T> b)
	将两个stream对象合并成一个stream对象(是延迟方法)

四、注解

4.1 简介
1.注释:用于来解释代码,主要用于来给程序查看
2.注解:用于对代码进行解释说明,主要用于给jvm来进行查看
3.定义:注解(Annotation)也叫元数据, 是一种代码级别的说明,是jdk1.5之后引入的一个新特性,与类、接		口、枚举是一个层次的 它可以声明在包、类、方法、字段、局部变量和方法的参数前面
	用于对这些元素进行说明 注释
	A.是jdk1.5之后的新特性  B.对元素进行说明注释  C.注解:元数据
4.作用分类:
	  A.编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
	  B.代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
	  C.编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
4.2 jdk提供了三个注解
1.@Override 用于检查是否是重写的方法
2.@Deprecated 用于来标注是过时的方法 但是这个方法还是可以使用 例如:Thread线程里面的stop()方法
3.SuppressWarnings 压制黄色的警告线  
	SuppressWarnings("all") 压制所有的黄色的警告线 可以定义在类上 也可以定义方法上 还可以定义在属性上
4.3 自定义注解
1.定义:
	a.元注解
	b.public @interface SuppressWarnings {}
2.本质:一个接口,一个注解在虚拟机里面编译后,进行反编译(反编译:javap 类名.class文件)
	public interface My extends java.lang.annotation.Annotation {}(反编译后得到的)
3.接口里面的成员:常量(不关注)  抽象方法(重点关注)==>注解中的成员方法称为属性
4.注解中的属性的返回值类型:
	A.基本数据类型  四类八种
	B.引用数据类型
	C.string类型
	D.枚举类型
	E.注解类型
	F.以上类型的数组类型
5.注意点:
	A.使用注解的时候 必须给所有的属性(抽象方法)进行赋值
	B.使用注解的时候,如果没有给属性进行赋值,那么设置为默认值
	C.使用注解给数组进行赋值,设置多个值可以使用大括,单个值时候可以省略大括号
	D.如果注解只有一个,而且这个注解的属性名为value,使用注解的时候,可以省略属性名,直接进行赋值

注解:

package com.lt.demo07;

/**
 * @author 悲陌
 */
public @interface Anno {
    int show01();
//    Color show02();
    String show03();

    String[]  show04();
}

枚举:

package com.lt.demo07;

public enum Color {
}

测试类:

package com.lt.demo07;
@Anno(show01 = 19,show03 = "马儿" ,show04 = {"乌龟","母乌龟"})
public class Test01 {
}

4.4 元注解
使用:
	1.@Target 主要用于来表示注解作用的位置
			TYPE 表示在类上面可以使用
			FIELD 表示在属性上可以使用
			METHOD 表示在方法上可以使用
	2.@Retention 主要用于注解是否可以被识别
			RUNTIME 表示项目在运行的时候 jvm可以识别这个注解
	3.@Inherited 用于表示注解是否继续被子类继承的使用
	4.@Documented 用于标注是否在api文档上显示这个注解
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个胖小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值