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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿牛 中级黑马   /  2012-3-26 10:15  /  2700 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面是毕老师在讲IO关于自己写readLine()的课堂例子,我按老师的思路自己写了遍代码,编译能通过,但执行时却报错,
Exception in thread "main" java.lang.NullPointerException
        at myBuffered.myReadLine(myBuffered.java:21)
        at myBufferedDemo.main(myBuffered.java:39)
空指针异常,但我的代码和老师课堂上的一样,老师能通过每报错的。我把StringBuilder sb=null;注释掉后,重写,运行通过。问题是为什么呢?

import java.io.*;
class myBuffered
{
                private FileReader r;
                myBuffered(FileReader r)
                {
                        this.r=r;
                }
        public static String myReadLine(FileReader r)throws IOException
        {
       
                int ch;
                //StringBuilder sb=null;
                StringBuilder sb=new StringBuilder();
               
                               while((ch=r.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                                return sb.toString();
                        else sb.append((char)ch);
                       
                }
                return null;
        }
        public void myClose()throws IOException
        {
                r.close();
        }
}
class myBufferedDemo
{

        public static void main(String[] args) throws IOException
        {
                FileReader fr=new FileReader("copyDemo.java");
               
                String line=null;
                while((line=myBuffered.myReadLine(fr))!=null)
                {
                        System.out.println(line);
                        //fr.newLine();
                       
                }
                fr.close();
        }
}

5 个回复

倒序浏览
本帖最后由 鲍亚坤 于 2012-3-26 10:34 编辑

空指针异常。
这句StringBuilder sb=null;
回复 使用道具 举报
本帖最后由 鲍亚坤 于 2012-3-26 10:32 编辑
  1. import java.io.*;
  2. class myBuffered
  3. {
  4.                  private FileReader r;
  5.                  myBuffered(FileReader r)
  6.                  {
  7.                          this.r=r;
  8.                  }
  9.          public static String myReadLine(FileReader r)throws IOException
  10.          {
  11.          
  12.                 int ch;
  13.                  StringBuilder sb=null;
  14.                  sb=new StringBuilder();               
  15.                                while((ch=r.read())!=-1)
  16.                  {
  17.                          if(ch=='\r')
  18.                                  continue;
  19.                          if(ch=='\n')
  20.                                  return sb.toString();
  21.                          else sb.append((char)ch);
  22.                         
  23.                 }
  24.                  return null;
  25.          }
  26.          public void myClose()throws IOException
  27.          {
  28.                  r.close();
  29.          }
  30. }
  31. class myBufferedDemo
  32. {

  33.         public static void main(String[] args) throws IOException
  34.          {
  35.                  FileReader fr=new FileReader("D:\\1.txt");
  36.                  
  37.                 String line=null;
  38.                  while((line=myBuffered.myReadLine(fr))!=null)
  39.                  {
  40.                          System.out.println(line);
  41.                          //fr.newLine();
  42.                         
  43.                 }
  44.                  fr.close();
  45.          }
  46. }
复制代码
没事啊
回复 使用道具 举报
空指针异常啊;  
StringBuilder sb=null;
StringBuilder sb=new StringBuilder();     
这一段不该这么写的,应该是
StringBuilder sb=null;
sb=new StringBuilder();  
这样写你试试。
回复 使用道具 举报
刘宁 发表于 2012-3-26 10:27
空指针异常啊;  
StringBuilder sb=null;
StringBuilder sb=new StringBuilder();     

只写StringBuilder sb=null;运行出错,但毕老师就是这样写的但没出错,我把那句注释掉,改成StringBuilder sb=new StringBuilder(); 后,运行正常了,我不知道按老师的写法只写StringBuilder sb=null;我的代码哪错了
回复 使用道具 举报
java.lang.NullPointerException空指针异常,属于运行时异常
StringBuilder sb=null;
StringBuilder sb=new StringBuilder();     
为什么要对同一个指针sb进行两次StringBuffer定义呢,定义一次就够了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马