黑马程序员技术交流社区
标题:
复制文件
[打印本页]
作者:
黑马李刚
时间:
2011-9-3 19:21
标题:
复制文件
不做任何try,catch动作(仅在main(String args[])后添加throws IOException), 程序运行正常。try , catch 后编译通过,运行时报错:
Exception in thread "main" java.lang.NullPointerException
at L.main(L.java:16)
代码如下:
[code=java]import java.io.*;
class L
{
public static void main(String args[])
{
FileWriter fw=null;
FileReader fr=null;
try
{
new FileReader("L.java");
new FileWriter("mm.txt");
int len=0;
char[] buf=new char[1024];
while((len=fr.read(buf))!=-1)
{
fw.write(buf,0,len);
}
}
catch (IOException e)
{
throw new RuntimeException("error");
}
finally
{
if(fr!=null)
try
{
fr.close();
}
catch (IOException e)
{
}
if(fw!=null)
try
{
fw.close();
}
catch (IOException e)
{
}
}
}
}[/code]
作者:
匿名
时间:
2011-9-3 20:03
哥们,你看清楚你的代码,new FileReader("L.java");new出来的没有给fr,所以fr这个时候还是null,你要读它,当然就空指针异常了,把new FileReader("L.java"); 改成fr = new FileReader("L.java"); fw = new FileWriter("mm.txt");这样就没问题了。
作者:
匿名
时间:
2011-9-3 23:16
编译通过,那是因为编译指示将你代码转换成.class二进制代码,并没有去执行你的程序,也不知道你用一个null去调用了某个方法,所以通过,运行时,fr一直是null值,不报错才怪
作者:
匿名
时间:
2011-9-3 23:27
代码给你重新写了下,fw、fr的问题[code]import java.io.*;
class L {
public static void main(String args[]){
FileWriter fw=null;
FileReader fr=null;
try{
fr = new FileReader("L.java");
fw = new FileWriter("mm.txt");
int len=0;
char[] buf=new char[1024];
while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);
}
}catch (IOException e){
throw new RuntimeException("error");
}
finally{
if(fr!=null)
try{
fr.close();
}catch(IOException e){}
if(fw!=null)
try{
fw.close();
}catch(IOException e){}
}
}
}[/code]
作者:
匿名
时间:
2011-9-3 23:28
throws IOException 的作用是将可能出现的异常抛给调用这个方法的方法,main方法上加throws IOException意思就是把异常交给jvm处理了
作者:
李叶
时间:
2011-9-4 01:59
这个问题嘛,首先要弄清楚报错信息的含义
先来看你程序运行时候报错的第一句:
Exception in thread "main" java.lang.NullPointerException
这句话是什么意思呢,这句话的意思就是:
在你执行main方法的时候,程序抛出了一个异常,异常的名字叫做NullPointerException
至于“异常”的定义和概念,如果你没有学过的话
你就简单地把它理解成用于描述错误细节的信息就好了
所以,Exception in thread "main" java.lang.NullPointerException这句话你就可以理解成:
你的程序出现了错误,错误的描述信息是NullPointerException
下面我们就来看一看NullPointerException描述的是什么错误吧
NullPointerException,翻译成中文就应当是“空指针异常”
而这种错误如果产生的话,通常只有一个原因,那就是:
当一个变量的值为null的时候,你如果调用了这个变量的属性或方法
由于null是没有任何属性或者方法的,所以就会出现NullPointerException错误
了解了NullPointerException的含义之后,我们再来看看错误信息中下面的一句话
at L.main(L.java:16);
这句话的含义应该很好理解吧?照直翻译过来,就是:
在L.java这个类的第16行出了错,这行代码是main方法中的代码
所以,我们就把注意力集中在第16行代码上[code=java]while((len=fr.read(buf))!=-1)[/code]在这行代码中,我们可以看到调用了fr这个变量的read()方法去读取数据
那么,如果fr这个变量的值为null的话,程序就会出现NullPointerException错误
所以,问题的关键就变成了:fr这个变量的值究竟是不是null呢?
我们现在再往回看一段代码吧,我们可以发现在第8行的代码是这样写的:[code=java]FileReader fr=null;[/code]在这行代码中,我们可以很清楚地看到fr的值被定义为了null
并且从这行代码开始,直到执行第16行代码之前,fr的值都没有再改变过
所以,问题的原因就出在这里:
当fr的值为null的时候,你就调用了fr中的read()方法
Tips:
在这里我只是指出问题的原因所在,具体这个问题要怎么解决还是你自己来吧呵呵
还有在上面的表述中,我使用的说法是“错误”而不是“异常”,这样说主要是为了方便进行理解
虽然不够严谨,不过也是没有错的~
还有,再啰嗦一句关于学习的一点捷径吧~
每次在解决问题之后,如果你能够把产生这种问题的原因记录下来的话
那么下次一旦再遇上这种问题,就可以很轻松地找到问题所在并且解决它了
日积月累的话,以后你无论遇上什么样的问题,都可以很轻松地找到问题所在并解决它了
[
本帖最后由 李叶 于 2011-09-04 02:05 编辑
]
作者:
匿名
时间:
2011-9-4 09:36
。。。。我是来看楼上的
作者:
黑马李刚
时间:
2011-9-4 10:56
谢谢各位先,看来老罗今天心情不错哦
[
本帖最后由 黑马李刚 于 2011-09-04 10:57 编辑
]
作者:
匿名
时间:
2011-9-4 11:06
我也是来看李叶同学评论的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2