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.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
随机推荐
- Mysql关于时间排序的问题
SELECT * FROM table_name WHERE deleted = 0 order by create_time DESC 当用户使用DESC(降序时),最终得到的结果集,时间早的在前面 ...
- Linux系统查看本机ip地址
1. 使用ifconfig命令查看inet对应的ip地址就是 2. 如果不能使用ifconfig命令,需要安装net-tools工具,使用yum install net-tools安装即可.
- P3195 [HNOI2008]玩具装箱TOY(斜率优化dp)
P3195 [HNOI2008]玩具装箱TOY 设前缀和为$s[i]$ 那么显然可以得出方程 $f[i]=f[j]+(s[i]-s[j]+i-j-L-1)^{2}$ 换下顺序 $f[i]=f[j]+( ...
- Docker Kubernetes 容器扩容与缩容
Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...
- Python 事件驱动了解
事件驱动 gevent协程可实现自动切换,协程在遇到IO时会进行切换,到另外一个请求,那协程是如何得知在什么时候在切换回去呢? 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一 ...
- Log4j配置记录
log4j的配置文件就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境. 1.配置文件 log4j配置文件的基 ...
- Java中static的用法解析
知识点1.static关键字a.可以修饰变量,方法,代码块b.修饰的变量和方法可以使用类名.变量名/类名.方法名调用c.static修饰的资源为静态资源,在类加载的时候执行d.在静态方法中只能调用静态 ...
- springmvc多个视图解析器
<property name="viewResolvers"> <list><!-- 多个视图解析器 --> <bean class=&q ...
- Windows Server 2008 R2 下载地址
以下资源均来自微软 MSDN,是原汁原味的原版系统资源,值得系统爱好者收藏.以下多数链接是 ed2k 链接,推荐使用国外开源的 eMule 下载,亦可使用迅雷,但使用 eMule 更有利于共享资源. ...
- Docker常用命令详解
docker ps 查看当前正在运行的容器 docker ps -a 查看所有容器的状态 docker start/stop id/name 启动/停止某个容器 docker attach id 进入 ...