注解

生成文档相关注解

在编译时进行格式检查(JDK内置三个注解)

@Override

@Deprecated

@SuppressWarnings :抑制编译器警告

框架=注解+反射+设计模式

根据代码依赖性,实现替代配置文件

image.png
SOURCE:会被编译器抛弃,即不会加载到class文件中
CLASS:会被保留在class文件中,不会被加载到内存里

简单利用反射测试@inherited的继承性

import org.junit.Test;

import java.lang.annotation.Annotation;


public class AnnotationTest {
    public static void main(String[] args) {
        System.out.println("启动");

    }

    @Test
    public void testGetAnnotation() {
        Class clazz = Student.class;
        Annotation[] annotation = clazz.getAnnotations();
        for (int i = 0; i < annotation.length; i++) {
            System.out.println(annotation[i]);

        }
    }
}

@MyAnnotation
class Person {
    private String name;

}

class Student extends Person {

}

JDK1.8中注解的新特性

image.png
实现repeat的实例:

MyAnnotation.java
package Annotation;

import java.lang.annotation.*;
@Repeatable(MyAnnotations.class)
@Inherited
@Retention(RetentionPolicy.RUNTIME)//生命周期
//@Target(ElementType.ANNOTATION_TYPE)//能用来修饰那些结构
public @interface MyAnnotation {
    String value();//default "可以在此指定默认值";//注解成员变量义务参数方法来声明
}

MyAnnotations.java
package Annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
//@Target(ElementType.ANNOTATION_TYPE)
public @interface MyAnnotations {
    MyAnnotation[] value();//如果要求可重复性,此位置只能用value,用values会在MyAnnotation中报错
}

AnnotationTest.java
@MyAnnotation(value = "hi1")
@MyAnnotation(value = "hi")
class Person {
    private String name;

}

IO流

常见的一些流

处理流包含字节流
输入流,输出流
字节流,字符流

序列化

一个自定义类要实现序列化:
首先要实现serializable接口
提供一个常量serialVersionUID
其包含所有属性都要实现serializable

RandomAccessFile:

image.png
有seek方法,将指针调到固定角标位置。
使用例子:大文件的断点续传

NIO(New IO/None-Blocking IO)jdk1.4添加

IO是基于流的
NIO是基于缓冲区的,基于通道的IO操作,更加高效

NIO2 jdk1.7添加

提供升级版的File类Path,通过Paths调用
image.png

反射

枚举

分为自定义类和enum类
自定义类中:常量声明为private final
实例声明为public static fianl
enum类中:开始先声明所含对象,中间"'"隔开,结尾“;”

enum Season {
    SPRING("春天", "Spring"),
    SUMMER("夏天", "summer"),
    AUTUMN("秋天", "autumn");
    private final String Chinese;
    private final String English;

    private Season(String c, String e) { //必须是private
        this.Chinese = c;
        this.English = e;
    }

    public String getChinese() {
        return Chinese;
    }

    public String getEnglish() {
        return English;
    }


    public String toString() {
        return "Season{" +
                "Chinese='" + Chinese + '\'' +
                ", English='" + English + '\'' +
                '}';
    }
    //toString一般不重写
}

public class EnumTest {
    public static void main(String[] args) {
        Season summer = Season.SUMMER;
        System.out.println(summer);
    }
}

枚举类的常用方法

toString():已经重写过toString方法,调用返回对象名称,如上例中返回SPRING等。也可根据自己需要重写
values():返回一个枚举类的数组,适合遍历枚举所含值
valueOf(String s):返回字符串对应的枚举对象

枚举类实现接口:

如果想每一个对象各自实现接口,枚举类中的每一个对象后加{}实现抽样方法

interface Info{
    void show();
}

enum Season implements Info{

    SPRING("春天", "Spring"){
        @Override
        public void show() {
            System.out.println("春天调用的抽样方法");
        }
    },
    SUMMER("夏天","summer"){
        public void show(){
            System.out.println("夏天调用的抽样方法");
        }
    },
    AUTUMN("秋天", "autumn"){
        public void show(){
            System.out.println("秋天调用的抽样方法");
        }
    };

image.png

Q.E.D.