一、异常

JAVA复习之异常处理、 常用类和枚举类型_枚举类型

JAVA复习之异常处理、 常用类和枚举类型_抛出异常_02

1、异常分类

JAVA复习之异常处理、 常用类和枚举类型_java_03

空指针异常(IndexOutBoundsException)、数据类型转换异常(NumberFormatException)

2、捕捉处理异常

JAVA复习之异常处理、 常用类和枚举类型_枚举类型_04

3、异常中断机制

JAVA复习之异常处理、 常用类和枚举类型_枚举类型_05

4、finally代码块

JAVA复习之异常处理、 常用类和枚举类型_字符串_06

以下特殊情况下。finally块不会被执行:

①在finally代码块中产生了异常;

②在前面的代码中使用了System.exit()退出程序;

③程序所在的线程死亡;

JAVA复习之异常处理、 常用类和枚举类型_java_07

5、使用throws关键字抛出异常(一)

JAVA复习之异常处理、 常用类和枚举类型_抛出异常_08

JAVA复习之异常处理、 常用类和枚举类型_java_09

6、使用throws关键字抛出异常(二)

JAVA复习之异常处理、 常用类和枚举类型_java_10

7、throws关键字和throw关键字的区别?

①throws用在方法声明后面,表示抛出异常,由方法的调用者处理,而throw用在方法体内,用来制造一个异常,由方法体内的语句处理;

②throws是声明这个方法会抛出这种类型的异常,以便使它的调用者知道要捕捉这个异常,而throw是直接抛出一个异常实例;

③throws表示出现异常的一种可能性,并不一定会产生这些异常,但如果使用throw,就一定会产生某种异常;

8、异常的使用原则

①不要过度使用异常;②不要使用过于庞大的try-catch块;③避免使用catch(Exception e);④不要忽略捕捉到的异常,遇到异常一定要及时处理,⑤如果父类抛出多个异常,则覆盖方法必须抛出相同的异常或其异常的子类,不能抛出新异常;

二、Java常用类和枚举类型

1、为什么java会提供包装类?

因此java是一种面向对象的编程语言,为了能把基本数据类型当作对象出来,java提供了包装类的概念;

JAVA复习之异常处理、 常用类和枚举类型_字符串_11

JAVA复习之异常处理、 常用类和枚举类型_枚举类型_12

2、Integer类

JAVA复习之异常处理、 常用类和枚举类型_抛出异常_13

public class Demo {
public static void main(String[] args) {
int num = Integer.parseInt("456"); // 将字符串转换为int类型
Integer iNum = Integer.valueOf("456"); // 通过构造函数创建一个Integer对象
System.out.println("int数据与Integer对象的比较:" + iNum.equals(num));
String str2 = Integer.toBinaryString(num); // 获取数字的二进制表示
String str3 = Integer.toHexString(num); // 获取数字的十六进制表示
String str4 = Integer.toOctalString(num); // 获取数字的八进制表示
String str5 = Integer.toString(num, 15); // 获取数字的十五进制表示
System.out.println("456的二进制表示为:" + str2);
System.out.println("456的十六进制表示为:" + str3);
System.out.println("456的八进制表示为:" + str4);
System.out.println("456的十五进制表示为:" + str5);
}
}

2、Integer类【抽象类不能直接创实例对象】

JAVA复习之异常处理、 常用类和枚举类型_抛出异常_14

3、Math类

JAVA复习之异常处理、 常用类和枚举类型_抛出异常_15

JAVA复习之异常处理、 常用类和枚举类型_抛出异常_16

public class ExponentFunction {
public static void main(String[] args) {
System.out.println("e的平方:" + Math.exp(2)); // 取e的2次方
System.out.println("以e为底数,2的对数:" + Math.log(2)); // 取以e为底2的对数
System.out.println("以10为底数,2的对数:" + Math.log10(2)); // 取以10为底2的对数
System.out.println("4的算术平方根:" + Math.sqrt(4)); // 取4的平方根
System.out.println("8的立方根:" + Math.cbrt(8)); // 取8的立方根
System.out.println("2的平方:" + Math.pow(2, 2)); // 取2的2次方
}
}

JAVA复习之异常处理、 常用类和枚举类型_枚举类型_17

5、Random类

JAVA复习之异常处理、 常用类和枚举类型_字符串_18

案例之微信抢红包:

import java.util.Random;
import java.util.Scanner;


public class RedBags { // 创建一个RedBags类
public static void main(String[] args) {
System.out.println("—————————模拟微信抢红包—————————\n");
Scanner sc = new Scanner(System.in); // 控制台输入
System.out.print("请输入要装入红包的总金额(元):");
double total = sc.nextDouble(); // 输入“红包的总金额”
System.out.print("请输入红包的个数(个):");
int bagsnum = sc.nextInt(); // 输入“红包的个数”
double min = 0.01; // 初始化“红包的最小金额”
Random random = new Random(); // 创建随机数对象random
if (total / bagsnum == 0.01) { // 红包总金额与个数的商为0.01时
for (int i = 1; i < bagsnum; i++) {
double money = min; // 让每个包中的金额均为最小金额0.01
total -= money; // 红包中的剩余金额
System.out.println("第" + i + "个红包:" + String.format("%.2f", money) + "元");
}
} else if (total / bagsnum < 0.01) { // 红包总金额与个数的商小于0.01时
System.out.println("要保证每个人都能分到1分钱哦!");
return; // 不再执行第22行以下的代码,例如第46行
} else {
for (int i = 1; i < bagsnum; i++) { // 设置“循环”
/*
* 本次红包可用最大金额 = 可分配金额 - (红包总数 * 已发出的红包数) * 红包的最小金额
*/
double max = total - (bagsnum - i) * min;
double bound = max - min; // 设置随机金额的取值范围
/*
* 据随机金额的取值范围,随机生成红包金额。 由于nextInt(int
* bound)只能用整型做参数,所以先将bound乘100(小数点向右挪两位)
* 获取到一个整数后,将这个整数除100(小数点向左挪两位) 并转换成与金额相同的浮点类型
*/
double safe = (double) random.nextInt((int) (bound * 100)) / 100;
double money = safe + min; // 最后加上红包的最小金额,以防safe出现0值
total = total - money; // 替换total的值
System.out.println("第" + i + "个红包:" + String.format("%.2f", money) + "元");
}
}
// 输出剩余金额
System.out.println("第" + bagsnum + "个红包:" + String.format("%.2f", total) + "元");
sc.close(); // 关闭控制台输入
}
}

6、Date类

JAVA复习之异常处理、 常用类和枚举类型_枚举类型_19

import java.util.Date;

public class DateTest {
public static void main(String[] args) {
Date date = new Date(); // 创建现在的日期
long value = date.getTime(); // 获得毫秒数
System.out.println("当前日期、时间:" + date);
System.out.println("从基准时间到当前时间所经过的毫秒数为:" + value);
}
}

7、DateFormat类

JAVA复习之异常处理、 常用类和枚举类型_字符串_20

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateFormatTest {
public static void main(String[] args) {
// 创建日期
Date date = new Date();
// 创建不同的日期格式
DateFormat df1 = DateFormat.getInstance();
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE");
DateFormat df3 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 EE", Locale.CHINA);
DateFormat df4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE", Locale.US);
DateFormat df5 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat df6 = new SimpleDateFormat("yyyy年MM月dd日");
// 将日期按照不同格式进行输出
System.out.println("-------将日期时间按照不同格式进行输出------");
System.out.println("按照Java默认的日期格式: " + df1.format(date));
System.out.println("按照Java默认的日期格式: " + df1.format(date));
System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE,系统默认区域:" + df2.format(date));
System.out.println("按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE,区域为中国 : " + df3.format(date));
System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE,区域为美国: " + df4.format(date));
System.out.println("按照指定格式 yyyy-MM-dd: " + df5.format(date));
System.out.println("按照指定格式 yyyy年MM月dd日: " + df6.format(date));
}
}

8、枚举类型

枚举类型常被用于设置常量

由于枚举类型是一种数据类型,而且被视为一系列具有名称的常量的集合,所以被赋予了在程序编译时检查数据类型的功能。

JAVA复习之异常处理、 常用类和枚举类型_java_21

使用枚举类型的优势:

①传入的参数必须是我们定义的类型;

②传入具体的值;

③避免了两个常量等于同一个值的问题;