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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵方明 中级黑马   /  2012-6-19 19:00  /  1447 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵方明 于 2012-6-19 19:32 编辑

class Base
{
public Base()
{
  test();
}
public void test() //1号
{
System.out.println("将被子类重写的方法");
}
}
public class Sub extends Base
{
private String name;
public void test()//2号
{
System.out.println("子类重写父类的方法,"+”其name字符串长度“+name.length());
}
public static void main(String [] args)
{
Sub s=new Sub();
}
}
系统创建Sub对象时,会先执行父类构造器,Base构造器调用2号test方法,引发空指针异常,为什么?
如何修改使他正确?

5 个回复

倒序浏览
本帖最后由 唐辉辉 于 2012-6-19 21:00 编辑

是length()方法的问题,因为你还没有给name初始化,java自动初始化的为null,所以在调用length()方法报空指针异常。

另外:请把length改成length(),length是取数组的长度
回复 使用道具 举报
字符串没有length,只有length()
回复 使用道具 举报
class Base
{
public Base()
{
   test();
}
public void test() //1号
{
System.out.println("将被子类重写的方法");
}
}
public class Sub extends Base
{
private String name;
public void test()//2号
{
System.out.println("子类重写父类的方法,"+“”其name字符串长度“+name.length);//这里有你的输入错误。你在+后面的引号是汉语中的引号,不是英文的。
                                                                                               //还有这里的name你定义成String,那么获取其长度length();必须有括号。这个是数组取长度不一样。
                                                                                              //char[] ch = new char('a','v','d') 数组取长是ch.length
}
public static void main(String [] args)
{
Sub s=new Sub();
}
}
系统创建Sub对象时,会先执行父类构造器,Base构造器调用2号test方法,引发空指针异常,为什么?
如何修改使他正确?
回复 使用道具 举报
private String name;
初始化为name=null.
所以name.length()就会出现空指针异常
回复 使用道具 举报
创建对象时,name会初始化为null,既然是空怎么会有长度呢,所以肯定会报错啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马