java 构造函数和字符串第2部分字母示例

xkftehaa  于 2023-04-10  发布在  Java
关注(0)|答案(4)|浏览(144)

我遇到的问题是,虽然我相信我已经在构造函数中正确地设置了所有内容,但当我尝试调用新的Letter示例fromto的示例变量from时,我似乎一直收到一个错误消息,说编译器找不到变量fromto

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);

    }

}
omhiaaxx

omhiaaxx1#

首先,您可能应该学习更多关于Java中变量作用域的知识(阅读Sun's tutorials about Object-oriented Java-programming可能是个好主意)。
这里的问题是变量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);
    }

}
0s7z1bwu

0s7z1bwu2#

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

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

请注意,只有main在同一个类中定义时,对private字段的调用才会成功,因此创建的myLetter提供了对该字段的访问。
在实践中,您可以定义公共setter和getter来访问private字段。

wfypjpf4

wfypjpf43#

你需要在正确的作用域中示例化你的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 letter = new Letter("Dylan", "April");
       System.out.println("Dear " + letter.from);
    }

}

关于no-args构造函数,如果示例变量fromto是可选的,那么声明一个构造函数是一个很好的实践,这样你也可以用语法new Letter()示例化letter。如果你不声明任何构造函数,编译器默认提供一个空构造函数。
实际上,只要有可能,遵循JavaBeans约定是一件好事。引用Wikipedia

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

lsmd5eda4#

移除

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);

  }

相关问题