2-1_12-16-2014-自定义异常
来源:互联网 发布:linux ntp时间同步配置 编辑:程序博客网 时间:2024/06/06 11:02
一、自定义异常
(1)、自定义应用异常步骤:
a、新建一继承自Throwable或其子孙类的类。
b、添加构造方法(根据需要定义构造,通常在子类的构造中要调用从父类那儿继承过来的”同构构造“)。
c、在被调方法(callee)中使用throw抛出异常。
d、在主调方法(caller)中捕获处理异常。
代码实例:
a、b两个步骤:定义一个子类,并且对其添加构造方法(与父类同构构造)
package abnormal;public class MyTestException extends Throwable {/** * */private static final long serialVersionUID = 1L;//去除MyTestException下面的黄线public MyTestException(){super();//自定义构造,与父类型同构构造}public MyTestException(String msg){super(msg);//通过super调用父类中的构造,其中参数是传给父类中的构造}}c、创建一个被掉方法(callee)用于抛出异常
package abnormal;public class Test {public static void Callee() throws MyTestException{//Callee()仅仅是函数名,注意区分函数名与系统函数区别throw new MyTestException("扔出异常");}}
d、创建一个主调方法(caller)——即本例中的main()方法
package abnormal;public class Main {public static void main(String[] args) {//系统提示异常可以使用声明,也可以使用try{}catch{}try {Test.Callee();//这里主叫} catch (MyTestException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}或者:
package abnormal;public class Main {public static void main(String[] args) throws MyTestException {Test.Callee();//这里主叫}}
备注:
1、抛出异常代码所在的方法要加throws声明。
2、实例化对咬要用new关键字,new后面必须为具体对象
3、try{}catch{}中catch异常捕获类型为发生异常的类型,或者其父类型(向下兼容)。
try{}catch{}catch{//这里catch必须为上面catch异常捕获类型的父类型}final{//最终释放资源}(2)、泛型:——应该是只针对集合元素来说的
普通泛型:< >这两个括号中放置引用类型。
通配泛型:“?”符号表示任意类型。
受限泛型:extends(上限,参数类型是T或者其子类)
super(下限,参数类型是此类的超类)
声明:有如下类:Animal、Cat、Tiger、DongbeiTiger、GenericType。(各个类之间的继承关系如其自然分类)
1、上限约束:<? extends Animal>参数类型为Animal及其后代。向上限集合中添加元素时,需要将带添加对象转换成参数类型,但是参数类型是上限类型或器子孙类(不确定),所以无法添加元素。
{PS:a、子类型对象可以添加到父类型集合中——类型兼容。向下兼容父类型兼容子类型
b、<? extends Animal>表示Animal及其后代类型,上限约束不能通过该变量添加上限类型及其子类型的具体对象(只能添加NULL),可以赋值。
}
2、下限约束:<? super Animal>参数类型Animal类及其祖先(一直到Object类),向下限集合添加元素时,需要将待添加的对象转换成参数类型,此时统一按下限类型转换,因此可以添加下限类型及其子孙类型。(上面的向下兼容问题,父类可以兼容子类)
{PS:List<? super DongBerTiger> lst1 = new ArrayList<DongBeiTiger>();
<? super DongBerTiger>表示DongBeiTiger类及其祖先(一直到Object类)。}
3、使读写分离,读写授权:
A、添加数据可以理解为向集合中写数据——写数据时,用下限泛型。
B、获取数据可以理解为向集合读数据——读数据时,用上限泛型。
4、如何将“只写”泛型约束集合转换成“只读”:
List<? extends Animal> rs = Array.asList(results.toArray(new Animal[result.size()]));如何将“只读”泛型约束集合转换成“只写”:
List<? extends Animal> rs = Array.asList(results.toArray(new Animal[result.size()]));5、写出所有代码???
(3)、文件I/O系统:
1、以 C:\Program Files\Java\jdk1.8.0_25为例:
a、绝对路径:从盘符开始写的路径。
b、相对路径:相对于当前路径的路径
./ :当前目录
../ :上级目录
../../ :当前目录上级的上级目录
c、路径表达式:
2、文件的路径的获取
package exercise;import java.io.File;import java.io.IOException;public class Second {public static void main(String[] args) throws IOException {File dir0 = new File(".");//创建一个关联与当前工作目录的文件对象System.out.println(dir0.getPath());//获取对象构造时,传入的参数路径(new后面的?)System.out.println(dir0.getAbsolutePath());//路径表达式:获取当前工作目录的绝对路径+构造参数路径(或者user.dir+构造参数)System.out.println(dir0.getCanonicalPath());//获取路径表达式换算后的绝对路径——标准绝对路径}}3、一个重要的API:System.getProperty()
package exercise;import java.io.File;import java.io.IOException;public class Second {public static void main(String[] args) throws IOException {System.out.println(System.getProperty("java.io.tmpdir"));//程序临时目录System.out.println(System.getProperty("java.ext.dirs"));//程序拓展目录System.out.println(System.getProperty("java.file.separactor"));System.out.println(System.getProperty("user.dir"));//程序工作目录}}4、文件(folder)文件操作:
package Folder;import java.io.File;public class folder {public static void main(String[] args) {File folder = new File("./src/myfile");//这行代码可以理解构造器System.out.println(folder.exists());if(!folder.exists()){//folder.mkdir();//一次创建一个目录文件夹folder.mkdirs();//一次创建多级文件目录}System.out.println(folder.exists());//判断文件是否存在System.out.println(folder.delete());//删除的是最子级的文件System.out.println("==============");File files = new File(".");//遍历时必须给出结点//遍历所有文件:for(String ele:files.list()){//ele为字符串System.out.println(ele);}System.out.println("==============");//遍历文件夹:只返回文件夹for(File ele:files.listFiles()){if(ele.isDirectory()){//ele是文件类型System.out.println(ele);}}}}5、
package Folder;import java.io.File;import java.io.IOException;public class FileMain {public static void main(String[] args) throws IOException {File file = new File("./src/text.txt");System.out.println(file.exists());System.out.println(file.createNewFile());//创建新文件System.out.println(file.exists());if(file.delete()){System.out.println("文件删除成功");}file.exists();}}
6、文件复制:
a、Java垃圾回收机制:Java虚拟机会自动扫描内存,释放其中没有引用的内存。
b、变量(引用类型、地址)存在栈内存中,其值是存在堆内存里面的。这两个模块中存在引用,当程序运行结束,该引用消除,栈内存自动释放,堆内存中的内容是由Java虚拟机进行垃圾回收。
c、文件I/O流中时堆内存会有两个引用一个是I/O流的引用,还有一个是磁盘文件与堆内存的引用。前一个引用自动消除,后一个引用需要我们手动消除。
d、操作物理文件要先建立连接
e、文件复制代码:
package Folder;import java.io.*;import java.nio.channels.FileChannel;public class FileCopyMain {public static void main(String[] args) {FileInputStream fis = null;//文件输入流变量FileOutputStream fos = null;//文件输出流变量FileChannel fcIn = null;//输入流管道FileChannel fcOut = null;//输出流管道try{fis = new FileInputStream("./src/myFile/src.txt");//复制源:具体到文件名及其类型fos = new FileOutputStream("./src/myFile/dest.txt");//复制目标fcIn = fis.getChannel();fcOut = fos.getChannel();fcIn.transferTo(0, fcIn.size(), fcOut);//动力泵}catch(IOException exception){System.out.println(exception.getMessage());}finally{//必须显示关闭,垃圾回收器才能收回对象的内存(托管资源与非托管资源)if(null != fcOut){try{fcOut.close();}catch(IOException ex){}}if(null != fcIn){try{fcIn.close();}catch(IOException ex){}}if(null != fos){try{fos.close();}catch(IOException ex){}}if(null != fis){try{fis.close();}catch(IOException ex){}}}}}
- 2-1_12-16-2014-自定义异常
- 2-2_12-16-2014
- 4-1_12-19-2014
- 4-1_12-18-2014(今天无作业)
- [javac] 编译器 (1.5.0_12) 中出现异常
- 3-1_12-17-2014(今天无作业)—文件读写-多线程
- 黑马程序员_12月16日
- 4_12(1)、(2)、5_2、5_5作业
- 4_12(1)、(2)、5_2、5_5作业
- 异常2 (使用自定义异常)
- 自定义异常-Exception -2
- 自定义异常-Exception -1
- 自定义异常的应用1
- #码神心得_12# java基础类库2
- 伪码农的日志_12.2_软件工程过程模型
- 工作总结_12
- 自定义异常
- 自定义异常
- JAVA转JOSN格式
- 第十六周项目1-数组的排序
- 2014 12.16
- Linux中的拷贝命令cp
- C语言面向对象编程(一):封装与继承
- 2-1_12-16-2014-自定义异常
- 为什么计算机的学生要学习Linux开源技术
- 进度条seekbar
- 年龄几何
- C语言面向对象编程(二):继承详解
- nyoj-325 zb的生日
- 用C#识别图像中的文字_MODI OCR
- Ubuntu上安装apktool
- C语言面向对象编程(三):虚函数与多态