问题引入:
当需要解决一个季节类的问题,我们使用学到的类与对象,创建一个季节的类然后添加构造器在进行分装就可以实现,但问题也随之而来,这样不仅可以有正常的四季还可以添加其他不存在的四季以及可以更改四季的属性
package com.enumerate.test01;
/*
@author:我与java相爱相杀
今天又是努力学习的一天!!!!
*/public class Season {public static void main(String[] args) {Season_ season = new Season_("夏天", "炎热");Season_ season1 = new Season_("冬天", "寒冷");Season_ season2 = new Season_("秋天", "凉爽");Season_ season3 = new Season_("春天", "温暖");//以上为我们所有的四季,但是使用这种方法创建季节类,除了可以创建正常的四季//还可以随便创造其他不存在的季节以及可以随意更改属性Season_ season4 = new Season_("黑天", "牛逼");season1.setFeel("好冷");//这种情况是我们不想要的,我们只需要固定的四季所以就需要改进}}
class Season_{private String name;private String feel;public Season_(String name, String feel) {this.name = name;this.feel = feel;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getFeel() {return feel;}public void setFeel(String feel) {this.feel = feel;}
}
枚举简介:![](https://i-blog.csdnimg.cn/direct/11fda63bcfc046d0b68bf3f1cbee4e38.png)
自定义枚举类型
代码实现:
package com.enumerate.test01;
/*
@author:我与java相爱相杀
今天又是努力学习的一天!!!!
*/public class Season {public static void main(String[] args) {
// Season_ season = new Season_("夏天", "炎热");
// Season_ season1 = new Season_("冬天", "寒冷");
// Season_ season2 = new Season_("秋天", "凉爽");
// Season_ season3 = new Season_("春天", "温暖");
// //以上为我们所有的四季,但是使用这种方法创建季节类,除了可以创建正常的四季
// //还可以随便创造其他不存在的季节以及可以随意更改属性
// Season_ season4 = new Season_("黑天", "牛逼");
// season1.setFeel("好冷");
// //这种情况是我们不想要的,我们只需要固定的四季所以就需要改进System.out.println(Season_.Fall);}}
class Season_{private String name;private String feel;//3.因为构造器被设置为私有的,所以我们需要在本类中就将需要的对象创建好//Static是为了能够直接被类名调用,不用在外创建对象才能使用//final是进一步的严谨,使得后面的操作无法再改变对象public static final Season_ Spring=new Season_("春天", "温暖");public static final Season_ Summer=new Season_("夏天", "炎热");public static final Season_ Fall=new Season_("秋天", "凉爽");public static final Season_ Winter=new Season_("冬天", "寒冷");//1.为了实现不让外部随意定义其他的季节,就得将构造器设为私有的private Season_(String name, String feel) {this.name = name;this.feel = feel;}public String getName() {return name;}//2.为了不让外部更改设置好的对象属性,我们将所有setxx()方法注销,// public void setName(String name) {
// this.name = name;
// }public String getFeel() {return feel;}// public void setFeel(String feel) {
// this.feel = feel;
// }@Overridepublic String toString() {return "Season_{" +"name='" + name + '\'' +", feel='" + feel + '\'' +'}';}
}
enum关键字枚举
代码实现:
package com.enumerate.test01;
/*
@author:我与java相爱相杀
今天又是努力学习的一天!!!!
*/public class Season {public static void main(String[] args) {
// Season_ season = new Season_("夏天", "炎热");
// Season_ season1 = new Season_("冬天", "寒冷");
// Season_ season2 = new Season_("秋天", "凉爽");
// Season_ season3 = new Season_("春天", "温暖");
// //以上为我们所有的四季,但是使用这种方法创建季节类,除了可以创建正常的四季
// //还可以随便创造其他不存在的季节以及可以随意更改属性
// Season_ season4 = new Season_("黑天", "牛逼");
// season1.setFeel("好冷");
// //这种情况是我们不想要的,我们只需要固定的四季所以就需要改进System.out.println(Season_.WINTER);
// int a[ ]={1,2,3};
// for (int i:a)
// System.out.println(i);
// Season_ season[]=Season_.values();//去Season枚举类型中找,找到了就返回没找到就报错
// Season_ spring = Season_.valueOf("SPRING");
// System.out.println(spring);}}
//1.使用枚举关键字则需要将class关键字改成enum
enum Season_{//然后将需要的常量(对象),一一列举出来,每个之间需要用逗号隔开,而且必须位居首行。SPRING("春天","温暖"),Fall("夏天", "炎热"),Summer("夏天", "炎热"),WINTER("冬天", "寒冷"),S;//调用默认的构造器可以省略括号private String name;private String feel;//3.因为构造器被设置为私有的,所以我们需要在本类中就将需要的对象创建好//Static是为了能够直接被类名调用,不用在外创建对象才能使用//final是进一步的严谨,使得后面的操作无法再改变对象
// public static final Season_ Spring=new Season_("春天", "温暖");
// public static final Season_ Summer=new Season_("夏天", "炎热");
// public static final Season_ Fall=new Season_("秋天", "凉爽");
// public static final Season_ Winter=new Season_("冬天", "寒冷");//需要调用默认的就需要手动创建一个默认的构造器
private Season_(){}//1.为了实现不让外部随意定义其他的季节,就得将构造器设为私有的private Season_(String name, String feel) {this.name = name;this.feel = feel;}public String getName() {return name;}//2.为了不让外部更改设置好的对象属性,我们将所有setxx()方法注销,// public void setName(String name) {
// this.name = name;
// }public String getFeel() {return feel;}// public void setFeel(String feel) {
// this.feel = feel;
// }@Overridepublic String toString() {return "Season_{" +"name='" + name + '\'' +", feel='" + feel + '\'' +'}';}
}
示例一:
其实底层代码是该类继承了Enum类内代码跟自定义枚举差不多可用javap查看该.class文件
示例3
如果,调用的是无参构造,但是你写了个有参构造器,那么你需要手动把无参加上去,因为,有参构造器会将无参构造器覆盖,
return的名称就是对象名
enum常用方法说明
name:
ordinal:
values:该方法是隐藏的,需要反编译才看得到
补充知识:
增强for循环:从数组中依次取出数值赋给i直到最后一个,然后结束for循环
valueof:
compareTo
编号的对比,返回两个编号的差值