枚举
枚举是指由一组固定的常量组成的类型
为什么用枚举
在编写程序的时候,我们要求从控制太输入一些特定值,如性别只能是男或女,但由于定义的String类型,无法控制用户输入,就如下图所示,对于程序运行完全没有错,但是逻辑上是不对的:
public class Student{
public String sex;
}
// 测试类
//其他代码略
Student stu=new Student();
stu.sex="你好";
对于上述问题解决办法一般有两种:
①用if条件判断
②使用枚举
对于if条件大家都很熟悉了,下面就介绍使用枚举方法来解决此问题
// 枚举的关键字是enum,它的定义与类的定义相似,可以认为是类的变种
// 定义性别枚举,定义方式如下:
public enum Genders{
// 此处的男,女可认为是公共静态常量,可以用类型.值的方式调用
男,女
// 属性
String sex;
// 方法
public void setSex(String sex){
this.sex = sex;
}
public String getSex(){
return this.sex;
}
}
// 学生类
public class Student{
// 枚举类型变量sex
public Genders sex;
}
// 测试类,其他代码略
Student stu=new Student();
// 类型.值的方式调用
stu.sex=Genders.男;// 正常运行
// stu.sex="你好"; 此处会编译报错
if(stu.sex.equals(Genders.valueOf("男"))){
System.out.println("性别为男");
}
从上述例子可以看出,枚举类型可以和普通类一样定义属性和方法,且valueOf方法常用来将该类的枚举与字符串类型进行比较。
例题:
为大数据岗位课程三个学习阶段定义枚举:L1、L2、L3,分别表示第一、二、三阶段,编程输出每个单元的学习目标:
L1:大数据开发工程师
L2:大数据挖掘工程师
L3:大数据架构师
分析:题目要求定义枚举,从输出可以看出每个枚举类型与固定职位挂钩,此时我们可以用刚刚学过的map来存储并输出。
// 枚举类型
public enum Level {
L1,L2,L3
}
// 测试类
public class Test {
public static void main(String[] args) {
Map<Level,String> map = new HashMap<>();
map.put(Level.L1,"大数据开发工程师");
map.put(Level.L2,"大数据挖掘工程师");
map.put(Level.L3,"大数据架构师");
Iterator iter = map.keySet().iterator();
while(iter.hasNext()){
Object obj = iter.next();
System.out.println(obj+":"+map.get(obj));
}
}
}
包装类
java给8中基本数据类型都提供了包装类,通过包装类可以将基本类型转换成对象。
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
包装类的作用
①将基本数据类型转换成对象
②提供一系列使用的方法
③集合不允许存放基本数据类型数据,存放数据是=时,可以用包装类型
示例:
// 以Integer为例
// 定义
Integer num = new Integer(123);
// 用String做参数的构造方法时,参数要能够转成相应类型,否则运行会异常
Integer num = new Integer("123");
Integer a =1;// 自动装箱
int b = new Integer("123");// 自动拆箱
Integer e =Integer.valueOf(21);// 此方法可将基本类型转为对应包装类
int f = Integer.parseInt("12");// parseXX()方法可将字符串转为对应基本数据类型,前提字符串可以转,否则运行会报错
// 特殊的
// Boolean的参数只有为true或者字符串true(不区分大小写)时为true,其他都为false
Boolean boo = new Boolean(true);// boo为true
Boolean boo1 = new Boolean("a");// boo1为false
Character chars= new Character('a');// 没有String类型的构造方法
Math类
java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率)
// 绝对值
Math.abs(-3.5); //返回3.5
// 比较得出两个数中较大的
Math.max(2.5, 90.5);//返回90.5
// 产生随机数
int random = (int) (Math.random() * 10); //生成一个0-9之间的随机数
// 向上取整
Math.ceil(1.1)//返回2.0
// 取整(四舍五入)
Math.round(1.49)//返回1