我对静态类和实例化感到困惑

时间:2015-02-17 07:36:47

标签: java static instantiation

也许有些人之前发布过类似的内容,但很多问题都有些令人费解和难以理解,而且我想在不经过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类更改为static它可以工作,但我觉得这与应该发生的事情相反,因为我认为静态类无法实例化。

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

请尝试简单回答,以便我理解

1 个答案:

答案 0 :(得分:1)

静态类肯定可以实例化。

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

另一方面,静态类没有封闭实例,这就是Test7 lucky7 = new Test7()在您将Test7更改为静态时的原因。