【问题标题】:Am confused about static classes and instantiation [duplicate]对静态类和实例化感到困惑[重复]
【发布时间】:2015-04-17 21:01:56
【问题描述】:

也许有些人以前发布过类似的内容,但很多问题有点复杂且难以理解,我想在不阅读 3 页无关代码的情况下了解我的问题的本质。我的问题是这样的:

当我尝试实例化我的类时,它告诉我它必须是静态的。我对此感到非常困惑。

package project0;

import javax.swing.*;
import java.util.*;
import java.awt.Button;


public class Project0 {

public static void main(String[] args) {

Test7 lucky7 = new Test7(); //here is where I am instantiating my class and it gives "nonstatic variable this cannot be referenced from a static context." 
}

class Test7{

    Test7(){
        String str1 = "Hello";
        changeString(str1);
        System.out.println(str1);
    }

    public void changeString(String str2){
        str2 = "Goodbye";
        }

}

如果我将 test7 类更改为静态,它可以工作,但我觉得这与应该发生的情况相反,因为我认为静态类无法实例化。

编辑:我想我将静态误认为抽象 >.> 但在这种情况下,静态类与常规类有什么不同。还是有点糊涂。

请尽量让答案简单,以便我能理解

【问题讨论】:

  • 我认为静态类无法实例化你为什么这么认为?
  • 你在这里混了很多。首先,一次性发布您实际编译的代码。这可能与静态类无关,而与您在某处使用 this 关键字有很大关系。
  • 你认为问题是什么,@Makoto?
  • 如果您要投票重新打开已关闭重复的问题,请先发表评论。我是来复习的。我不只是开车经过。
  • 有很多我们没有被告知。充其量,Test7 是一个内部类,而不是静态类,如果它是在另一个类中声明的。应该如何实例化该类可能会造成混淆。

标签: java static instantiation


【解决方案1】:

静态类绝对可以实例化。

您的主要方法以及您的Test7 类都在某个类中。当Test7 不是静态类时,Test7 的每个实例都必须有一个封闭实例,即包含Test7 的类的实例。这就是为什么在这种情况下从您的 main 方法调用 Test7 lucky7 = new Test7() 不起作用的原因。

另一方面,静态类没有封闭实例,这就是为什么当您将Test7 更改为静态时Test7 lucky7 = new Test7() 可以工作。

【讨论】:

  • 我不会说你错了,但我真的认为这不是问题所在。
  • @Makoto 您认为这里的问题是什么?
猜你喜欢
  • 2018-03-18
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2018-08-15
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多