Java面向对象编程补充

Java面向对象编程除了上一篇文章的编程框架以外,还有一些东西需要补充一下。

Java中的异常机制——Exception初步

在一个已编译的程序运行时,因为一些非正常现象(如除数为0、数组越界等)导致程序异常终止,此时我们就需要捕获并处理此异常,确保程序正常执行。

一、简单异常的体现
public class textEx {
	public static void main(String[] args) {
		System.out.println(1/0);
	}
}

系统抛出一个异常
在这里插入图片描述

二、异常的抛出

到这里就有疑问了,有没有一种机制既可以让程序顺利执行完毕,又能抛出这个异常呢?——有try-chtch-finally
我们可以在try块中放入可能会出现异常的代码,如果出现异常,则捕获异常并交给JRE中,JRE得到异常之后寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
随后就是finally,无论有没有发生异常现象,程序都会走到finally语句。
如图所示
在这里插入图片描述
程序演示

public class textEx {
	public static void main(String[] args) {
		try {
			System.out.println(1/0);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			System.out.println("异常捕获结束");
		}

		System.out.println("运行结束");
	}
}

这里我们可以看到最后一行的运行结束被成功打印,说明程序没有终止,任务达成。
在这里插入图片描述

三、手动抛出异常

在实际开发过程中,有些时候我们想让程序抛出一个我们想要的异常形式,在Java中支持自定义异常格式——即手动抛出异常。
这里对上面的程序简单修改即可完成一个简单的手动抛出异常

public class textEx {
	public static void main(String[] args) {
		try {
			
			System.out.println(1/0);
		} catch (Exception e) {
			System.err.println("异常除数出现0!");
		}
		System.out.println("运行结束");
	}
}

在这里插入图片描述

四、异常抛出原则
  1. 在Java中有时候我们会遇到一些异常,但捕获之后并不想立即将其抛出,此时我们就可以利用这样一种机制——抛给上一级。
  2. 实际上,异常也是一个类Error与Exception都继承自Throwable类,抛出多个异常时要子类异常在前,父类异常在后,当然有时为了避免出错,会只是用一个父类完事了。
  3. 我们可以在编写一个方法时,可以用throws关键字声明一个异常类,供给异常的上抛。

常见的异常类:

--ArithmeticException
--NullPointerException
--ClassCastException
--ArrayIndexOutOfBoundsException
--NumberFormatException

Java OOP中的一些其他操作

一、 instanceof 运算符

当一个程序中声明了多个类,而且多次继承,new了好多个多个对象时,就可以借助instanceof 运算符判断对象与类之间的关系
程序演示

public class test_class {
	public static void main(String[] args) {
		Cat cat=new Cat();
		System.out.println(cat instanceof Cat);		//true
		System.out.println(cat instanceof Dog);		//false
		//System.out.println(cat instanceof man);	//会报错
	}
}
class Cat{
	
}
class man{
	
}
class Dog extends Cat{
	
}
二、equals运算符

在Java中双等号 == 是用来比较两个对象是不是同一个,而equals才是用来比较对象里数据是否相等。

public class testEquals {
	public static void main(String[] args) {
		String s1 = new String("yang");
		String s2 = new String("yang");
		System.out.println(s1==s2);         //false, 两个字符串不是同一个对象
		System.out.println(s1.equals(s2));  //true,  两个字符串内容相同
	}
}
三、对象转型

对象可以自动向上转型,即子类对象可以自动向父类对象转型,而父类对象也可以通过修饰想子类转型,我们称之为向下转型。

public class testCasting {
	public static void main(String[] args) {
		//向下自动转型
		Object objs=new String();
		//向下转型
		String str=(String)objs;
		System.out.println(objs==str);	//true,是同一个对象
	}
}

到这里,Java面向对象编程的初步操作就记录完成了,抽象类和方法在这里暂且不记录吧。

晓看天色暮看云,行也思君,坐也思君。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值