2013-07-04 49 views
1

我有具有下面的代码类:吸气二传手范围

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()方法时,全局标题变量不会改变吗?

对不起,我忘了提到这一点,我有低于该类调用在矿井以下方式方法:

EDIT 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类,履带和结果类的方法被调用。我仍然得到空。

+1

“'Document doc; title = doc.title();'”可以编译吗? 'doc'未初始化。 – johnchen902

回答

1

这是因为titlenull所以getTitle返回null。 您在另一个类中创建了Crawler的新对象,并且您现有的代码未设置title

如果你想有一个标题为自动设置,则需要保留这些代码在构造函数中

public Crawler() { 
    //some code to get your document 
    title=doc.title(); 
    setTitle(title); 
} 
+0

我编辑了我的问题,有一个类OA调用方法。 – user2500875

5

的事情是,在结果类的SOP是印刷空

是的,会的。你永远不会拨打crawler方法,这是唯一可以拨打setTitle的方法。也许你的意思是它是一个构造函数?如果是这样,你需要申报从:

public void crawler() { 

要这样:

public Crawler() { 
+0

我编辑了我的问题,有一个类OA调用方法。 – user2500875

+0

你能帮忙吗? – user2500875

+0

@ user2500875:我们没有足够的信息来确定发生了什么。你已经完全改变了这个问题。请提供一个简短的*完整*程序来证明问题。 –

1

第一变化public void crawler()public Crawler() 第二件事


public void crawler() { 
    Document doc; 
    title=doc.title(); 
    setTitle(title); 
    System.out.println("Title : " + title); 
} 

分配DOC一些价值否则你将得到NullPointerException

+0

我编辑了我的问题,有一个类OA调用方法。 – user2500875

+0

现在您不需要将方法转换为构造函数,但仍然为文档分配一些值,否则doc.title()会抛出异常 –

+0

输出仍然给我null。 – user2500875

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不同的对象,这是一个新的对象为其titlenull

public void output() { 
    Crawler cw=new Crawler(); // new object 
    System.out.println(cw.getTitle()); 
} 
+0

我编辑了我的问题,有一个类OA调用方法。 – user2500875

+0

我再次编辑,该行被误删除。当我尝试在getter方法中打印标题的值时,它仍然给我null。这是为什么?我认为如果我在setter中设置title的值,那么当我在getter中把它剔除时,它会打印出正确的值? – user2500875

+0

哦,是啊! TY,但即使我扩展它仍然null.Y是,如果我试图打印的“标题”的价值在getter方法本身即时变得空?但在setter方法中,它给了我正确的o/p – user2500875

0

在这里,如果你使用public void crawler() {作为构造则只需将其更改为public crawler(){ }

+0

我编辑了我的问题,有一个类OA调用方法。 – user2500875