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

一、异常

在这里插入图片描述

在这里插入图片描述

1、异常分类

在这里插入图片描述
空指针异常(IndexOutBoundsException)、数据类型转换异常(NumberFormatException)

2、捕捉处理异常

在这里插入图片描述

3、异常中断机制

在这里插入图片描述

4、finally代码块

在这里插入图片描述
以下特殊情况下。finally块不会被执行:
①在finally代码块中产生了异常;
②在前面的代码中使用了System.exit()退出程序;
③程序所在的线程死亡;
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

①throws用在方法声明后面,表示抛出异常,由方法的调用者处理,而throw用在方法体内,用来制造一个异常,由方法体内的语句处理;
②throws是声明这个方法会抛出这种类型的异常,以便使它的调用者知道要捕捉这个异常,而throw是直接抛出一个异常实例;
③throws表示出现异常的一种可能性,并不一定会产生这些异常,但如果使用throw,就一定会产生某种异常;

8、异常的使用原则

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

二、Java常用类和枚举类型

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

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

2、Integer类

在这里插入图片描述

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类【抽象类不能直接创实例对象】

在这里插入图片描述

3、Math类

在这里插入图片描述
在这里插入图片描述

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次方
	}
}

在这里插入图片描述

5、Random类

在这里插入图片描述
案例之微信抢红包:

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类

在这里插入图片描述

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类

在这里插入图片描述

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、枚举类型

枚举类型常被用于设置常量
由于枚举类型是一种数据类型,而且被视为一系列具有名称的常量的集合,所以被赋予了在程序编译时检查数据类型的功能。
在这里插入图片描述
使用枚举类型的优势:
①传入的参数必须是我们定义的类型;
②传入具体的值;
③避免了两个常量等于同一个值的问题;

猜你喜欢

转载自blog.csdn.net/javaScript1997/article/details/108988315
今日推荐