Java语法基础学习DayThirteen(枚举类和注解)
一、枚举类
1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现。
2.自定义枚举类(JDK1.5以前这么做)
//枚举类
class Season{
//1.提供类的属性,声明为private final
private final String seasonName;
private final String seasonDesc;
//2.声明为final的属性,在私有构造器中初始化
private Season(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.通过公共的方法来调用属性
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
//4.创建枚举类对象,声明为public static final
public static final Season SPRING = new Season("spring","春暖花开");
public static final Season SUMMER = new Season("summer","夏日炎炎");
public static final Season AUTUMM = new Season("autumm","秋风飒爽");
public static final Season WINTER = new Season("winter","白雪皑皑"); public void show(){
System.out.println(seasonName+"的季节是"+seasonDesc+"的!");
}
} public class Test{
public static void main(String[] args){
Season spring = Season.SPRING;
spring.show();//输出spring的季节是春暖花开的!
}
}
3.用enum关键字定义枚举类(JDK1.5后这么做)
(1)常用的方法
A:values():返回一个存放所有枚举对象的数组
B:valueOf(String name):返回指定名字的枚举对象
(2)枚举类实现接口:可以让不同的枚举类对象调用被重写的抽象方法。执行的效果不同(相当于让每个对象都去重写抽象方法)
(3)代码示例
//枚举类
enum Season implements info{
//枚举类对象要放在类的最前面,public static final等可以省略,每个对象用,分开,最后用;结尾
SPRING("spring","春暖花开"){
public void show(){//重写show()方法
System.out.println("春天在哪里");
}
},
SUMMER("summer","夏日炎炎"){
public void show(){//重写show()方法
System.out.println("生如夏花");
}
},
AUTUMM("autumm","秋风飒爽"){
public void show(){//重写show()方法
System.out.println("秋天是分手的季节");
}
},
WINTER("winter","白雪皑皑"){
public void show(){//重写show()方法
System.out.println("冬天里的一把火");
}
}; private final String seasonName;
private final String seasonDesc; private Season(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 "["+seasonName+","+seasonDesc+"]";
} } interface info{
void show();
}
public class Test{
public static void main(String[] args){
//1.values()方法
Season[] seasons = Season.values();
for(int i = ;i < seasons.length;i++){
System.out.println(seasons[i]);//遍历输出[spring,春暖花开],[summer,夏日炎炎]...
}
//2.valueOf(String name)方法
String str = "AUTUMM";
Season sea = Season.valueOf(str);
System.out.println(sea);//输出[autumm,秋风飒爽] sea.show();//输出秋天是分手的季节
}
}
二、注解Annotation
1.概述
从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)。Annotation其实就是代码里的特殊标记,这些标记在编译、类加载、运行时被读取,
并执行相应处理。通过使用Annotation,可以在不改变原有逻辑的情况下,在源文件嵌入一些补充信息。
Annotation 可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的“name=value”对中。
Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据。
2.JDK内置的3个基本注解类型
(1)@Override:限定重写父类方法,该注释只能用于方法
(2)@Deprecated:用于表示某个程序元素(类,方法等)已经过时,但还是可以用
(3)@SuppressWarnings:抑制编译器警告
3.自定义注解
public @interface MyAnnotation{
String value() default "hello";
}
@MyAnnotation(value = "java_learn")//使用
public class Test{
}
4.元注解:专门用于修饰其他注解的注解
(1)@Retention:用于修饰一个Annotation定义,指定该Annotation的生命周期,通过对RetentionPolicy类型的成员变量value赋值实现。
A:@Retention(RetentionPolicy.SOURCE):编译器直接抛弃这种注解
B:@Retention(RetentionPolicy.CLASS):编译器将把注释记录在class文件中,当运行Java程序时,JVM不会保留注解。这是默认的值
C:@Retention(RetentionPolicy.RUNTIME):编译器将把注释记录在class文件中,当运行Java程序时,JVM会保留注解,程序可以通过反射获取该注解。
(2)@Target:用于指定被修饰的Annotation能用于修饰哪些程序元素。也拥有一个成员变量value。
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE,FIELD,METHOD,PAPAMETER,CONSTRUCTOR,LOCAL_VARIABLE})//TYPE指class,interface;FILED指Field
public @interface MyAnnotation{
String value() default "hello";
}
(3)@Documented:被修饰的Annotation将能被javadoc工具提取成文档,使用的前提是Retention必须为RUNTIME。
(4)@Inherited:被修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类自动具有该注解。
Java语法基础学习DayThirteen(枚举类和注解)的更多相关文章
- Java语法基础学习DaySeventeen(多线程续)
一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...
- Java语法基础学习DayEighteen(常用类)
一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...
- Java语法基础学习DayThree
一.流程控制语句补充 1.switch语句 格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体 ...
- Java语法基础学习DaySeven
---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean byte——Byte ...
- Java语法基础学习DaySix
一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...
- Java语法基础学习DayTwentyOne(网络编程)
一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...
- Java语法基础学习DayTwenty(反射机制续)
一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...
- Java语法基础学习DayNineteen(反射机制)
一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...
- Java语法基础学习DaySixteen(多线程)
一.多线程的创建 1.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
随机推荐
- html5降龙十八掌-函数,对象,数组的练习
<script> function x1(){ var gj={}; gj.name="侯伟东"; gj.hp=500; ...
- 0007-20180403-python-自动化基础学习000--while-if 循环实操
python-自动化基础学习000 Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64 ...
- MSG结构体和WndProc窗口过程详解
MSG结构体和WndProc窗口过程对于Windows编程非常重要,如果不了解它们,可以说就没有学会Windows编程. MSG结构体 MSG 结构体用来表示一条消息,各个字段的含义如下: typed ...
- eclipse自定义快捷键(模板)
window->Preferences->Java->Editor->Templates https://blog.csdn.net/changqing5818/article ...
- 校验input 修改当前值的校验获取值方式
<input style="height: 18px; width: 90px;" name="nowQty" value="${ad.nowQ ...
- vscode设置代码块
需要注意一点是,内容主体里面带有缩进的地方不能用 Tab,只能用空格
- Day 10733 使用独立安装包安装.Net Framework 4.6.2时,提示『无法建立到信任根颁发机构的证书链』
出现该问题的原因是未能更新本机的受信任证书颁发机构证书列表,导致安装包验证失败,以下几种情况可以造成此问题: 1.安装该运行库的系统未接入互联网: 2.安装该运行库的系统所在的网络环境,屏蔽了对微软受 ...
- redux-thunk的理解
问题:1.redux-thunk要解决什么问题? 要解决异步请求问题,Action发出以后,Reducer立即算出State,这叫做同步:Action发出以后,过一段时间再执行 Reducer,这就叫 ...
- windows10下安装Redis
已有64位的Redis-x64-3.2.100.msi,点击以安装
- P4312 [COCI 2009] OTOCI / 极地旅行社
思路 LCT维护和的板子 注意findroot的时候要先access一下,修改点权之前要先splay到根 代码 #include <cstdio> #include <algorit ...