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.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
随机推荐
- 使用 mysqladmin debug 查看死锁信息
使用 mysqladmin debug 查看死锁信息 mysqladmin -S /mysql/data/mysql.sock debug 然后在error日志中,会看到: 11 lock struc ...
- Vue 组件&组件之间的通信 之全局组件与局部组件
在上篇博客中介绍了组件,在注册组件的简写中就用到了全局组件 //注册组件的简写方式 Vue.component('my-componenta',{ template:'<h2>hello ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- centos6安装配置zabbix3主控端
Centos 6.5 Zabbix 3.0.4 zabbix分为zabbix-server(主控端)和zabbix-agent(被控端),本文只介绍server: 安装mysql mysql建议使用5 ...
- CentOS 6.5安装squashfs-tools
在sourceforge.net网站下载源码包 需要安装的依赖项有zlib-devel.xz-devel.x86_64 修改Makefile文件以支持xz压缩的squashfs文件,去掉Makefil ...
- opencv3.0之后IPLimage转换成MAT的问题
转自http://www.cnblogs.com/edver/p/5187190.html IplImage * ipl = ...; cv::Mat m = cv::cvarrToMat(ipl); ...
- servlet登录界面进行用户名和密码验证
一.建立LoginServlet项目并建立如下目录 二.在Login.html中编写登录界面代码 三.在css文件中新建login.css文件 四.在src文件中添加LoginServlet.java ...
- 论文笔记:Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries
Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries 2018-09-18 09:58:50 Pape ...
- PotPlayer安装与配置
目录 1.简介 2.安装 3.设置 基本选项设置: 播放选项设置: PotPlayer皮肤设置: 1.简介 PotPlayer一款小巧简单的视频播放软件,具有于强大的定制能力和个性化功能. 2.安装 ...
- 【转】 RGB各种格式
转自:https://blog.csdn.net/LG1259156776/article/details/52006457?locationNum=10&fps=1 RGB组合格式 名字 ...