java中的getter setter范围

时间:2013-07-04 08:47:21

标签: java eclipse inheritance getter-setter

我有一个类,其中包含以下代码:

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类的方法。我仍然无效。

5 个答案:

答案 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的其他对象,它是titlenull的新对象:

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

答案 2 :(得分:1)

这是因为titlenull所以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(){ }