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.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
随机推荐
- RxJava 详解——简洁的异步操作(二)
上次说的两个例子,事件的发出和消费都是在同一个线程的.如果只用上面的方法,实现出来的只是一个同步的观察者模式.观察者模式本身的目的就是异步机制,因此异步对于 RxJava 是至关重要的.而要实现异步, ...
- python split()函数的用法
转自: https://blog.csdn.net/orangefly0214/article/details/80810449 函数:split() Python中有split()和os.path. ...
- flask 使用Flask-Migrate迁移数据库(创建迁移环境、生成迁移脚本、更新数据库)
使用Flask-Migrate迁移数据库 在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据.在生产环境下,没有人想把数据都删除掉,这时需要使用数据库迁移工具来完 ...
- jmeter如何玩之badboy + jmeter并发性能测试
今天下班时公司安排了一个同事来对项目做集群性能测试,怀着对性能测试的好奇心,下班后没有着急离开,而是等待 那位同事的到来,然后在旁边学习了下如何使用Badboy和jmeter做性能测试. 1. 软件介 ...
- 论文笔记【二】Making Sense of Word Embeddings
摘要 1.作者提出了一种新的简单有效的方法,用于学习词义嵌入word sense embedding 2.传统的两种方法:(1)直接从语料库中学习词义:(2)依赖词汇资源的语义库 研究方法的创新点:通 ...
- C++的重载操作符(operator)介绍(转)
本文主要介绍C++中的重载操作符(operator)的相关知识. 1. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将 ...
- 复旦大学2016--2017学年第一学期(16级)高等代数I期末考试第七大题解答
七.(本题10分) 设 $A,B$ 均为 $m\times n$ 阶实矩阵, 满足 $A'B+B'A=0$. 证明: $$r(A+B)\geq\max\{r(A),r(B)\},$$并且等号成立的充 ...
- freeswitch 显示主叫名称和主叫号码
1.指定主叫号码 origination_caller_id_number 参数来指定显示的主叫号码 2.指定主叫名称 origination_caller_id_name 参数来指定显示的主叫名称 ...
- DDD 之 Multiple Canonical Models
MultipleCanonicalModels Scratch any large enterprise and you'll usually find some kind of group focu ...
- linux解压类型总结
1.*.tar 用 tar –xvf 解压2.*.gz 用 gzip -d或者gunzip 解压3.*.tar.gz和*.tgz 用 tar –xzf 解压4.*.bz2 用 bzip2 -d或者用b ...