请大神看看为什么空指针异常。。。

小白云天 2016-04-13 10:40:03
public class Clerk {
public int index=0;}



public class Productor extends Thread {
private Clerk cl;
public Productor(Clerk c1){
this.cl=cl;
}
public void run(){
System.out.println(cl.index);}}


public class Test{

public static void main(String []args){
Clerk cl=new Clerk();

Thread th1=new Productor(cl);
th1.start();
}}
运行的时候在 System.out.println(cl.index)这一句上出现空指针异常,我搞了一晚上了,都不知道哪的事。我在main函数里创建了Clerk的对象,然后通过Productor的构造方法传给了run()方法里,怎么会空指针呢,我基本上是按书上来的,求各位看看到底哪有问题。。。手机看着不方便下面有截屏:
...全文
148 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
类没有方法就会出现这样的异常
小白云天 2016-04-14
  • 打赏
  • 举报
回复
引用 8 楼 傻李的回复:
package http.hello;

class Clerk {
	public int index = 0;
}

class Productor extends Thread {
	private Clerk cl;

	public Productor(Clerk c1) {
		this.cl = c1;
	}

	@Override
	public void run() {
		System.out.println(cl.index);
	}
}

public class Demo {

	public static void main(String[] args) {
		Clerk cl = new Clerk();

		Thread th1 = new Productor(cl);//这里默认调用无参构造函数,所以cl没有被初始化,是null
		th1.start();
	}
}
看错了,你你是cl和c1稿混了
嗯,不过还是要谢谢你
MoshangYanYu 2016-04-14
  • 打赏
  • 举报
回复
引用 3 楼 qq_34404081 的回复:
[quote=引用 1 楼 贫僧博企的回复:]

public class Productor extends Thread {
private Clerk cl;
public Productor(Clerk c1){
this.cl=cl;
}
应该是this.cl=c1;一般来讲l与1不要放一块用,很容易混了。
天啊,我找了一晚上错误都没看出来,原来是这么回事,真是太感谢了,感谢感谢感谢[/quote] 由此可见变量起个好名字的重要性!
「已注销」 2016-04-14
  • 打赏
  • 举报
回复
package http.hello;

class Clerk {
	public int index = 0;
}

class Productor extends Thread {
	private Clerk cl;

	public Productor(Clerk c1) {
		this.cl = c1;
	}

	@Override
	public void run() {
		System.out.println(cl.index);
	}
}

public class Demo {

	public static void main(String[] args) {
		Clerk cl = new Clerk();

		Thread th1 = new Productor(cl);//这里默认调用无参构造函数,所以cl没有被初始化,是null
		th1.start();
	}
}
看错了,你你是cl和c1稿混了
「已注销」 2016-04-14
  • 打赏
  • 举报
回复
package http.hello;

class Clerk {
	public int index = 0;
}

class Productor extends Thread {
	private Clerk cl;

	public Productor(Clerk c1) {
		this.cl = cl;
	}

	@Override
	public void run() {
		System.out.println(cl.index);
	}
}

public class Demo {

	public static void main(String[] args) {
		Clerk cl = new Clerk();

		Thread th1 = new Productor(cl);//这里默认调用无参构造函数,所以cl没有被初始化,是null
		th1.start();
	}
}
  • 打赏
  • 举报
回复
引用 1 楼 u014444402 的回复:

public class Productor extends Thread {
private Clerk cl;
public Productor(Clerk c1){
this.cl=cl;
}
应该是this.cl=c1;一般来讲l与1不要放一块用,很容易混了。
这都能看出来,厉害
小白云天 2016-04-13
  • 打赏
  • 举报
回复
引用 2 楼 PJ_Richard的回复:
你在一个.java文件中写了三个public 类?
没有,只是这样方便观察
小白云天 2016-04-13
  • 打赏
  • 举报
回复
引用 1 楼 贫僧博企的回复:

public class Productor extends Thread {
private Clerk cl;
public Productor(Clerk c1){
this.cl=cl;
}
应该是this.cl=c1;一般来讲l与1不要放一块用,很容易混了。
天啊,我找了一晚上错误都没看出来,原来是这么回事,真是太感谢了,感谢感谢感谢
PJ_Richard 2016-04-13
  • 打赏
  • 举报
回复
你在一个.java文件中写了三个public 类?
灌水号 2016-04-13
  • 打赏
  • 举报
回复

public class Productor extends Thread {
private Clerk cl;
public Productor(Clerk c1){
this.cl=cl;
}
应该是this.cl=c1;一般来讲l与1不要放一块用,很容易混了。

62,628

社区成员

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

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