一、包装类
在java中,八种基本数据类型并不是引用数据类型,为了解决这个问题,满足Java中“一切皆对象”的设计原则,引入了八种基本数据类型的包装类。
八种基本数据类型 对应 包装类的情况如下:
基本数据类型 | 包装类 |
---|---|
int | Integer |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
byte | Byte |
short | Short |
long | Long |
以上八种包装类,可以将基本数据类型按照类的形式进行操作。
八种包装类还可分成两种大类型:
- Number:Integer、Short、Long、Double、Float、Byte都是Number的子类表示一个数字
- Object:Character、Boolean都是Object的直接子类
装箱和拆箱操作
装箱操作:将基本数据类型变为包装类
拆箱操作:将包装类变为基本数据类型
在JDK1.5,JAVA新增了自动装箱和自动拆箱,可以直接通过包装类进行四则运算和自增自减操作:
Float f = 10.3f; //自动装箱
float x = f; //自动拆箱
System.out.println(f * f); //直接利用包装类完成四则运算
System.out.println(x * x);
字符串转换
使用包装类的好处在于:可以将一个字符串变为指定的基本数据类型。
在Integer类中提供以下操作方法:
public static int parseInt(String s)
//将String变为int类型数据。其他还有parseFloat、parseBoolean等
二、可变参数
一个方法定义了参数,则在调用时必须传入相对应的参数,但是在JDK1.5之后,可以根据需要自动传入任意个数的参数。
比如求和函数Sum()可以根据需要传入多个参数
写法如下:
public class Demo{
public static void main(String[] args){
System.out.println(sum(1));
System.out.println(sum(1,2));
System.out.println(sum(1,2,3));
}
/**
* int... nums:表示的是可变参数.调用时可以传递0-n个数字
* 在方法内部,可变参数以数组作为载体体现
* @param nums
* @return
*/
public static int sum(int... nums){
int n = 0;
for(int i = 0; i<nums.length; i++){
n+=nums[i];
}
return n;
}
}
注意:可变参数只能出现在参数列表的最后
三、异常处理
1.明确什么是异常(重点)
2.辨识常见异常和含义
3.了解异常产生原理
4.能处理异常(重点)
1、什么是异常?
异常是在程序中导致程序中断运行的一种指令流。
一旦产生了异常,异常之后的语句将不再执行了,所以程序并没有正确执行完毕之后就退出了。
为了保证程序出现异常之后仍能够正确执行完毕,要采用异常的处理机制。
2、处理异常
try{
//有可能发生异常的代码段
}catch(异常类型1 对象名1){
//异常的处理操作1
}catch(异常类型2 对象名2){
//异常的处理操作2
}...
finally{
//异常的统一出口
}
2.1 try-catch处理流程
1.一旦产生异常,那么系统会自动产生一个异常类的实例化对象。
2.那么,此时如果异常发生在 try 语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异常抛出。
3.所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
2.2finally
在进行异常的处理后,在异常的处理格式中还有一个finally语句,将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。
无论是否发生异常,finally必然执行。
例如:
public static void haha(){
try{
System.out.println("1");
return;
}catch(Exception e){
}finally{
System.out.println("锄禾日当午");
}
}
finally在准备return代码执行前,执行了。
2.3异常体系结构
在Java中存在一个父类Throwable(可能抛出)
Throwable存在两个子类:
1.Error:表示错误,是JVM发出的错误操作,只能尽量避免,无法用代码处理
2.Exception:一般表示所有程序中的错误,所以一般在程序中用try…catch处理.。
受检异常:刚写出来就飘红的代码异常
非受检异常:在运行时才会抛出的异常
特殊的多异常捕获写法:
catch(异常类型1 | 异常类型2 对象名){
//表示此块用于处理异常类型1 和 异常类型2 的异常信息
}
2.4自定义异常
编写一个类,继承Exception,并重写一参构造方法,即可完成自定义受检异常类型。
编写一个类,继承RuntimeException,并重写一参构造方法,即可完成自定义运行时异常类型。
class MyException extends Exception{
public MyException(String msg){
super(msg); //调用Exception中有一个参数的构造
//在此编写功能性语句,告知bug
}
}
2.5异常处理常见问题
1.try-catch-finally中哪个部分可以省略?
答:catch和finally可以省略其中一个,catch和finally不能同时省略。
注意:虽然格式上允许省略catch块,但是发生异常就不会捕获异常了,在开发时也不会这样去写代码。
2.try-catch-finally中,如果catch中return了,finally还会执行吗?
答:finally中的代码会执行
执行流程:
- 先计算返回值,并将返回值存储起来,等待返回 ;
- 执行finally代码块 ;
- 将之前存储的返回值,返回出去;
需要注意的是:
- 返回值在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不会改变。
- finally代码中不建议包含return,因为程序会在上述的流程中提前退出,也就是说返回的值不是try或catch中的值
- 如果在try或catch中停止了JVM,则finally不会执行.例如停电- -, 或通过如下代码退出
JVM:System.exit(0);