1异常
1. Error与Exception的区别
Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。此类异常是程序的致命异常,程序无法处理。
Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。 程序可以处理。
2异常分类
运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等, 这些异常是非检查型异常,程序中可以选择捕获处理,也可以不处理。
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。
3异常处理
1捕获异常
以数组越界为例
import java.util.Scanner;
public class Main {
private static void foo() {
int[] array = new int[10];
for (int i = 0; i < 10; i ++ )
array[i] = i;
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
int x = sc.nextInt();
try {
array[k] /= x;
} catch (ArithmeticException e) {
System.out.println("除数为0!");
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界!");
e.printStackTrace();
} finally {
for (int i = 0; i < 10; i ++ ) {
System.out.println(array[i]);
}
}
}
2抛出异常
throw: 在函数内抛出一个异常。
throws:定义抛出异常。
补充:try catch中常用finally作为结束,处理善后工作
---------------------------------------------------------------------------------------------------------------------------------
2
常用类
1包装类
为了更好地使用基本数据类型,java提供了他们的类
1形式上char对应Character,int对应Integer,其余均为首字母大写得来
2使用:新版jdk提供了自动拆装箱
public class Intro {
public static void main(String[] args) {
Integer integer = 199; //自动装箱
int int1 = integer; //自动拆箱
}
}
3好处:提供了更多方法便于使用,如字符串与包装类相互转换
如何将包装类转化为字符串
String str = 包装类变量名 + "";
String str = 包装类类名.toString();
String str = String.valueOf(...);
2大整数和大浮点数类
类似于c中用字符串模拟高精度运算,但方便得多
1大整数BigInteger
BigInteger big1 = new BigInteger("66666666666666666666666");
BigInteger big2 = new BigInteger("88888888888888888888888");
1加法运算;
BigInteger add = big1.add(big2);
System.out.println(add);
2减法
BigInteger subtract = big1.subtract(big2);
3比较
int a = big1.compareTo(big2);
2大浮点数
BigDecimal bigDecimal1 = new BigDecimal("0.00001");
BigDecimal bigDecimal2 = new BigDecimal("0.00002");
1加法BigDecimal add = bigDecimal1.add(bigDecimal2);
2减法 BigDecimal subtract = bigDecimal1.subtractv(bigDecimal2);
3除法BigDecimal divide = bigDecimal1.divide(bigDecimal2);
4乘法 BigDecimal multiply = bigDecimal1.multiply(bigDecimal2);
3StringBuffer与StringBuilder
1StringBuffer存储字符串变量,便于更改,效率更高
如何把String类转化为StringBuffer
利用StringBuffer构造器
StringBuffer stringbuffer = new StringBuffer("string");
StringBuffer的方法
stringbuffer.length();
stringbuffer.delete();
stringbuffer.replace();
stringbuffer.append();此方法可将String类转化为StringBuffer
2
StringBuilder也是存储字符串变量,但不如StringBuffer线程安全
StringBuilder构造,与方法与StringBuffer基本类似
---------------------------------------------------------------------------------------------------------------------------------
3java中的容器
类似于c中的stl容器
1collection容器
主要有三种
Arraylist与Vector都是数组
Linkedlist是链表
set:
HashSet是数组与链表
LinkedHashset是链表和哈希表
TreeSet红黑树
queue:
queue:单向队列
dequeue:双向队列
2map容器
HashMap是数组+链表线程不安全
TreeMap是红黑树
HashTable是数组+链表但是线程安全