java学习(7)(枚举,注解,接口)

枚举和注解

枚举类型

可以作为顶层声明,也可以像内部类一样在其他类的内部声明,但不能在方法内部声明枚举。

枚举类型的实例是常量。

在枚举类型的声明中,除了常量外还可以声明构造方法,成员变量和其他方法。但枚举常量必须在任何其他成员的前面声明。

public enum Direction{
    EAST,SOUTH,WEST,NORTH;
}
//enum:关键字
//Direction:枚举类型名

任何枚举类型都隐含地继承了java.lang.Enum抽象类,Enum类又是Object类的子类,同时实现了Comparable接口和Serializable接口。

public static E[] values():返回一个包含所有枚举常量的数组。
public static valueOf(String name):返回指定名字的枚举常量。
public final compareTo(E o):返回当前枚举对象与参数枚举对象的比较结果。
public final String name():返回枚举常量名。
public final int ordinal():返回枚举常量的顺序值(基于常量声明的顺序,从0开始)。
public String toString():返回枚举常量名。
public class EnumDemo[
    public static void main(String[] args){
        //声明一个枚举类型变量,并用一个枚举赋值
        Direction left = Direction.WEST;
        System.out.println(left);//输出WEST
        //输出每个枚举对象的序号
        for(Direction d:Direction.values()){
            System.out.println(d。name()+",序号"+d.ordinal());
        }
    }
]
注解类型
作用
  • 为编译器提供信息。编译器可以使用注解检测错误或阻止编译警告。

  • 编译时或部署时处理,软件工具可以处理注解信息生成代码、XML文件等。

  • 运行时处理。有些注解在运行时可以被检查。

注解类型是一种特殊的接口类型,注解是注解类型的一个实例。

注解中包含的信息采用“键/值”对的形式,可以有零个或多个“键/值”对,且每个键有一个特定类型(如String,int......)。

没有“键/值”对的注解类型称作标记注解类型,如果注解只需要一个键值对,则称为单值注解类型。

对每个没有默认值的元素,都应该以name=value的形式对元素初始化。

3个注解类型

java语言中定义了3个注解类型,供编译器使用,定义在java.lang包中。

Override

是一个标记注解类型,可以用在一个方法的声明中,使用该注解可以防止程序员在覆盖某个方法时出错。如果要覆盖的方法不是父类中的方法,编译器会产生一个编译错误。

Deprecated

是一个标记注解类型,可以应用于某个方法或某个类型,指明方法或类型已被弃用。警告用户不应该使用或覆盖该方法。

SuppressWarnings

指示编译器阻止某些类型的警告,具体的警告类型可以用初始化该注解的字符串来定义。该注解可应用与类型、构造方法、方法、成员变量、参数以及局部变量。传递一个String数组,包含需要阻止的警告。

@SuppressWarnings(value={"unchecked","serial"})
//unchecked:未检查的转换警告
//deprecation:使用了不推荐方法的警告
//serial:实现Serializable接口但没有定义serialVersionUID常量的警告
//rawtypes:如果使用旧的语法创建泛型类对象时发出的警告
//finally:任何finally子句不能正常完成的警告
//fallthrough:switch块中某个case后没有break语句的警告
定义注解类型(@interface)

默认情况下,所有的注解类型都扩展了java.lang.annotation.Annotation接口。

在注解中声明的方法称为注解类型的元素,类似于接口中的方法声明,没有方法体,但有返回类型。元素的类型只能是基本类型、String、枚举类型、其他注解类型,且元素不能声明任何参数。

可用default关键字为元素指定默认值。

public @interface ClassInfo{
    String created();
    String author() defaule 0;
}

如果注解类型只有一个元素,这个元素应该命名为value。

元注解

对注解进行标注的注解。

Documented:用于对一个注解类型的声明进行标注 。

Inherited:用Inherited标注的注解类型的任何实例都会被继承。

Retension:指明被标注的注解保留多长时间。

SOURCE:仅存于源文件中。

CLASS:保存在类文件中。

RUNTIME:表示要被JVM保存的注解。

@Retension(value=SOURCE)

Target:指明程序元素可以被标注的注解类型进行标注。

ANNOTATION_TYPE:可以对注解类型标注。

CONSTRUCTOR:构造方法

FIELD:成员的声明

LOCAL_VARIABLE:局部变量

METHOD:方法

PACKAGE:包

PARAMETER:参数声明

TYPE:类型声明

@Target(value=METHOD)对Override使用,只适用于方法声明。

接口

定义

public interface InterfaceName{
    //定义常量、抽象方法、静态方法、默认方法
}
  • 接口不能用new运算符创建接口的实例。

  • 接口中的抽象方法可省略修饰符。

  • 一个接口可以继承一个或多个接口。

  • 接口的静态方法使用“接口名.方法名()”访问。接口的静态方法不能被子接口继承,也不被实现类继承。

  • 可以给接口中任何方法提供一个默认实现,称为默认方法,用default关键字定义。

  • 默认方法需要通过引用变量调用。

  • 如果一个类从父类和接口继承了同样的方法,采用“类比接口优先”原则。

实现

public class ClassName implements InterfaceList{
    //类体定义
}
  • 一个类可以实现多个接口,用逗号隔开。

  • 如果实现接口的类不是abstract类,则在类的定义部分必须实现接口中的所有抽象方法。

  • 接口方法的访问修饰符都是public,所以类在实现方法时,必须显示使用public修饰符。

  • 一个类实现多个接口就要实现每个接口中的抽象方法,接口中的常量和默认方法都被实现类继承,但接口中的静态方法不能被继承。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值