Day22:枚举、json

本文详细介绍了Java从JDK1.5引入的枚举特性,包括如何定义枚举类,枚举在switch语句中的应用,以及values()方法遍历枚举值。同时,文章还讲解了JSON数据交换格式的基础知识,包括支持的数据类型、语法规则和解析方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

###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方法调用就可以测试出运行结果,是一种测试方法

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值