祖庙网站建设,wordpress淘口令插件,网站首页设计原则,浙江常升建设有限公司网站一、枚举1.基本介绍#xff08;1#xff09;枚举对应英文 enumeration#xff0c;简写为 enum#xff08;2#xff09;枚举是一组常量的集合#xff08;3#xff09;可以理解为#xff1a;枚举属于一种特殊的类#xff0c;里面只包含一组有限的特定的对象2.实现方式1枚举对应英文 enumeration简写为 enum2枚举是一组常量的集合3可以理解为枚举属于一种特殊的类里面只包含一组有限的特定的对象2.实现方式1自定义类实现枚举1步骤1.不需要提供setXxx方法因为枚举对象的值通常为只读2.对枚举对象/属性使用 finalstatic共同修饰实现底层优化3.枚举对象名通常使用全部大写遵循敞亮的命名规范4.枚举对象根据需要也可以有多个属性
package com.figiting.enum_;/*** version 1.0* autor 疯小丢*/
public class Enumeration01 {public static void main(String[] args) {System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINNER);}
}class Season{private String name;private String desc;//定义了四个对象public static final Season SPRING new Season(春天,温暖);public static final Season SUMMER new Season(夏天,炎热);public static final Season AUTUMN new Season(秋天,凉爽);public static final Season WINNER new Season(冬天,寒冷);//1.构造器私有化防止直接new//3.在Season内部直接创建固定对象//4.优化可以加入final修饰符private Season(String name, String desc) {this.name name;this.desc desc;}public String getName() {return name;}//2.去掉set相关方法只读不修改防止属性被修改/*public void setName(String name) {this.name name;}*/public String getDesc() {return desc;}Overridepublic String toString() {return Season{ name name \ , desc desc \ };}/*public void setDesc(String desc) {this.desc desc;}*/
}
2特点1.构造器私有化2.本类内部创建一组对象3.对外暴露对象通过为对象添加public final static修饰符4.可以提供get方法但是不要提供set2使用enum关键字
package com.figiting.enum_;/*** version 1.0* autor 疯小丢*/
public class Enumeration02 {public static void main(String[] args) {//使用Season2枚举类演示方法Season2 autumn Season2.AUTUMN;//输出枚举对象的名称System.out.println(autumn.name());//输出该枚举对象的次序/编号从0开始编号System.out.println(autumn.ordinal());//values()返回枚举对象Season[]Season2[] values Season2.values();for(Season2 season : values){//增强for循环//依次从数组中取出System.out.println(season);}//valueOf():将字符串转换成枚举对象要求字符串必须为已有的常量名否则报异常//执行流程//1.根据输入的“AUTUMN到Season2的枚举对象去查找//2.如果找到了就返回没有就报错Season2 autumn1 Season2.valueOf(AUTUMN);System.out.println(autumn1 autumn1);System.out.println(autumn autumn1);//compareTo:比较两个枚举常量比较的就是编号//1.把Season2.AUTUMN枚举对象的编号和Season2.SPRING枚举对象的编号进行比较//2.结果 两编号相减System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));}
}enum Season2{//1.使用关键字eum来实现枚举类//2.public static final Season SPRING new Season(春天,温暖);// SPRING(春天,温暖);即常量名(实参列表)//3.如果有多个常量(对象).使用,号间隔即可//4.如果使用enum实现枚举要求将定义常量对象写在前面,枚举对象必须放在枚举类的行首//5.如果使用的是无参构造器创建常量对象则可以使用What,可以省略()SPRING(春天,温暖),AUTUMN(秋天,凉爽);//SUMMER(夏天,炎热), What();//调用无参构造器或Whatprivate String name;private String desc;//定义了四个对象
/* public static final Season SPRING new Season(春天,温暖);public static final Season SUMMER new Season(夏天,炎热);public static final Season AUTUMN new Season(秋天,凉爽);public static final Season WINNER new Season(冬天,寒冷);*/private Season2() {}private Season2(String name, String desc) {this.name name;this.desc desc;}public String getName() {return name;}//2.去掉set相关方法只读不修改防止属性被修改/*public void setName(String name) {this.name name;}*/public String getDesc() {return desc;}Overridepublic String toString() {return Season{ name name \ , desc desc \ };}/*public void setDesc(String desc) {this.desc desc;}*/
}1说明1.当使用enum关键字开发一个枚举类时默认会继承Enum类2.将传统的public static final Season SPRING new Season(春天,温暖); 简化成 SPRING(春天,温暖); 这里必须知道调用的是哪个构造器3.如果使用无参构造器创建枚举对象时则实参列表和小括号都可以省略4.当有多个枚举对象时使用号间隔最后一个分号结尾5.枚举对象必须放在枚举类的行首2enum常用方法的使用1.toStringEnum类已经重写过返回的是当前对象名子类可以重写该方法用于返回对象的属性信息2.name返回当前对象名常量名子类中不能重写3.ordinal返回当前对象的位置号默认从0开始4.values返回当前枚举类中所有的常量5.valueOf将字符串转换成枚举对象要求字符串必须为已有的常量名否则报异常6.compareTo比较两个枚举常量比较的是编号
public class Enumeration02 {public static void main(String[] args) {//使用Season2枚举类演示方法Season2 autumn Season2.AUTUMN;//输出枚举对象的名称System.out.println(autumn.name());//输出该枚举对象的次序/编号从0开始编号System.out.println(autumn.ordinal());//values()返回枚举对象Season[]Season2[] values Season2.values();for(Season2 season : values){//增强for循环//依次从数组中取出System.out.println(season);}//valueOf():将字符串转换成枚举对象要求字符串必须为已有的常量名否则报异常//执行流程//1.根据输入的“AUTUMN到Season2的枚举对象去查找//2.如果找到了就返回没有就报错Season2 autumn1 Season2.valueOf(AUTUMN);System.out.println(autumn1 autumn1);System.out.println(autumn autumn1);//compareTo:比较两个枚举常量比较的就是编号//1.把Season2.AUTUMN枚举对象的编号和Season2.SPRING枚举对象的编号进行比较//2.结果 两编号相减System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));}
}
3.使用细节1使用enum关键字后就不能再继承其他类了因为enum会隐式继承Enum而Java是单继承机制2枚举类和普通类一样可以实现接口形式如下enum 类名 implements 接口1接口2{}
package com.figiting.enum_;/*** version 1.0* autor 疯小丢*/
public class EnumDetail {public static void main(String[] args) {Music.CLASSICMUSIC.playing();}
}class A {}
//1.使用enum关键字后就不能再继承其它类因为enum会隐式继承Enum而Java是单继承机制
//enum Season3 extends A {
//
//}
//2.enum实现的枚举类仍然是一个类所以还是可以实现接口
interface IPlaying {public void playing();
}enum Music implements IPlaying {CLASSICMUSIC;public void playing(){System.out.println(播放好听的音乐...);}
}
二、注解1.初步理解1注解Annotation也被称为元数据Metadata用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息2和注释一样注解不影响程序逻辑但注解可以被编译或运行相当于嵌入在代码中的补充信息3在JavaSE中注解的使用目的比较简单例如标记过的时的功能忽略警告等在JavaEE中注解占据更重要的角色例如用来配置应用程序的任何切面代替JavaEE旧版中所遗留的繁冗代码和XML配置等2.基本介绍使用Annotation时要在其前面增加 符号并把该Annotation当成一个修饰符使用用于修饰它支持的程序元素3.基本的Annotation应用案例1Override限定某个方法重写父类方法该注解只能用于方法使用说明
package com.figiting.annotation_;/*** version 1.0* autor 疯小丢*/
public class Override {public static void main(String[] args) {}
}class Father{public void fly() {System.out.println(Father fly...);}
}class Son extends Father{//1. Override注解放在fly方法上表示子类fly方法重写了父类的fly//2. 这里如果没有写Override还是重写了父类的fly//3. 如果写了编译器就会检查该方法是否真的重写了父类的方法//如果重写了则编译通过如果没有构成重写则编译错误//即进行语法校验//4.Override定义interface表示注解类//public interface Override {//}java.lang.Overridepublic void fly() {System.out.println(Son fly...);}
}
1Override 表示制定重写父类的方法如果父类没有fly方法则不会报错2如果不写Override注解而父类仍有public void fly{}仍然构成重写3如果写了编译器就会检查该方法是否真的重写了父类的方法如果重写了则编译通过如果没有构成重写则编译错误。即进行语法检验4Override只能修饰方法不能修饰其他类包属性等5注解源码2Deprecated用于表示某个程序元素类方法等已过时
package com.figiting.annotation_;/*** version 1.0* autor 疯小丢*/
public class Deprecated_ {public static void main(String[] args) {A a new A();a.hi();System.out.println(a.n1);}
}//1.Deprecated 修饰某个元素表示该元素已经过时
//2.即不再推荐使用但是仍然可以使用
//3.Deprecated类的源码
//4.可以修饰方法、类、字段、包、参数等
//5.可以做版本升级过度使用
Deprecated
class A {public int n1 10;public void hi(){}
}注解源码3SuppressWarnings抑制编译器警告
package com.figiting.annotation_;import java.util.ArrayList;
import java.util.List;/*** version 1.0* autor 疯小丢*/
public class SuppressWarnings_ {//1.当我们不希望看到这些警告时可以使用SuppressWarnings注解来抑制警告信息//2.在{all}中可以写入希望抑制(不显示)的警告信息//3//4.关于SuppressWarnings作用范围和放置的位置有关//比如SuppressWarnings放置在main方法则抑制警告范围就是main//5.源码//(1)放置的位置就是 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE//(2)该注解类有数组String[] value();设置一个数组,比如{rawtypes,unchecked,unused}SuppressWarnings({rawtypes,unchecked,unused})public static void main(String[] args) {List list new ArrayList();list.add();list.add();list.add();int i;System.out.println(list.get(1));}
}
可以指定的警告类型1.all抑制所有警告2.cast抑制与强制转型作业相关的警告3.dep-ann抑制与淘汰注释相关的警告4.deprecation抑制与淘汰相关警告5.fallthrough抑制与switch陈述式中遗漏break相关的警告6.finally抑制与未传回finally区块相关的警告7.hiding抑制2与隐藏变数的区域变数相关的警告8.incomplete-switch抑制与switch陈述式enum case中遗漏项目相关的警告9.javadoc抑制与javadoc相关的警告10.nls抑制与非nls字串文字相关的警告11.rawtypes抑制与使用raw类型相关的警告12.resource抑制与使用Closeable类型的资源相关的警告13.restriction抑制与使用不建议或禁止参照相关的警告14.serial抑制与可序化的类别遗漏serialVersionUID栏位相关的警告15.static-access抑制与静态存取不正确相关的1警告16.static-method抑制与可宣告为static的方法相关的警告17.super抑制与置换方法相关但不含super呼叫的警告18.synthetic-access抑制与内部类别的存取未最佳化相关的警告19.sync-override抑制因为置换同步方法而遗漏同步化的警告20.unchecked抑制与未检查的作业相关的警告21.unqualified-field-access抑制与栏位存取不合格相关的警告22.unused抑制与未用的程式码及停用的程式码相关的警告生成SupperssWarnings时直接点击左侧的黄色提示就可以选择注意可以指定生成的位置4.元注解1基本介绍JDK的元注解用于修饰其他Annotation元注解本身作用不大但要清楚它是干什么的2种类1Retention 注解1.说明只能用于修饰一个Annotation定义用于指定该Annotation 可以保留多长时间
Rentention包含一个RetentionPolicy类型的成员变量使用Rentention
时必须为该value成员变量指定值2.Retention的三种值1)RetentionPolicy.SOURCE:编译器使用后直接丢弃这种策略的注释
2) RetentionPolicy.CLASS:编译器将把注释记录在class文件中当运行Java程
序时JVM不会保留注解。这是默认值
3)RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中当运行
Java程序时JVM会保留注释.程序可以通过反射获取该注释2Target基本说明用于修饰Annotation定义用于指定被修饰的Annotation能用于修饰哪
些程序元素.Target 也包含一个名为value的成员变量。3Documented基本说明Documented:用于指定被该元 Annotationi修饰的 Annotation类将被
javadoc 工具提取成文档即在生成文档时可以看到该注释。
说明定义为Documented的注解必须设置Retention值为RUNTIME。4Inherited基本说明被它修饰的Annotation将具有继承性如果某个类使用了被Inherited修饰
的Annotation则其子类将自动具有该注解