请问:这个错在哪了?如何更改?

leetow2006 2018-10-22 03:49:20
请看:
public class test1 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
A.stu.dsp();//这里错了
}

}

class Stu {
void dsp() {
System.out.println("hello");
}
}

class A {
public static Stu stu;
}

我的程序编译没有问题,运行时出错了。
类中的stu是静态变量,那么A.stu应该是可以的,就是A.stu再调用方法就出问题了,
错误是:
Exception in thread "main" java.lang.NullPointerException
at com.mingrsoft.test1.main(test1.java:7)
请问:错在哪了?怎么修改?(不要在void dsp前加static)
...全文
688 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
隐语者 2018-10-29
  • 打赏
  • 举报
回复
革命尚未完成,同志你仍需要努力啊
小泽在路上J 2018-10-25
  • 打赏
  • 举报
回复
空指针,需要实例化对象
cv阿文 2018-10-25
  • 打赏
  • 举报
回复
一楼回答正确,二楼回答错误
爱码叔 2018-10-25
  • 打赏
  • 举报
回复
new出来,否则指针是null
Wuli鵬 2018-10-25
  • 打赏
  • 举报
回复
编译是没错,但是运行后类加载,你的静态变量是对象,默认值为null,此时调用方法当然会报空指针

给stu赋上正确值就行了
Mrs Li 2018-10-25
  • 打赏
  • 举报
回复
没有实例是无法调用类中定义的非静态方法的,非静态方法必须用 对象.方法(参数)的形式来调用 静态方法是可以在不创建对象的情况下直接调用到的,格式为 类名.方法(参数)
leetow2006 2018-10-25
  • 打赏
  • 举报
回复
原生态的,没有用过。不知道怎么用
饭团味儿加号 2018-10-25
  • 打赏
  • 举报
回复
引用 11 楼 leetow2006 的回复:
可是有个问题,我们一般输出是System.out.println(),这里System是类名,out是类System中的静态的类成员,它是这样定义的: public final static PrintStream out = null;这里的out没有实例化,而类PrintStream中的println是一个普通的成员函数(不是静态的), 请问为什么我们可以System.out.println()使用呢?这里的out并没有实例化。
System类有一个setOut(PrintStream)方法,里面调用了一个native的setOut0(PrintStream)方法用来初始化out属性
leetow2006 2018-10-24
  • 打赏
  • 举报
回复
静态区域块也相当于初始化吗
leetow2006 2018-10-24
  • 打赏
  • 举报
回复
可是有个问题,我们一般输出是System.out.println(),这里System是类名,out是类System中的静态的类成员,它是这样定义的:
public final static PrintStream out = null;这里的out没有实例化,而类PrintStream中的println是一个普通的成员函数(不是静态的),
请问为什么我们可以System.out.println()使用呢?这里的out并没有实例化。
leetow2006 2018-10-23
  • 打赏
  • 举报
回复
java没有指针,这里的指针是指引用吗?
天涯若风 2018-10-23
  • 打赏
  • 举报
回复
可以改成 class A { public static Stu stu; static { stu = new Stu(); } }
小宇 2018-10-23
  • 打赏
  • 举报
回复
1楼正解!!
rougemont 2018-10-22
  • 打赏
  • 举报
回复
实际上public static Stu stu只是定义了一个指针句柄,但并没有实例和它关联。需要实例化,点赞2楼。
木子0204 2018-10-22
  • 打赏
  • 举报
回复
引用 1 楼 qq_24956041 的回复:
这是 空指针异常 你调用了没有实例化的 stu


没有实例是无法调用类中定义的非静态方法的,非静态方法必须用
对象.方法(参数)的形式来调用
静态方法是可以在不创建对象的情况下直接调用到的,格式为
类名.方法(参数)


参考:java 没有实例化直接调用

修改之后如下:
class A {
public static Stu stu = new Stu();
}
leetow2006 2018-10-22
  • 打赏
  • 举报
回复
是的,可以运行了,谢谢
qq_39936465 2018-10-22
  • 打赏
  • 举报
回复
2楼回答有误,1楼方法正确
qq_39936465 2018-10-22
  • 打赏
  • 举报
回复
用 new A.stu.dsp(); 替代
qq_24956041 2018-10-22
  • 打赏
  • 举报
回复
这是 空指针异常 你调用了没有实例化的 stu


没有实例是无法调用类中定义的非静态方法的,非静态方法必须用
对象.方法(参数)的形式来调用
静态方法是可以在不创建对象的情况下直接调用到的,格式为
类名.方法(参数)


参考:java 没有实例化直接调用

修改之后如下:
class A {
public static Stu stu = new Stu();
}

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧