2

我遇到的问题是,虽然我相信我已经在构造函数中正确设置了所有内容,但是当我尝试调用fromLetter实例的实例变量时,我fromto似乎不断收到错误消息,提示编译器找不到变量fromto。目标是Dylan与文本一起出现。

public class Letter {
    private String from; // Sets from instance variable to be stored
    private String to; /// Sets to instance vaariable to be stored


    public Letter(String from, String to) {
        this.from = from;
        this.to = to;

    }
    public Letter() {

        Letter fromto = new Letter("Dylan", "April");

    }

    public static void main(String[] args) {
        System.out.println("Dear " + fromto.from);

    }

}
4

4 回答 4

6

首先,您可能应该更多地了解 Java 中的变量作用域。(阅读Sun 关于面向对象的 Java 编程的教程可能是个好主意)

这里的问题是变量fromto是在构造函数中声明的,因此只能在构造函数的范围内使用。相反,摆脱那个构造函数(除非你真的想保留它,在这种情况下你应该确保正确初始化你的fromto变量)并将变量移动到你的main函数中。

public class Letter {
    private String from; // Sets from instance variable to be stored
    private String to; /// Sets to instance vaariable to be stored


    public Letter(String from, String to) {
        this.from = from;
        this.to = to;

    }
    public static void main(String[] args) {
        Letter fromto = new Letter("Dylan", "April");
        System.out.println("Dear " + fromto.from);
    }

}
于 2013-10-13T23:42:13.373 回答
3

您需要Letter在正确的范围内实例化您的。如果您只在 main 方法中需要它,那么创建实例的最佳位置是在方法块的开头:

public class Letter {

    private String from; // Sets from instance variable to be stored
    private String to; /// Sets to instance vaariable to be stored

    public Letter(String from, String to) {
        this.from = from;
        this.to = to;

    }

    public Letter() {
    }

    public static void main(String[] args) {
       Letter fromto = new Letter("Dylan", "April");
       System.out.println("Dear " + fromto.from);
    }

}

关于无参数构造函数,如果实例变量fromto是可选的,最好声明一个,这样您也可以使用语法实例化字母new Letter()。如果不声明任何构造函数,编译器默认提供一个空的构造函数。

实际上,只要有可能,遵循 JavaBeans 约定是一件好事。引用维基百科

  • 该类必须具有公共默认构造函数(无参数)。这允许在编辑和激活框架内轻松实例化。
  • 类属性必须可以使用 get、set、is(用于布尔属性而不是 get)和其他方法(所谓的访问器方法和 mutator 方法)访问,遵循标准命名约定。这允许在框架内轻松自动检查和更新 bean 状态,其中许多框架包括用于各种类型属性的自定义编辑器。Setter 必须只接收一个参数。
  • 该类应该是可序列化的。它允许应用程序和框架以独立于 VM 和平台的方式可靠地保存、存储和恢复 bean 的状态。
于 2013-10-13T23:42:34.813 回答
3

您需要先创建 Letter 类的新实例,然后才能在该实例/对象上调用字段和 getter/setter 方法。

public static void main(String[] args)
{
    Letter myLetter = new Letter();
    System.out.println(myLetter.from);
}

请注意,对您的私有字段的调用仅成功,因为 main 是在同一类中定义的,因此 createdmyLetter提供了对该字段的访问。

在实践中,您将定义公共 setter 和 getter 来访问私有字段。

于 2013-10-13T23:46:59.517 回答
0

消除

 public Letter(){

  Letter fromto= new Letter("Dylan", "April");

 }

然后:

public static void main(String[] args){
Letter fromto= new Letter("Dylan", "April");
  System.out.println("Dear " + fromto.from);

  } 
于 2013-10-13T23:42:12.923 回答