A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.* ;
public class Copy{
        public static void main(String args[]){
                if(args.length!=2){                // 判断是否是两个参数
                        System.out.println("输入的参数不正确。") ;
                        System.out.println("例:java Copy 源文件路径 目标文件路径") ;
                        System.exit(1) ;        // 系统退出
                }
                File f1 = new File(args[0]) ;        // 源文件的File对象
                File f2 = new File(args[1]) ;        // 目标文件的File对象
                if(!f1.exists()){
                        System.out.println("源文件不存在!") ;
                        System.exit(1) ;
                }
                InputStream input = null ;                // 准备好输入流对象,读取源文件
                OutputStream out = null ;                // 准备好输出流对象,写入目标文件
                try{
                        input = new FileInputStream(f1) ;
                }catch(FileNotFoundException e){
                        e.printStackTrace() ;
                }
                try{
                        out = new FileOutputStream(f2) ;
                }catch(FileNotFoundException e){
                        e.printStackTrace() ;
                }
                if(input!=null && out!=null){        // 判断输入或输出是否准备好
                        int temp = 0 ;       
                        try{
                                while((temp=input.read())!=-1){        // 开始拷贝
                                        out.write(temp) ;        // 边读边写
                                }
                                System.out.println("拷贝完成!") ;
                        }catch(IOException e){
                                e.printStackTrace() ;
                                System.out.println("拷贝失败!") ;
                        }
                        try{
                                input.close() ;                // 关闭
                                out.close() ;                // 关闭
                        }catch(IOException e){
                                e.printStackTrace() ;
                        }
                }
        }       
}

————————————————————————————————————————————————————
比如上面这段代码可以public static void main(String args[])throws Exception
就不需要再方法体内单独进行捕获,干嘛要这么费劲单独捕获呢?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

2 个回复

倒序浏览
捕获是为了解决捕获的异常,让程序执行不会因为出错而被强制中断。
当然你也可以不处理,捕获异常,然后输出异常信息。就如同你的代码里。
catch(FileNotFoundException e){
                        e.printStackTrace() ;
}
这样处理的结果,看起来就会与不捕获而在方法上throws是一样的。

我是这样理解的。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
Java中用2种方法处理异常:

1.在发生异常的地方直接处理;

2.将异常抛给调用者,让调用者处理。你所说的在方法名后用throws,就属于这种。

java中的异常又大致分两种:
  (1)编译时异常:Java.lang.Exception
  (2)运行期异常:Java.lang.RuntimeException

Java.lang.Exception继承自Java.lang.Throwable;

Java.lang.RuntimeException继承自Java.lang.Exception.



编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。

public static void main(String args[])throws Exception
上面的这句话意味着在调用main方法的时候,直接把异常抛给了JVM,这种也是可以的。
单独捕捉异常的话可以很快的定位异常发生在什么位置。

评分

参与人数 2技术分 +1 黑马币 +20 收起 理由
张超 + 20 很给力!
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马