《JavaEE》第八周day5学习笔记-枚举、注解、内部类

一、枚举

(一)枚举概念


枚举:enum(由JDK1.5版本引入),是一种特殊的数据结构,具有Java类的特点,但比Java类有更多约束。
创建一个枚举:

public enum TypeEnum {
    VIDEO,AUDIO,TEXT,IMAGE;
}

枚举可以有变量和方法,并且可实现接口,但枚举继承自java.lang.Enum类,因此不能再继承其他类。
如果为枚举值添加参数,则必须为枚举增加构造函数,相当于自我调用构造函数进行传参。

public enum TypeEnum {
	VIDEO(1, "视频"), AUDIO(2, "音频"), TEXT(3, "文本"), IMAGE(4, "图像");
	int value;
	String name;
	TypeEnum(int value, String name) {
		this.value = value;
		this.name = name;
	}
	public int getValue() {return value;}
	public String getName() {return name;}
}

(二)枚举的常用方法


  • int compareTo(E o) :内置比较方法
  • Class getDeclaringClass():返回枚举类型的Class对象
  • String name() :返回枚举常量名
  • int ordinal() :返回枚举常量序号,首位为0
  • String toString():返回枚举常量名(JDK推荐方法!)
  • static <T extends Enum> T valueOf(Class enumType, String - name) :返回enumType枚举中"name"名称的常量
  • static T[] values():返回枚举的所有值

二、注解

(一)注解概念


注解:Annotation(由JDK1.5版本引入),元数据,代码级别的解释说明,与接口、类处于同一级别,注解首字符为@,类似于生活中的标签,对代码作出解析(检查)。

(二)常见的注解


  • @Override:继承
  • @Deprecated:过时
  • @SuppressWarnings:抑制(传参通常为"all")
  • @SafeVarargs:忽略泛型告警
  • @FunctionalInterface:标识匿名函数
  • @Repeatable:注解可重复(例如一级注解为二级注解的数组,二级注解通过“Repeatable一级注解的反射”,存储末端传入的变量)

(三)自定义注解


public @interface 注解名称{
属性列表;
}

注解本质上是接口,继承自Annotation接口。
属性的返回值要求:基本数据类型、String、枚举、注解、前面几种的数组
属性赋值的特性:
1.如果使用default关键字给属性赋值,则使用注解时可以不赋值;
2.如果只有一个属性需要赋值且属性名为value,则赋值时可以省略value;
3.数组赋值时使用{“值1”,“值2”},如果输入中仅有一个值,则{}可以省略。

(四)元注解


元注解的含义:用于描述注解的注解。
1.@Target:描述注解的作用点

  • ElementType.TYPE :注解只能修饰类和接口
  • ElementType.FIELD :注解只能修饰属性
  • ElementType.METHOD :注解只能修饰方法
  • ElementType.PARAMETER :注解只能修饰参数
  • ElementType.CONSTRUCTOR :注解只能修饰构造方法
  • ElementType.LOCAL_VARIABLE :注解只能修饰局部变量
  • ElementType.TYPE_USE :注解可以修饰所有内容(JDK1.8)

2.@Retention:描述注解的持续阶段

  • RetentionPolicy.SOURCE:注解保留至源文件
  • RetentionPolicy.CLASS:注解保留至编译文件“.class"
  • RetentionPolicy.RUNTIME:注解保留至运行时(内存)

3.@Documented:描述注解是否被提取至API文档
4.@Inherited:描述注解是否被子类继承

(五)解析注解


1.获取注解定义位置的对象(Class、Method、Field)
2.判断是否存在注解:isAnnotationPresent(对象);
3.获取注解:getAnnotation(对象)
4.调用注解对象的方法:注解.属性值名称;

三、内部类

将一个类的定义放在里另一个类的内部,称为内部类,使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。但是内部类不建议嵌套,会破坏代码结构。

public class Outer{
//外部类区域
	class Inner{
//内部类区域
	}
}

(一)成员内部类


1.可以是任何的访问修饰符。
2.外部类如何访问内部类信息,必须new之后通过(.)操作符访问。
3.内部类可以直接使用外部类的任何信息,如果属性或者方法发生冲突,调用外部类.this.属性或者方法。
4.其它类访问内部类的方式:
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.inner_show();//访问成员内部类的普通方法

(二)静态内部类


1.作为静态成员属性存在,可以被任意的权限修饰符修饰。
2.静态内部类的方法只能访问外部类的static关联的信息。
3.利用 外部类.内部类 引用=new 外部类.内部类(); 然后利用引用.成员信息(属性、方法)调用。
Outer.Inner oi = new Outer.Inner();
oi.innerShow();//访问静态内部类的普通方法
4.访问内部类的静态信息,直接外部类.内部类.静态信息。
Outer.Inner.innerStaticShow();//此时,外部类未加载,内部类加载
5.静态内部类可以独立存在,不依赖于其他外围类。

(三)局部(方法)内部类(很少遇到)


1.不能使用任何的访问修饰符。
2.会生成两个.class文件,一个是Outer.class ,另一个是Outer$LocalInner.class。
3.局部内部类只能访问方法中声明的final类型的变量。

(四)匿名内部类


  1. 匿名内部类没有访问修饰符。
  2. 使用匿名内部类时,这个new之后的类首先要存在,其次要重写new后的类的某个或某些方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值