###JDK1.5新特性:枚举
从jdk1.5之后程序之中提供了enum的关键字,此关键字可以实现枚举的定义。
枚举属于一种多例设计模式,那么既然是多例设计模式,那么在一个类之中可以定义的结构是非常多的:列如:构造方法、普通方法、属性等,那么这些内容在枚举类中依然可以直接定义,但是需要注意的是:枚举类中定义的构造方法不能够采用非私有化定义(public 无法使用)。
Enum类与enum关键字
* 使用enum关键字定义的枚举类,实际上就相当于定义了一个类,此类继承了Enum类而已
* protected Enum(String name,int ordinal)此构造方法不能被外部直接调用,只能被其子类访问,此构造方法为自动调用
* public final String name() 枚举的名字
* public final int ordinal() 枚举的序号
* JDK1.5之后,对于Set和Map接口而言又增加了两个新的子类:EnumSet、EnumMap两个类
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略。
枚举类可以有构造器,但必须是private的,它默认的也是private的。
枚举类也可以有抽象方法,但是枚举项必须重写该方法。
枚举在switch语句中的使用
枚举类的常见方法:
int ordinal()获取编号
int compareTo(E o)比较编号
String name()获取实例名称
String toString()重写toString后
<T> T valueOf(Class<T> type,String name)
values() 遍历枚举类的所有枚举值
###自己实现枚举类
public class Season {
private static final Season spring = new Season("春天", "春雨绵绵");
private static final Season summer = new Season("夏天", "夏日炎炎");
private static final Season autumn = new Season("秋天", "秋高气爽");
private static final Season winter = new Season("冬天", "白雪皑皑");
private String name;
private String info;
//枚举类的构造器是私有化的,只能在类里new对象
//无参构造
private Season() {}
//有参构造
private Season(String name, String info) {
this.name = name;
this.info = info;
}
public static Season getSpring() {
return spring;
}
public static Season getSummer() {
return summer;
}
public static Season getAutumn() {
return autumn;
}
public static Season getWinter() {
return winter;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "Season [name=" + name + ", info=" + info + "]";
}
}
public class Test01 {
public static void main(String[] args) {
//外部只能通过get方法获取枚举类
Season spring = Season.getSpring();
Season summer = Season.getSummer();
Season autumn = Season.getAutumn();
Season winter = Season.getWinter();
System.out.println(spring);
System.out.println(summer);
System.out.println(autumn);
System.out.println(winter);
}
}
###通过enum实现枚举类
public enum Season {
//枚举类第一句话必须是声明对象(默认用public static final)
spring("春天","春暖花开"),summer("夏天","汗如雨下"),autumn("秋天","秋高气爽"),winter("冬天","银装素裹");
private String name;
private String info;
private Season() {
}
private Season(String name, String info) {
this.name = name;
this.info = info;
}
@Override
public String toString() {
return "Season [name=" + name + ", info=" + info + "]";
}
}
public class Test01 {
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.winter);
}
}
输出
Season [name=春天, info=春暖花开]
Season [name=夏天, info=汗如雨下]
Season [name=秋天, info=秋高气爽]
Season [name=冬天, info=银装素裹]
###枚举在switch语句中的使用
public enum Animal {
狗("狗","是人类忠诚的朋友"),猪("猪","是人类主要肉食对象");
String name;
String info;
private Animal(String name, String info) {
this.name = name;
this.info = info;
}
@Override
public String toString() {
return name + ":" + info;
}
}
public class Test01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String next = scan.next();
//将字符串转换为枚举类型
Animal animal = Enum.valueOf(Animal.class, next);
switch (animal) {
case 狗:
System.out.println("旺旺旺");
System.out.println(animal);
break;
case 猪:
System.out.println("嚯嚯嚯");
System.out.println(animal);
break;
}
}
}
狗
旺旺旺
狗:是人类忠诚的朋友
猪
嚯嚯嚯
猪:是人类主要肉食对象
### values() 遍历枚举类的所有枚举值
public class Test02 {
public static void main(String[] args) {
//获取当前枚举类里的所有对象
Animal[] values = Animal.values();
for (Animal animal : values) {
System.out.println(animal);
}
}
}
面试题:请解释enum与Enum的区别
enum:是从jdk1.5之后提供的一个关键字,用于定义枚举类
Enum:是一个抽象类,所以使用enum关键字定义的类就默认继承了此类
###json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。相对于另一种数据交换格式 XML,JSON 有着诸多优点。比如易读性更好,占用空间更少等。在 web 应用开发领域内,得益于 JavaScript 对 JSON 提供的良好支持,JSON 要比 XML 更受开发人员青睐。
###json支持的数据类型
JSON里面的数据是以一种键值对的方式存在
(”key”:”value”)中值的类型可以是下面数据类型中的任意一种:
1. 数字(整数或浮点数)
2. 逻辑值(true 或 false)
3. 字符串(在双引号中)
4. 数组(在方括号中)
5. 函数
6. 对象(在大括号中)
7. null
###json语法规则
JSON的语法规则非常的简单,就是使用
大括号 {},
中括号[],
逗号 ,,
冒号 :,
双引号 “”。
数据类型:
嵌套对象、数组、字符串、数字、布尔值或空值。
我们在JSON解析中只有三中情况出现
1.{} 解析’大括号’类型
2. [ ] 解析是’中括号’类型
3. 其实只有两种,那第三种则是1与2的组合方法即”{’name’:’李书豪’ ,’hobby’:[‘编程’,’电竞’,’睡觉’]}”
###json数据解析
JSON解析一定要掌握的两条规则:
- 1.如果看到是{ }–>使用JSONObject
- 2.如果看到的[ ]–>使用JSONArray解析
小结: {[ {},{} ]}–>思路:第一步看到大括号:JSONObject去解,创建好对应里面的属性的值;第二步看到中括号:JSONArray去解析 对应创建好对应里面的属性值;第三步中括号里面的{},又是一个JSONObject。
@Test的使用 是该方法可以不用main方法调用就可以测试出运行结果,是一种测试方法