核心概述:本文将继续学习常用API,包括一些基本数学运算的工具类Math、任意精度整数BigInteger类、大浮点数据BigDecimal;另外,在程序开发的过程中,我们经常会出现各种异常现象,所以在本文中我们也将学习java中异常的识别和处理。
第 1 章:数学课
1.1-概述(明白)
java.lang.Math 类包含用于执行基本数学运算(例如基本绝对值、舍入等)的方法。像这样的一个工具类,它的所有方法都是静态方法,并且不创建对象,调用起来很简单。
1.2-常用方法(内存)
方法
代码
公共静态无效主要(字符串[]参数){
System.out.println(Math.abs(-100)); // 100
System.out.println(Math.ceil(10.1)); // 11.0
System.out.println(Math.floor(10.1)); // 10.0
}
第 2 章:BigInteger 类
2.1-概述(明白)
java.math.BigInteger 类,不可变的任意精度整数。如果操作中数据的范围超过了long类型,可以使用BigInteger类来实现。该类的计算整数不限长。
2.2-构造方法(内存)
BigInteger(String value) 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。超出了long类型的范围,就不能再叫数字了,所以构造方法用字符串的形式来表示超大整数,把超大整数封装成BigInteger对象。
2.3-常用方法(内存)
方法
代码
公共静态无效主要(字符串[]参数){
BigInteger big1 = new BigInteger("987654321123456789000");
BigInteger big2 = new BigInteger("123456789987654321");
//加法运算
BigInteger add = big1.add(big2);
System.out.println("求和:"+add);
//减法运算
BigInteger sub = big1.subtract(big2);
System.out.println("区别:"+sub);
//乘法运算
BigInteger mul = big1.multiply(big2);
System.out.println("产品:"+mul);
// 除法运算
BigInteger div = big1.divide(big2);
System.out.println("分区:"+div);
}
第 3 章:BigDecimal 类
3.1-概述(明白)
java.math.BigDecimal 类,一个不可变的、任意精度的有符号十进制数。这个类可以实现对非常大的浮点数据的精确操作。
3.2-构造方法(内存)
BigDecimal(String value) 将 BigDecimal 的十进制字符串表示形式转换为 BigDecimal。
3.3-常用方法(内存)
方法
分法
BigDecimal 除数(BigDecimal divisor,int scale,int roundingMode)
潜水员:这个 BigDecimal 要除以的值。
scale:要保留的位数
roundingMode:舍入模式
取整方法:BigDecimal 类提供静态成员变量来表示取整方法
BigDecimal.ROUND_UP 以 1 递增。
BigDecimal.ROUND_DOWN 直接四舍五入。
BigDecimal.ROUND_HALF_UP 向上取整。
代码
公共静态无效主要(字符串[]参数){
BigDecimal big1 = new BigDecimal("5.25");
BigDecimal big2 = new BigDecimal("3.25");
//加法计算
BigDecimal add = big1.add(big2);
System.out.println("求和:"+add);
//减法计算
BigDecimal sub = big1.subtract(big2);
System.out.println("区别:"+sub);
//乘法计算
BigDecimal mul = big1.multiply(big2);
System.out.println("乘法:"+mul);
// 除法计算
BigDecimal div = big1.divide(big2,2,BigDecimal.ROUND_HALF_UP);
System.out.println(div);
}
第 4 章:基本类型包装类
4.1-概述(明白)
Java 提供了两种类型系统,基本类型和引用类型。使用基本类型是为了提高效率。但是,在很多情况下,对象会被创建和使用,因为对象可以做更多的功能。如果我们想让我们的基本类型像对象一样操作,可以使用基本类型对应的包装类,如下:
4.2-整数类(明白)
概述
在对象中包装原始类型 int 的值。其构造函数和静态方法如下:
代码
公共静态无效主要(字符串[]参数){
//public Integer(int value):根据int值创建一个Integer对象(已废弃)
整数 i1 = 新整数(100);
System.out.println(i1);
//public Integer(String s):根据String值创建一个Integer对象(已废弃)
整数 i2 = 新整数(“100”);
//整数 i2 = new Integer("abc"); //NumberFormatException
System.out.println(i2);
System.out.println("-------");
//public static Integer valueOf(int i):返回一个表示指定int值的Integer实例
整数 i3 = Integer.valueOf(100);
System.out.println(i3);
//public static Integer valueOf(String s):返回一个保存指定值的Integer对象String
整数 i4 = Integer.valueOf("100");
System.out.println(i4);
}
4.3-装箱和拆箱(理解)
在基本类型和对应的包装类对象之间来回转换的过程称为“装箱”和“拆箱”:
装箱:从原始类型转换为相应的包装类对象。
拆箱:从包装类对象转换为相应的原始类型。
以Integer和int为例:(看懂代码就好)
基本值---->包装对象
Integer i = new Integer(4);//使用构造函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象---->基本价值
int num = i.intValue();
4.4-自动装箱和拆箱(理解)
由于我们经常做基本类型和包装类之间的转换,从Java 5(JDK 1.5)开始声明异常的关键字是,基本类型和包装类的装箱和拆箱动作都可以自动完成。例如:
Integer i = 4;//自动装箱。等价于整数 i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转换为基本值(自动拆箱) i.intValue() + 5;
//加法操作完成后,再次装箱,将基础值转化为对象。
4.5-基本类型和字符串转换(内存)
基本类型转字符串
转换方法:
方法一:在数字后面直接加一个空字符串
方法二:通过String类静态方法valueOf()
示例代码:
公共静态无效主要(字符串[]参数){
//int --- 字符串
整数 = 100;
//方式1
字符串 s1 = 数字 + "";
System.out.println(s1);
//方式2
//public static String valueOf(int i)
字符串 s2 = String.valueOf(number);
System.out.println(s2);
}
字符串转基本类型
除 Character 类外,所有其他包装类都有 parseXxx 静态方法,可将字符串参数转换为相应的原始类型:
public static byte parseByte(String s):将字符串参数转换为对应的字节基本类型。
public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
public static int parseInt(String s):将字符串参数转换为对应的int基元类型。
public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
public static float parseFloat(String s):将字符串参数转换为对应的float基元类型。
public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
public static boolean parseBoolean(String s):将字符串参数转换为对应的布尔基元类型。
代码:(以Integer为例)
公共类 Demo18WrapperParse {
公共静态无效主要(字符串[]参数){
int num = Integer.parseInt("100");
}
}
第 5 章:识别异常
5.1- 什么是异常(了解)
异常意味着异常。生活中:医生说你身体的某个部位出现了异常,这个部位和正常的有点不一样,这个部位的功能就会受到影响。在程序中声明异常的关键字是,它的意思是:
Exception:指程序执行过程中出现的异常情况,最终会导致JVM异常停止。(由于程序问题导致程序执行中断的现象。)
在Java等面向对象的编程语言中,异常本身就是一个类,产生异常就是创建异常对象并抛出异常对象。Java 处理异常的方式是中断处理。
需要注意的是,异常并不是指语法错误。如果语法错误,编译失败,不会生成字节码文件,根本无法运行。
5.2-系统异常(了解)
在Java中,为了维持程序的正常执行,Java提供了一种异常机制(异常类)来处理异常。
在Java提供的异常机制中,java.lang.Throwable是根类,根类的派生类有两个子类java.lang.Error和java.lang.Excepiton。
错误,错误(绝症,如:“癌症”),这类异常在程序中是无法处理的,只能尽量避免。
Excepiton,编译时异常(写源码时)(小bug,如:类似感冒),这类异常可以在程序中处理。Excepiton 类型还有一个 RunTimeException 的子类,它表示运行时异常(程序运行期间),这种类型的异常也可以在程序中进行处理。
为了更好地区分上述异常分类,我们查看以下过程。
// [错误异常]
// 线程“main”中的异常 java.lang.OutOfMemoryError: Java heap space
// 内存不足。已超出分配给 JVM 的内存量。
// 这个程序只能修改源代码来解决问题。
int[]nums = 新的 int[1024*1024*1024];
// [例外]
SimpleDateFormat 格式 = new SimpleDateFormat("yyyy-MM-dd");
// 未处理的异常:java.text.ParseException
// 这里写源码的时候出现异常,后面可以通过相关的处理机制来处理和避免异常
日期日期 = format.parse("2083-10-10");
// [运行时间异常]
int[] 数字 = {1,2,3};
// 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException
// 程序运行时出现异常,数组下标超出。异常可由相关异常机制处理
System.out.println(nums[4]);
5.3-异常产生的过程(理解)
在编程中,为了更好地处理异常,首先要了解异常的产生过程。下面是一个异常代码的分析。
要求和代码
// 要求:定义方法获取指定数组指定位置的元素
公共静态无效主要(字符串[]参数){
int[]nums = {1,2,3};
System.out.println(getElement(nums,4));
}
公共静态 int getElement(int[]arr,int index){
返回 arr[索引];
}
分析
在执行getElement方法的过程中,JVM检测到数组索引越界异常。这个时候,JVM会做两件事:
创建包含异常信息(内容、原因、位置)的 ArrayIndexOutOfBoundsException 异常对象
因为getElment方法中没有异常处理,JVM会将异常对象抛给调用getElment方法的main方法。
main方法接收到ArrayIndexOutOfBoundsException异常对象,不处理异常,将异常对象抛给JVM
JVM接收到main方法后,做了两件事:
将异常信息(内容、原因、位置)打印到控制台
终止程序的执行
图表
第 6 章:处理异常
6.1-异常关键字(内存)
尝试
抓住
最后
扔
投掷
6.2 - 抛出异常抛出(明白)
概述
在编写程序时,我们必须考虑程序出错的情况。例如,在定义一个方法时,该方法需要接受参数。那么,调用方法在使用接收到的参数时,首先需要对参数数据进行合法的判断。如果数据不合法,它应该告诉调用者并将合法的数据传入。这种情况下,需要通过抛出异常来通知调用者。
在java中,提供了一个throw关键字,用于抛出一个指定的异常对象。那么,抛出异常究竟有什么作用呢?
创建一个异常对象。封装一些提示信息(信息可以自己写)。
需要将此异常对象通知给调用者。怎么讲?如何将此异常对象传递给调用者?这可以通过关键字 throw 来完成。
Throw 用于方法中抛出异常对象,将异常对象传递给调用者,结束当前方法的执行。
使用格式
抛出新的异常类名(参数);
代码演示
公共静态无效主要(字符串[]参数){
//创建一个数组
int[] arr = {2,4,52,2};
// 根据索引找到对应的元素
整数索引 = 4;
int element = getElement(arr, index);
System.out.println(元素);
System.out.println("over");
}
/*
* 根据索引查找数组中对应的元素
*/
公共静态 int getElement(int[] arr,int index){
//判断索引是否超出范围
if(indexarr.length-1){
/*
如果满足判断条件,则在执行后抛出异常对象后,该方法就不能再继续操作。
至此,当前方法的执行结束,并通知调用者异常。这时候就需要通过异常来解决。
*/
throw new ArrayIndexOutOfBoundsException("老兄,角标越界了~~~");
}
int 元素 = arr[索引];
返回元素;
}
注意:如果有问题,我们会抛出问题描述类,即异常,即将问题返回给方法的调用者。
那么调用者应该怎么做呢?一是抓捕处理,二是继续讲问题语句,使用throws语句处理。
6.3 - 声明异常抛出(了解)