黑马程序员技术交流社区
标题:
我这个为什么会编译失败,求解答。
[打印本页]
作者:
彭柏良
时间:
2014-12-4 11:59
标题:
我这个为什么会编译失败,求解答。
import java.io.*;
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r = r;
}
public String myReadLine()throws IOException
{
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch = r.read())!=-1)
{
if(ch == '\r')
continue;
else if(ch == '\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
public void myClose()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String[] args)
{
FileReader fr = null;
try
{
fr = new FileReader("demo.txt");
MyBufferedReader myBuf = new MyBufferedReader(fr);
String line = null;
while((line = myBuf.myReadLine())!=null)
{
System.out.println(line);
}
}
catch (IOException e)
{
throw new RuntimeException("fail to read");
}
finally
{
try
{
if(fr != null)
myBuf.myClose();
}
catch (IOException e)
{
throw new RuntimeException("fail to close");
}
}
}
}
复制代码
作者:
彭柏良
时间:
2014-12-4 12:00
这个是编译的提示。
1.png
(8.62 KB, 下载次数: 9)
下载附件
2014-12-4 12:00 上传
作者:
船长
时间:
2014-12-4 12:20
彭柏良 发表于 2014-12-4 12:00
这个是编译的提示。
MyBufferedReader myBuf = new MyBufferedReader(fr);这一句你该定义到try语句外面,试试就行了
作者:
彭柏良
时间:
2014-12-4 12:46
你说的这个在理,因为它被定义到try里面去了,别的语句会访问不到。但按照你这样改的话会出现NullPointerException,所以,这样改就可以了:try外面:MyBufferedReader myBuf = null;
try里面:myBuf = new MyBufferedReader(fr);
作者:
kerner
时间:
2014-12-4 14:38
除了嵌套语句块,其它语句块不能相互访问变量。
作者:
hello_csu
时间:
2014-12-5 20:22
你主要作用域啦,一般你在{ }里面定义了变量,它作用域只会在这个{}里面,讲义将Myclass的定义放到函数开始吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2