Java学习之Java异常

1.Throws关键字&异常类型

throws关键字是在方法上声明一个异常,表示这个方法可能会引发异常

throws关键字的作用大多是为了给后来者开发者提供便利。

当一个方法在写代码(编译时),以及程序在运行时(运行时),有可能会发生错误或者异常,为了防止内存泄漏,以及数据错乱,可以在方法或者类前面加一个throw + 异常类型,当出现错误,或者编写出错误的代码时来提示程序员出现错误的类型,以及原因,便于编辑器指出。

异常类型分为:

1.检查异常(继承Exception):编译未通过遇到的异常,错误等。

例如:

SQLException、IOException、ClassNotFoundException、

FileNotFoundException、 SocketException

2.非检查异常(继承RuntimeException):运行过程遇到的异常。

如:

NumberFormatException,ClassCastException,NullPointerException,ArithmeticException、IndexOutOfBoundsException

ps:

内存泄漏:当一个程序内变量使用的资源过多(如对象,地址的存储,数据库请求操作),会导致JVM(Java虚拟机:Java Virtue Machine)的内存过高,导致程序崩溃。

这种情况下,程序员只能重启程序,导致程序未能完成的操作永远不会被操作,导致数据丢失。涉及金钱交易的系统若出现内存泄漏问题,则会对用户,公司造成不可承担的后果。

package com.lx.demo13;

import java.io.IOError;
import java.io.IOException;
import java.sql.SQLException;

public class Base {
	public Base() throws ClassNotFoundException
	{
		
	}

}

如果父类的构造函数声明了检查异常,子类的构造函数

一定要声明大于或等于父类的检查异常,否则编译报错

package com.lx.demo13;



public class Son   extends Base{
	
	//throws是在一个方法上声明异常
	//throws声明异常
	Son() throws Exception
	{
		
	}

}

这个案例中Exception的范围就大于ClassNotFoundException(没有找到特定类异常)

因为ClassNotFoundException继承于Exception,ClassNotFoundException是Exception的子类,说明检查的范围Exception比ClassNotFoundException大(ClassNotFoundException只有特定错误出现才会被检查到,Exception只要不符合语法就会报错)

如果异常声明的检查范围子类大于父类,那么就会在一行产生两个相同的错误。这是不被允许的

在子类父类的方法继承中声明throws时,也遵循上述规则

package com.lx.demo14;

import java.sql.SQLException;

public class Son   extends  Base{
	
	/**
	 * 在继承关系中
	 * 如果子类重写了父类的方法,子类重写的方法声明了检查异常
	 * ,父类的方法必须声明大于或等于子类声明的检查异常
	 */
	
	public void run()  throws  SQLException
	{
		
	}

}

package com.lx.demo14;

import java.sql.SQLException;

public class Base {
	
	public void run()  throws  Exception
	{
		
	}

}

2.Final关键字

被final关键字修饰的类,方法,变量只能被赋值一次

package com.lixin.demo1;

public  final  class Animal {
	
	//final类中的变量是变量还是常量?
	//final类中的变量是变量
 	int  a  = 10;
	
	//final类中的方法是final方法
	public   void  run()
	{
		
	}

}

package com.lixin.demo1;

public class Test {
	
	public static void main(String[] args) {
		
		Animal  an  = new Animal();
		an.a++;
		System.out.println(an.a);
		
	}

}