无法在 main() 方法中实例化字段(实例变量)。为啥??爪哇

Posted

技术标签:

【中文标题】无法在 main() 方法中实例化字段(实例变量)。为啥??爪哇【英文标题】:Can't Instantiate Field (instance variable) in main() method. Why?? Java无法在 main() 方法中实例化字段(实例变量)。为什么??爪哇 【发布时间】:2013-06-15 09:32:27 【问题描述】:

谁能告诉我我在这里做错了什么?当我在 Eclipse 中有这段代码时,当我尝试在 main 方法中将 sheetName 设置为 "hi" 时,它告诉我不能“对非静态字段进行静态引用”。我在这里做错了什么?我知道它一定很简单,但是我到处搜索却无法弄清楚!

public class AutoExpire 

private String sheetName;
private FileInputStream inputStream;

/**
 * Instantiates the class.
 */
public AutoExpire() 
    // do nothing


/**
 * The main method from which the program is ran.
 * 
 * @param args
 *            No arguments.
 * @throws IOException
 *             If program fails to run.
 */
public static void main(String[] args) throws IOException 

    sheetName = "hi";

【问题讨论】:

static 表示它是类的一部分,而不是类实例(对象本身)的一部分。然而,诸如 sheetName 之类的非静态字段是该类实例的一部分。通常,您将使用具有字符串参数的构造函数创建类,并从构造函数分配字段。如果该类可以在没有sheetName 的情况下生存,您还可以创建一个 setter。但是无论你做什么,你都应该在创建类实例期间或之后设置该字段。 【参考方案1】:

main 方法是静态的,因此main 方法中没有AutoExpire 的实例。创建一个实例,然后设置实例的字段。

public static void main(String[] args) throws IOException 
    AutoExpire ae = new AutoExpire();
    ae.sheetName = "hi";

【讨论】:

非常感谢您的及时回复!你能看看下面的评论并可能在这个(你的)评论线程上回答吗?再次感谢!

以上是关于无法在 main() 方法中实例化字段(实例变量)。为啥??爪哇的主要内容,如果未能解决你的问题,请参考以下文章

main 静态方法 非静态方法

类的用法

课堂验证作业

课程作业第二题

为啥包含 main 方法的类没有实例化并且在 Java 中仍然可以?

对象实例化过程