1.注解
用在类,属性,方法,构造方法,参数上,作为程序的一部分
常见注解:
@Override 用在方法上,表示此方式是重写的方法
@Deprecated 用在方法上,表示此方法已经过时,不推荐使用
@SuppressWarnings("serial") 用在类,属性,方法上,用来忽略指定的警告
元注解:对注解进行注解的注解
@Target : 注解的使用范围
ElementType.TYPE; 类
ElementType.FIELD 属性
ElementType.METHOD 方法
ElementType.PARAMETER 参数
ElementType.CONSTRUCTOR 构造方法
ElementType.LOCAL_VARIABLE 局部变量
ElementType.ANNOTATION_TYPE 注解类型
ElementType.PACKAGE 包
ElementType.TYPE_PARAMETER 类型参数
ElementType.TYPE_USE 类型
@Retention: 说明注解存在的生命周期
RetentionPolicy.SOURCE 只在源代码中存在,编译成class的时候会丢弃
RetentionPolicy.CLASS 存在于class文件中,加载成Class对象的时候会丢弃
RetentionPolicy.RUNTIME 程序运行时还存在
@Documented :此注解是否可文档化
@Inherited: 注解是否可被继承
自定义注解
作业:
1.梳理类的加载与反射机制
2.常用的注解
3.元注解类型
4.如何自定义注解
2. 泛型
泛型:类型参数化
定义的时候没有明确具体的类型,等到调用的时候再确定要使用的类型
1.泛型类
public class MyClass<A>{}
在调用泛型类的时候如果没有将泛型具体化,默认会用Object代替
2.泛型接口
public interface MyInterface<D> {
public void test(D d);
}
泛型接口的实现必须是泛型类:
public class MyClass<D> implements MyInterface<D>{
@Override
public void test(D d) {
}
}
3.泛型方法
public <E> void change(E e){}
使用extends限定泛型的范围
public <E extends 父类> void change(E e){}
4.使用?通配符
public void abc(ArrayList<? extends Number> list){
for(Number m:list){
System.out.println(m);
}
}
3.数据的加密和解密
1.Base64:
加密:
Encoder coder = Base64.getEncoder();
String mimaStr = coder.encodeToString(msg.getBytes());
解密:
Decoder coder = Base64.getDecoder();
byte[] bs = coder.decode(mima);
String msg = new String(bs);
2.MD5
3.SHA