我有一个类,其中包含以下代码:
public class Crawler {
String title;
public void setTitle(String text) {
title=text;
//System.out.println(title);
}
public String getTitle() {
// System.out.println(title);
return title;
}
public void crawler() {
Document doc;
doc = connect("http://www.xyz.com//asd.html").timeout(0).get();
title=doc.title();
setTitle(title);
System.out.println("Title : " + title);
}
}
另一堂课:
public class Results {
public void output() {
Crawler cw=new Crawler();
System.out.println(cw.getTitle());
}
}
问题是,结果类中的SOP正在打印null
setTitle()
中评论的SOP正在打印所需的文字,但getTitle()
中的SOP仍在说null
。
这里有任何范围问题吗?我没有得到它。当我调用setTitle()
方法时,全局标题变量不会改变吗?
对不起,我忘了提到这个,下面有一个课程,以下面的方式调用方法:
编辑1:
public class OA {
public static void main(String[] args)
{
Crawler cw=new Crawler();
//LoadIntoDB ld= new LoadIntoDB();
Results op=new Results();
cw.crawler();
//ld.load();
op.output();
}
}
当我运行OA类时,将调用crawler和results类的方法。我仍然无效。
答案 0 :(得分:5)
问题是,结果类中的SOP是打印空
是的,它会的。你永远不会调用crawler
方法,这是唯一可以调用setTitle
的方法。也许你的意思是它是一个构造函数?如果是这样,您需要更改声明:
public void crawler() {
对此:
public Crawler() {
答案 1 :(得分:2)
您刚刚实例化了Crawler
类。它有一个实例变量String title;
。如果没有专门指定,实例引用变量将默认为null
。您需要致电setTitle()
设置title
,否则getTitle()
必须返回null
。
重要的是crawler()
不是Crawler
类的构造函数。 Java区分大小写。
问题编辑后:
在目前的实施中,cw.crawler()
应该抛出 NPE 。只需查看crawler()
的代码:
public void crawler() {
Document doc;
title=doc.title(); // null pointer here , doc was never instantiated
setTitle(title);
System.out.println("Title : " + title);
}
问题重新编辑后:
在public static void main()
方法中,您要创建Crawler
的实例并调用其crawler()
方法来设置其title
。
Crawler cw=new Crawler();
但是当您调用output()
方法时,您正在创建Crawler
的其他对象,它是title
为null
的新对象:
public void output() {
Crawler cw=new Crawler(); // new object
System.out.println(cw.getTitle());
}
答案 2 :(得分:1)
这是因为title
是null
所以getTitle
会返回null
。
您在另一个类中创建了Crawler
的新对象,而您现有的代码未设置title
。
如果您想自动设置标题,则需要将该代码保留在构造函数
中public Crawler() {
//some code to get your document
title=doc.title();
setTitle(title);
}
答案 3 :(得分:1)
第一次改变public void crawler()
到
public Crawler()
第二件事
public void crawler() {
Document doc;
title=doc.title();
setTitle(title);
System.out.println("Title : " + title);
}
为doc分配一些值,否则你会得到NullPointerException
答案 4 :(得分:0)
如果您使用public void crawler() {
作为构造函数,请将其更改为public crawler(){ }