1.枚举的作用
枚举主要是处理不合理的赋值,不用枚举可以用封装的方法加上控制判断语句来解决不合理赋值问题
使用封装解决赋值不合理问题
public class Student{
private String name;
private int age;
private String gender;
public void setAge(int age){
if(age < 0 || age > 100){
syso("年龄非法!.....");
this.age = 60;
}else{
this.age = age;
}
}
public void setGender(String gender){
if(gender.equals("男") || gender.equals("女")){
this.gender = gender;
}else{
syso(xxxx);
}
}
}
public class Test{
main(){
Student stu = new Student();
// stu.age = -1000;(采用封装解决) 为了解决不合理赋值
stu.gender = "呵呵"; // 男 女 xx String类型 -> 性别类型呢?
}
}
1.1、枚举的使用
枚举简单的说,是一种引用数据类型,只不过是这种数据类型值包含自定义的特定数据,它是一组由共同特性的数据的集合。
比如:颜色可以定义成枚举类型,它可以包含你定义的任何颜色,需要时只需要通过枚举调用即可。再比如还有春夏秋冬、星期等具有共同特性的数据都可以定义枚举,其实enum类型本身就是一个普通的class类,它可以定义一些普通属性和方法,但是和普通class不同的是不可以使用extends继承其它类,因为enum已经继承了java.lang.Enum。
如果没有使用枚举的时候,想进行根据星期来判断执行哪些操作,还得判断可能出现赋值不合理的情况。
- 没有使用枚举的switch选择结构
- 使用枚举的switch选择结构
枚举还有另一种写法,如果我们要使用枚举的常量值,不能每次都输出这常量的名字吧,我们可以将这些常量看作一个对象属性
public enum Gender{
// 通过构造来初始化
MALE("男",1);
FAMALE("女",2);
private String name;
private int flag;
// 构造必须私有化
private Gender(){
}
private Gender(String name,int flag){
this.name= name;
this.age = age;
}
// get set方法省略
}
public class Student {
private String name;
private int age;
private Gender gender;
public String toString(){
return "姓名"+name+"年龄"+age+"性别"+gender.getGender();
}
public Gender getGender(){
return gender;
}
public void SetGender(Gender gender){
this.gender = gender;
}
}
2.包装类
2.1、什么是包装类
包装类是一种引用数据类型,泛型中必须使用包装类,每个基本类型在java.lang包中都有一个相应的包装类,包装类把基本类型数据转换为对象。
作用:
- 因为基本数据类型不是对象所以没法调用方法,于是Java提供了基本数据类型对应的包装类,它提供了一系列使用方法
- 集合不允许存放基本数据类型数据,要用包装类型。
基本数据的类型对应的包装类全部变成首字母大写,但是int和char变为了英文全拼:integer和character。
2.2、包装类的构造方法,
要创建对应的包装类型,可以通过给包装类型的构造方法传入一个基本类型的数值来进行创建
,也可以传入字符串类型
,因为系统会给对应的数值进行解析。
public Type(type value)
Integer i = new Integer(1);
包装类构造方法参数为String类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型,否则编译通过但是出现NumberFormatExcption异常
3.拆箱和装箱
“拆箱”:包装类型转换为基本数据类型
“装箱”:基本数据类型转换为包装类型
JDK5之后,Java支持了自动拆箱和装箱。
Integer a = 10; // 装箱
int b = a; // 拆箱
3.1包装类和基本数据类型的使用注意事项
1. 包装类是引用数据类型 所以它可以接收null值,而基本数据类型不可以。
public class Student{
// private Integer id;
private Long id;
}
-
包装类型不是用来替代基本数据类型的,而是用来弥补基本数据类型无法使用函数的问题。
基本数据类型可以用==比较值内容。 包装类型默认值为null,而基本数据类型默认值为0 false等等。
-
但是在数据参数传递时,大多数情况基本和包装可以混淆使用。
3. Math和Random类
Math数学类
// 圆周率 自然底数
// 求两者中的最小值
int min = Math.min(10, 9);
System.out.println(min); // 9
int max = Math.max(10, 9);
System.out.println(max); // 10
// 求绝对值
int abs = Math.abs(-10);
System.out.println(abs); // 10
// 求幂运算 2的3次方
double pow = Math.pow(2, 3);
System.out.println(pow); // 8
// 四舍五入
long round = Math.round(10.5);
System.out.println(round); // 11
// 向上取整
double ceil = Math.ceil(10.2);
System.out.println(ceil); // 11
// 向下取整
double floor = Math.floor(10.8);
System.out.println(floor); // 10
// 开平方
double sqrt = Math.sqrt(4);
System.out.println(sqrt); // 2
// 求随机数 [0.0,1.0)
double random = Math.random();
// 求范围内的随机整数[min,max)
(int)(Math.random() * (max - min)) + min