本课目标
- 熟练定义并使用枚举类型
- 熟练使用包装类
- 会使用Math类进行数学运算
- 会使用 Random 类
一、Java API
1.Java API (Java Application Programming Interface);即Java应用程序编程接口,是运行可的集合,预先定义了一些接口和类,程序员可以直接使用已经打包的接口和类做具体的应用
二、枚举
1.定义:指有一组固定的常量组成的类型
2.枚举案例:
定义一个WeekDemo类,定义一个方法,方法签名为public void doWhat(Week day)。在方法体实现多重判断,如果是MON、TUE、WED、THU、FRI ,则输出“工作日,努力写代码”;如果是SAT,则输出“星期六,休息!看电影”;如果是SUN,则输出“星期日,休息!打篮球”;都不匹配,则输出“地球上一个星期就7天”。
创建枚举类
public enum WeekEnum {
Mon,TUE,WED,THU,FRI,SAT,SUN;
}
public class WeekDemo {
public void doWhat(WeekEnum weekEnum){
if(weekEnum == null){
System.out.println("星期不能为空!");
return;
}
switch (weekEnum){
case Mon:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("工作日,努力写代码");
break;
case SAT:
System.out.println("星期六,休息,RAP");
break;
case SUN:
System.out.println("星期日,休息,打篮球");
break;
default:
System.out.println("地球上一周只有七天");
}
}
}
public class Test {
public static void main(String[] args) {
WeekDemo weekDemo = new WeekDemo();
weekDemo.doWhat(WeekEnum.FRI);
}
}
3.枚举的优势
- 枚举可以是代码易于维护,保证类型安全
- 枚举易于输入,使用枚举赋值,只要输入枚举名,然后输入点操作符就能将所有的值显示出来
- 美剧是代码更清晰,允许使用描述性的名称表示数据,使用时直观方便
public enum WeekEnum {
Mon("星期一","语文"),
Tue("星期二","数学"),
Wed("星期三","英语"),
Thur("星期四","物理"),
Fri("星期五","化学"),
Sat("星期六","生物"),
Sun("星期日","休息");
private String name;
private String subject;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
WeekEnum(String name, String subject) {
this.name = name;
this.subject = subject;
}
}
public class WeekDemo {
private String day;
private String course;
public WeekDemo(WeekEnum weekEnum) {
this.day = weekEnum.getName();
this.course = weekEnum.getSubject();
}
public void show(){
System.out.println(day + "\t" + course);
}
}
public class WeekTest {
public static void main(String[] args) {
WeekDemo weekDemo = new WeekDemo(WeekEnum.Thur);
weekDemo.show();
}
}
三、包装类
- Java语言是面向对象的,但其基本数据类型却不是面向对象的,为了解决这个问题,在设计时为每个基本数据类型设计了一个对应的类,称为包装类
- 每个基本数据类型在 java.lang 包中都有一个相对应的包装类
- 包装类的作用:
提供了一系列使用的属性和方法,方便对象操作
集合不允许存放基本数据类型,存放数字时,要用包装类型
1.包装类和基本数据类型的对应关系
2.包装类的构造方法
- 所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
- Boolean 类构造方法参数为 String 类型时,若该字符串内容为 true (不考虑大小写),则该Boolean 对象表示为 true 否则表示为false
- 当包装类构造方法参数为 String 类型时,字符串不能为 null ,且该字符串必须可解析为相应的基本数据类型,否则编译通过,运行时NumberFormatException异常
3.包装类的常用方法
四、装箱和拆箱
装箱:基本数据类型转换成包装类的对象
拆箱:包装类对象转换成基本类型
1.包装类的特点
- 所有包装类都是 final 类型,不能创建它们的子类
- Java 5.0版本以后,程序员不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成
- JDK1.5后,允许基本数据类型和包装类型进行混合数学运算
- 包装类并不是用来取代基本数据类型的;在基本数据类型需要用对象表示时使用
五、Math 类
- Math 类提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI
方法名 | 备注 |
abs(int a) | 返回 int 值的绝对值 |
ceil(double a) | 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。 |
floor(double a) | 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。 |
max(int a, int b) | 返回两个 int 值中较大的一个。 |
min(int a, int b) | 返回两个 int 值中较小的一个。 |
random() | 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 |
round(double a) | 返回最接近参数的 long。 |
sqrt(double a) | 返回正确舍入的 double 值的正平方根。 |
练习:幸运会员
public class LuckNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int luckNum = (int)(Math.random()*10);
String num = null;
String patten = "[0-9]+";
do {
System.out.print("请输入四位数字:");
num = sc.next();
if (!Pattern.matches(patten,num) || num.length() != 4) {
System.out.println("输入不合法,请重新输入");
}
}while (!Pattern.matches(patten,num) || num.length() != 4);
int num1 = Integer.parseInt(num);
int bai = num1 / 100 % 10;
System.out.println("是否是幸运客户:" + (bai == luckNum));
System.out.println("幸运数字是:" + luckNum);
}
}
六、Random 类
- Random 类:用于生成伪随机数流
练习:随机生成1~365之间的数
public class RandomUtil {
public static int getRandom(int start,int end){
return new Random().nextInt(end + 1 - start) + start;
}
public static void main(String[] args) {
System.out.println(RandomUtil.getRandom(1,365));