Java面向对象-高级

一、包装类

在java中,八种基本数据类型并不是引用数据类型,为了解决这个问题,满足Java中“一切皆对象”的设计原则,引入了八种基本数据类型的包装类。

八种基本数据类型 对应 包装类的情况如下:

基本数据类型包装类
intInteger
charCharacter
floatFloat
doubleDouble
booleanBoolean
byteByte
shortShort
longLong

以上八种包装类,可以将基本数据类型按照类的形式进行操作。
八种包装类还可分成两种大类型:

  • 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中的代码会执行
执行流程:

  1. 先计算返回值,并将返回值存储起来,等待返回 ;
  2. 执行finally代码块 ;
  3. 将之前存储的返回值,返回出去;

需要注意的是:

  1. 返回值在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不会改变。
  2. finally代码中不建议包含return,因为程序会在上述的流程中提前退出,也就是说返回的值不是try或catch中的值
  3. 如果在try或catch中停止了JVM,则finally不会执行.例如停电- -, 或通过如下代码退出
JVM:System.exit(0);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值