---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
异常:
异常概述:异常就是程序在运行时出现的不正常情况,
异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。即就是java对不正常情况进行描述后的对象体现。
划分2种:(1)严重的问题;java通过error进行描述。对于error一般不编写针对性的代码对其进行处理
(2)非严重的问题;java通过exception类进行描述。对于exception使用针对性的处理方法进行处理
无论error或者exception都具有一些共性内容,比如不正常情况的信息,引发的原因等。
Throwable错误或异常的超类(父类) (使用体系原则:看父类定义使用子类对象) |--error |--exception
异常体系:其特点:异常体系中的所有类以及建立的对象都具备可抛性,即被throw和throws可操作,并只有异常体系具备这个特点
Throw的用法:定义在函数内用于抛出对象
Throws的用法:定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开
当函数内有throw抛出异常对象并未进行try异常处理,必须在函数上声明,否则编译失败
注意:RuntimeException异常除外。也就是说函数内如果抛出的是RuntimeException异常,函数上可以不用声明。
如果函数声明了异常,调用者需要进行处理。处理方式可以throws可以try。
异常有2种:编译时被检测异常:该异常在编译时没有处理(throws、try),那么编译失败,该异常被标示即可以处理
运行时异常(编译时不检测):在编译时不需要处理,编译器不检查,该异常发生建议不处理,让程序停止,需要对代码进行修正。
异常处理语句: 有三种格式:
格式一:
try{
可能发生异常的代码;
}
catch(接收捕获异常类的对象异常类引用变量){
处理代码;
}
格式二:
try{
可能发生异常的代码;
}
fianlly{
一定要执行的语句;(通常用于关闭资源)
}
格式三:
try{
可能发生异常的代码;
}
catch(捕获异常类的对象异常类引用变量){
处理代码;
}
finally{
一定要执行的语句;(通常用于关闭资源)
}
注意:finally中通常定义:关闭资源代码,因为资源必须要释放(只有右上图所示的时候不会执行)
自定义异常:定义类继承exception或者runtimeexception
(1)为了让该自定义类具备可抛性;(2)让该类具备操作异常的共性方法。
当要定义自定义异常的信息时,可以使用父类已经定义好的功能,异常信息传递给父类的构造函数
自定义异常是按照java的面向对象思想,将程序中出现的特有问题进行封装
异常的好处:将问题进行封装;将正常流程代码和问题处理代码相分离,方便阅读。
异常的处理原则:(1)处理方式有2种,try或者throws;(2)调用到抛出异常的功能时,抛出几个就处理几个,即可能出现一个try对应多个catch的情况;(3)多个catch,父类的catch在最下面;(4)catch内,需要定义针对性的处理方式,不要简单的定义printstacktrace,输出语句。也不要不写。当捕获到的异常,本功能处理不了时,可以继续在catch中抛出, ;如果该异常处理不了,但该异常并不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常;或者异常可以处理但需要将异常产生的和本功能相关的问题提供出去,让调用者知道并处理,也可以将捕获异常处理后转换新的异常抛出
异常的注意事项:最常见的就是子父类覆盖时(1)子类抛出的异常必须是父类异常的子类或者子集(2)如果父类或者接口没有异常抛出时,子类覆盖出现异常只能try不能抛。参阅
包package
1、用来对类文件进行分类管理的。
2、给类提供多增命名空间。
3、写在程序文件的第一行。
4、类名的全称的是 包名.类名。(所有字母小写)
5、包也是一种封装形式。
6、包出现的好处:包的出现可以让运行文件和源文件相分离
包与包之间访问
1、包名.类名
2、需要设置classpath告诉Jvm去哪里找指定的package包。
3、有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限,所以被访问的类被public修饰。
4、类共有后,被访问的成员也要公有才可以被访问。
总结:
1、包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。(不同包中的类可以有关系如存在继承关系;Protected:保护权限,同一个包中,作用只限于覆盖)
2、不同包中的子类还可以直接访问父类中被protected权限修饰的成员
3、包与包之间可以使用的权限只有两种,public protected
注意:
一个包中有2个类,一个.java文件中不能出现2个以上的共有类或者接口;包中可以还有包。
导入import:
为了简化类名的书写,就用一个关键字import把包的所有的类给导进行(即import导入的是包中的类)。
注意:
建议不要写通配符“*”,需要用到包中的哪个类就导入哪个类。
建议定义包名不要重复可以使用个url来完成定义,因为url是唯一的(url 是域名)。
//以下代码是IO流中抛异常创建日志文件
import java.util.*;
import java.io.*;
import java.text.*;
class ExceptionInfo
{
publicstatic void main(String[] args)
{
try
{
int[]arr = new int[2];
System.out.println(arr[3]);
}
catch(Exception e)
{
try
{
Dated = new Date();
SimpleDateFormats = new SimpleDateFormat("YYYY-MM-dd");
Stringx = s.format(d);
PrintStreamps = new PrintStream("1.log");
ps.println(x);
System.out.println(ps);
}
catch(IOException ee)
{
thrownew RuntimeException("日志文件创建失败");
}
e.printStackTrace(System.out);
}
}
//将C盘的一个文本文件复制到D盘——抛出异常的处理方式
//复制原来:将C盘下的文件数据存储到D盘下的一个文件中
import java.io.*;
class CopyText
{
publicstatic void main(String[] args) throws IOException
{
copy_1();
}
publicstatic void copy_1() throws IOException
{
FileWriterfw = new FileWriter("123_copy.txt");
FileReaderfr = new FileReader("123.txt");
intnum = 0;
while((num = fr.read())!=-1)
{
fw.write(num);
}
fw.close();
fr.close();
}
publicstatic void copy_2()
{
FileWriterfw = null;
FileReaderfr = null;
try
{
fw= new FileWriter("123_copy.txt");
fr= new FileReader("123.text");
char[]bvf = new char[3];
intlen = 0;
while((len = fr.read(bvf))!=-1)
{
fw.write(bvf,0,len);
}
}
catch(Exception e)
{
thrownew RuntimeException("读写失败");
}
finally
{
if(fr!=null)
try
{
fr.close();
}
catch(Exception e)
{
}
if(fw!=null)
try
{
fw.close();
}
catch(Exception e)
{
}
}
}
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------