枚举&注解
枚举:自定义枚举类
使用Enum关键字定义的枚举类
注解:jdk内置的基本注解类型(3个)
自定义注解类型
对注解进行注解(元注解4个)
利用反射获取注解信息(反射部分涉及)
自定义枚举类:
TestSeason
package com.aff.Gen;
//自定义的枚举类
public class TestSeason {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
spring.show();
System.out.println(spring.getSeasonName());
}
} // 枚举类
class Season {
// 1. 提供类的属性,声明private final
private final String seasonName;
private final String seasonDesc; // 2.声明为final的属性,在构造器中初始化
public Season(String seasonName, String seasonDesc) {
super();
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
} // 3.通过公共的方法来调用属性
public String getSeasonName() {
return seasonName;
} public String getSeasonDesc() {
return seasonDesc;
} // 4.创建枚举类的对象 president
public static final Season SPRING = new Season("spring", "春暖花开");
public static final Season SUMMER = new Season("Summer", "夏日炎炎");
public static final Season AUTUMN = new Season("Autumn", "秋高气爽");
public static final Season WINTER = new Season("Winter", "白雪皑皑"); @Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
} public void show() {
System.out.println("这是一个季节");
}
}
使用Enum关键字定义的枚举类:
TestSeasonEnum
package com.aff.Gen; //使用Enum关键字定义的枚举类
/* 常用的方法: values() :以数组的形式返回整个枚举类的对象。
valuesOf(String name) : 传入字符串,返回枚举类的对象
如何让枚举类实现接口: 可以让不同枚举类的对象调用被重写的抽象方法,执行的效果不同
相当于让每一个对象从重写抽象方法;
*/
public class TestSeasonEnum {
public static void main(String[] args) {
Season1 spring = Season1.SPRING;
System.out.println(spring);//Season1 [seasonName=spring, seasonDesc=春暖花开]
spring.show();//c春天在那
System.out.println(spring.getSeasonName());//spring //values()
Season1[] season = Season1.values();
for(int i = 0;i<season.length;i++){
System.out.println(season[i]);
} //valuesOf(String name); 要求传入的形参name是枚举类的对象的名字
//否则,报 java.lang.IllegalArgumentException
String str = "SPRING";
Season1 s = Season1.valueOf(str);
System.out.println(s);//Season1 [seasonName=spring, seasonDesc=春暖花开]
s.show();//c春天在那 //枚举类:线程的state
Thread.State[] state = Thread.State.values();
for(int i = 0;i<state.length;i++){
System.out.println(state[i]);
}
}
}
interface Info{
void show();
} // 枚举类
enum Season1 implements Info{
SPRING ("spring", "春暖花开"){
public void show() {
System.out.println("c春天在那");
}
},
SUMMER ("Summer", "夏日炎炎"){
public void show() {
System.out.println("这是一个夏节");
}
},
AUTUMN ("Autumn", "秋高气爽"){
public void show() {
System.out.println("这是一个秋节");
}
},
WINTER ("Winter", "白雪皑皑"){
public void show() {
System.out.println("这是一个冬节");
}
}; private final String seasonName;
private final String seasonDesc; private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
} public String getSeasonName() {
return seasonName;
} public String getSeasonDesc() {
return seasonDesc;
} @Override
public String toString() {
return "Season1 [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
} /* public void show() {
System.out.println("这是一个季节");
}*/
}
注解:
package com.aff.Gen;
import java.util.ArrayList;
import java.util.List;
/*
注解
1.jdk提供的常用的注解
@Override:限定重写父类方法,该注释只能用于方法
@Deprecated:用于表示某个程序 (类,方法等) 已过时
@SuppressWarnings:抑制编译器警告
2.如何自定义一个注解
3.元注解
1>@Retention:
|----只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间,
@Rentention 包含一个 RetentionPolicy 类型的成员变量
使用 @Rentention 时必须为该 value 成员变量指定值:
|---- RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释
|---- RetentionPolicy.CLASS: 编译器将把注释记录在 class 文件中.
当运行 Java 程序时, JVM 不会保留注解。 这是默认值
|---- RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中.
当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释
2>@Target
|---- 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素.
@Target 也包含一个名为 value 的成员变量.
3>@Documented
|---- 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
定义为Documented的注解必须设置Retention值为RUNTIME。 4>@Inherited
|---- 被它修饰的 Annotation 将具有继承性.
如果某个类使用了被 @Inherited 修饰的 Annotation,
则其子类将自动具有该注解
实际应用中,使用较少
*/
public class TestAnnotation {
public static void main(String[] args) {
Person p = new Student();
p.walk(); @SuppressWarnings({ "rawtypes", "unused" })
List list = new ArrayList();
}
}
@MyAnnotation("afangfang")
class Student extends Person {
@Override
public void walk() {
System.out.println("学生走轮");
}
@Override
public void eat() {
System.out.println("学生吃饭");
}
} @Deprecated
class Person {
String name;
int age;
public Person() {
super();
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void walk() {
System.out.println("走轮");
}
public void eat() {
System.out.println("吃饭");
}
}
自定义注解:
MyAnnotation
package com.aff.Gen; //自定义的注解
public @interface MyAnnotation {
String value() default "hello"; }
枚举&注解的更多相关文章
- Java 枚举&注解
枚举类 如何自定义枚举类 JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 若枚举只有一个成员, 则可以作为一种单例模式的实现方式 //枚举类 class Se ...
- 在Android中使用枚举注解而不是枚举
Enums often require more than twice as much memory as static constants. You should strictly avoid us ...
- Java笔记--枚举&注解
1.自定义枚举类的实现,例: class Season{ //1,提供类的属性,声明为rivate final private final String name; private final Str ...
- hibernate的枚举注解@Enumerated
@Enumerated(value=EnumType.ORDINAL)采用枚举类型的序号值与数据库进行交互, 此时数据库的数据类型需要是数值类型,例如在实际操作中 CatTest ct = new C ...
- 利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台
需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举 ...
- 关于Java中枚举Enum的深入剖析
在编程语言中我们,都会接触到枚举类型,通常我们进行有穷的列举来实现一些限定.Java也不例外.Java中的枚举类型为Enum,本文将对枚举进行一些比较深入的剖析. 什么是Enum Enum是自Java ...
- JavaSE复习(八)反射和注解
反射 框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化编码 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 可以在程序运行过程中,操作这些对象. 可以解耦,提高程 ...
- JAVA注解引发的思考
自从JDK5開始Java開始添加了对元数据(MetaData)的支持,也就是注解(Annotation),到JDK7时已经有四种基本注解,新添加了一种@SafeVarargs. @Override注解 ...
- java注解使用总结
2005年,sun公司推出了jdk1.5,同时推出的注解功能吸引了很多人的目光,使用注解编写代码,能够减轻java程序员繁琐配置的痛苦. 使用注解可以编写出更加易于维护,bug更少的代码. 注解是什么 ...
随机推荐
- SVN 部署(基于 Linux)
1.通过 yum 命令安装 svnserve,命令如下: # 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 yum -y install subversion # 若需查看 ...
- Android | 带你零代码实现安卓扫码功能
目录 小序 背景介绍 前期准备 开始搬运 结语 小序 这是一篇纯新手教学,本人之前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可以使用一个扫码demo,华为scankit真是新手的福音-- ...
- 如何使用Golang实现一个API网关
你是否也存在过这样的需求,想要公开一个接口到网络上.但是还得加点权限,否则被人乱调用就不好了.这个权限验证的过程,最好越简单越好,可能只是对比两个字符串相等就够了.一般情况下我们遇到这种需要,就是在函 ...
- Zabbix 添加vmware esxi监控
1) Import the provided template. - TEMPLATE.VMWARE_ESXi_6.0_CIM.xml 2) Install Dependencies: # yum - ...
- 【Hadoop离线基础总结】linux的shell编程
linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...
- HDU-6351 Beautiful Now 全排列暴力
Beautiful Now 题意 给出一个最大为10^9的数字n,以及一个k,你最多交换n中任意两个位置的数字k次,问形成的最大数字和最小数字. 思路 看到这题,我靠这题暴力交换一下,不难啊,咋没人做 ...
- 如何使用 frp 实现内网穿透
这有一个专注Gopher技术成长的开源项目「go home」 背景 作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了. ...
- linux wc 的用法-linux 下统计行数、单词数、字符个数
linux wc 的用法-linux 下统计行数.单词数.字符个数 wc : wc -l 统计有多少行 wc -w 统计有多少个单词 wc -c 统计有多少个字符
- kali2020解决安装pip的问题
在以前的版本中,我们需要安装pip时,只需要执行下面命令即可安装: apt-get install python-pip 但是在更新到2020.1以后,上面的命令安装会提示无法定位安装包的问题! 解决 ...
- 黑马程序员_毕向东_Java基础视频教程——进制的相互转换(随笔)
进制的相互转换 二进制转十进制: 原理对十进制数进行除2运算(余数不是0 就是1) 6 的二进制: 6 / 2 = 3--0 3 / 2 = 1--1 1 / 2 = 0--1 余数倒序排列输出:11 ...