我遇到的问题是,当我尝试调用新from
实例的实例变量Letter
时,我相信我已经在构造函数中正确设置了所有内容{1}}我似乎不断收到错误,说编译器无法找到变量fromto
。目标是让fromto
显示在文本中。
Dylan
答案 0 :(得分:6)
首先,您应该了解有关Java中变量范围的更多信息。 (阅读Sun's tutorials about Object-oriented Java-programming可能是一个好主意)
这里的问题是变量fromto
在构造函数中声明,因此仅在构造函数的范围内可用。相反,摆脱那个构造函数(除非你真的想保留它,在这种情况下你应该确保正确地初始化你的from
和to
变量)并将变量移动到你的{{1}功能。
main
答案 1 :(得分: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);
}
}
关于no-args构造函数,如果实例变量from
和to
是可选的,则声明一个是一个好习惯,这样您也可以使用语法{{1}来实例化字母}。如果未声明任何构造函数,则编译器默认提供空构造函数。
实际上,只要有可能,遵循JavaBeans约定是一件好事。引用Wikipedia:
- 该类必须具有公共默认构造函数(无参数)。这个 允许在编辑和激活框架中轻松实例化。
- 必须使用get,set,is(可用于)来访问类属性 布尔属性而不是get)和其他方法(所谓的 访问方法和mutator方法),遵循标准命名 惯例。这样可以轻松自动检查和更新bean 框架内的状态,其中许多包括自定义编辑器 各种类型的属性。塞特斯必须只收到一个论点。
- 该类应该是可序列化的。它允许应用程序和 用于在a中可靠地保存,存储和恢复bean状态的框架 时尚独立于VM和平台。
答案 2 :(得分:3)
您需要首先创建Letter类的新实例,然后才能在该实例/对象上调用字段和getter / setter-methods。
public static void main(String[] args)
{
Letter myLetter = new Letter();
System.out.println(myLetter.from);
}
请注意,您的私有字段上的调用仅在成功时才会在同一个类中定义,因此创建的myLetter
可以访问该字段。
在实践中,您将定义公共setter和getter来访问私有字段。
答案 3 :(得分: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);
}