java - 不能从静态上下文中引用非静态变量名

标签 java

<分区>

class Singer
{
 String name;
 String album;

 public Singer(){
  name="Whitney Houson";
  album="Latest Releases";
 }

 public static void main(String[] args) 
 {
  System.out.println("Name of the singer is "+name);
  System.out.println("Album Information stored for "+album);

 }
}

当我运行这段代码时,我发现了一个错误,提示无法从静态上下文中引用非静态变量名

最佳答案

那是因为变量name和album在主程序中并不存在,因为它是静态的,这意味着它不能访问实例级成员。您将需要一个 Singer 类的实例,如下所示:

public static void main(String[] args) {
 Singer s = new Singer();
 System.out.println("Name of the singer is " + s.name);
 System.out.println("Album information stored for " + s.album);
}

但是,除非您使用公共(public)访问修饰符声明您的姓名/专辑成员,否则上述代码将无法编译。我建议为每个成员(getName()、getAlbum() 等)编写一个 getter,以便从封装中获益。像这样:

class Singer {
 private String name;
 private String album;

 public Singer() {
    this.name = "Whitney Houston";
    this.album = "Latest Releases";
 }

 public String getName() {
     return this.name;
 }

 public String getAlbum() {
     return this.album;
 }

 public static void main(String[] args) {
     Singer s = new Singer();
     System.out.println("Name of the singer is " + s.getName());
     System.out.println("Album information stored for " + s.getAlbum());

 }

}

另一种方法是将名称和相册声明为静态的,然后您可以按照最初的方式引用它们。

关于java - 不能从静态上下文中引用非静态变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226734/

相关文章:

java - Spring的QueryByExampleExecutor可以与Projections一起使用吗

java - 在打字游戏中,我应该为 JTextField 使用什么监听器?

java - 如何在 Lucene 3.0.2 中索引和搜索文本文件?

java - 将 AOP xml 配置转换为 Java

java - @XmlAnyElement 和 @XmlElementRefs

java - 如果 HBase 中存在则更新行的时间戳

java - Maven:如何处理包含模块的模块?

java - 从 Axis2 生成的 stub 获取端点 URL

java - TextArea高度与滚动条scrollTop属性的相关性

java - Android: "Auto refresh"一段时间后