这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)
一、异常
1、程序的异常
<1>概念:异常是程序运行时候出现的不正常的情况,是java对不正常现象进行描述后的对象体现。
<2>java中对问题划分为两类:
对于严重的问题,java通过Errror类进行描述。
对于非严重性问题:java通过Exception类进行描述。
异常体系:
Throwable
|---Error
|---Exception
|-----RuntimeException
<3>异常的特点:异常体系中的所有类以及建立的对象都具有可抛性。也就是可以被 throw和throws 关键字所有操作。只有异常体系具备该特性。
<4>throws和throw区别:
1、throws使用在函数上,throws后面跟的是异常类,可以跟多个,用逗号隔开。
2、throw使用在函数内,throw后跟的是异常对象。
2、异常的处理
<1>异常处理的基本格式
try
{
异常检测代码;
}
catch(Exception e)
{
异常输出语句;
}
finally
{
一定会执行的语句,一般释放资源时使用finally代码块
(例如:数据库资源、系统资源);
}
<2>异常处理的原理:
1.try中的代码,在异常出现时新建一个对象:new AritchmeticException()。
2.将该对象传给catch函数,打印异常输出信息。
<3>对异常对象的常见操作
String getMessage(); //打印异常对象输出信息
String toString(); //将异常对象转换为String类型
void printStackTrace(); //打印堆中异常对象
*注意:其实jvm默认的异常处理机制,是调用的printStractTrace方法,打印异常的堆栈中的跟踪信息。
<4>异常声明的两种处理方式
1.继续抛出(关键字throws、相当于未处理)
2.使用异常处理的结构进行处理。
try{}
catch(Exception e){}
finally{}
<5>多异常的处理
1、当一段功能代码抛出多种异常时,可用多个catch代码块捕获相应异常。
2、对方声明几个异常,就对应有几个catch块。
如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
<6>自定义异常处理
1、当在函数的内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理;要么在函数上声明让调用者处理。
2、自定义异常信息
当要定义自定义异常的信息时,可以使用父类已定义好的功能。
异常信息传递给父类的构造函数。
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
3、自定义异常的好处:
1.将问题进行封装。
2.将正常流程代码和问题处理代码相分离,方便阅读。
<7>运行时异常:RuntimeException
1、特殊的异常RuntimeException
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
原因:之所以不用在函数上声明,是因为不需要调用者处理。
当该异常发生,希望程序停止。因为在运行时,出现了
无法继续运算的情况,希望停止程序后,对代码进行修正。
2、两种常见的异常:
1.编译时被检测异常
该异常在编译时没有处理(try或抛出),编译失败。
该异常被标识,代表着可以被处理。
2.运行时异常(编译时不需要检测)
在编译时,不需要处理,编译器不检查。
该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
<8>异常处理的常用格式:
1.第一种格式:
try{}catch(){}finally{}
2.第二种格式:
try{}catch(){}
3.第三种格式
try
{
不属于本模块的异常,抛出到别的模块
}
finally
{}
*注意:
1、释放资源时使用finally代码块
2、finally只有一种情况不会执行。当执行到System.exit(0);finally不会执行。
<9>异常在子父类覆盖中的体现
1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2、如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
如果子类方法发生了异常,就必须要进行try处理。绝对不能抛出异常。
<10>异常的练习(异常在子父类覆盖中的体现,RuntimeException和Exception的区别)
需求:计算圆形、正方形的面积(抛出异常的练习)
class AException extends RuntimeException
{
AException(String message)
{
super(message);
}
}
class BException extends AException
{
BException(String message)
{
super(message);
}
}
class CException extends Exception
{
CException(String message)
{
super(message);
}
}
class Shape
{
void getArea()throws AException
{
throw new AException("输入的数据不符合规范!");
}
}
class Rec extends Shape
{
private double len;
private double ;
Rec(double len,double wid)//throws BException
{
if(len <= 0 || wid <= 0)
throw new BException("输入的数据不符合规范!");
this.len = len;
this.wid = wid;
}
void getArea()
{
System.out.println("Area = " len*wid);
}
}
class Cricle extends Shape
{
private double r;
private final double PI = 3.14;
Cricle(double r)
{
this.r = r;
}
void getArea()
{
System.out.println("Area = " r*r*PI);
}
}
class ExceptionDemo1
{
public static void main(String[] args)
{
Rec r1 = new Rec(-2,3);
r1.getArea();
}
}
二、包(package)
1、包的作用:对类文件进行分类管理,给类提供多层命名空间,写在程序的第一行。
总结:1.包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
2.不同包中的子类还可以直接访问父类中被protected权限修饰的成员。
3.包与包之间可以使用的权限只有两种,public和protected。
访问权限总结:
public protected default private
同一类中: ok ok ok ok
同一包中: ok ok ok
子类: ok ok
不同包中: ok
二、import关键字
1、import导入包注意事项:
导入其他包中的类(只导入了包中的类,没有导入包中的子包)。
建议,不要写通配符,使用那个类,就导入那个类。因为不同的包中有可能重名的类。
2、包名的定义规范:
建立包名不要重复,可以使用URL来完成定义,URL是唯一的。
例如:www.itcast.com
package cn.incast.test1;
网友评论