【问题标题】:Cant access instance varialble from main methods but can be done from other methods [duplicate]无法从主要方法访问实例变量,但可以从其他方法完成[重复]
【发布时间】:2017-04-07 00:50:10
【问题描述】:

//已编辑:我想我把问题表述错了。我熟悉“我们需要一个实例来访问非静态变量和方法”的概念。

但我的问题是

当我在 Eclipse 中键入 prgm 时,它在 B 行显示错误,但我希望在 A// 上也显示错误//

这是一个基本问题,请不要介意。

       package com.sigma.java;
        import java.util.*;

        public class Test1 {

        private int a=1;
        public void add(){
         System.out.println(a);-------->A
          }

        public static void main(String[] args) {
        Test1 t=new Test1();
        System.out.println(a);-------------->B
          }
        } 

编译器在尝试打印 a(标记为 B)时在 main 方法中显示错误 (错误 - 无法对非静态字段 a 进行静态引用) 问题-为什么我在 add() 方法中没有得到相同的错误(标记为 A)

【问题讨论】:

  • 因为add() 不是static 而main() 是。尝试打印t.a。
  • 你正在调用一个非静态变量,它是`private int a=1;from a static method which is main()`方法。只需制作private static int a=1;,您就会看到不同之处。
  • 请在提问之前搜索您的问题,因为这个问题之前已经被问过数千次了。如果您觉得我们真的需要更多,那么首先搜索并找到之前的规范问题/答案,在您的问题中展示此搜索的成果,并清楚地说明您认为您的问题不同的原因。
  • (1) 请格式化您的代码,使其看起来整洁,并且只包含真实代码(或者,如果您想编写伪代码,请确保您清楚地标记它)。 (2) “编辑”标记在这里通常不是必需的,而且通常只是膨胀一个问题——如果有人关心这个问题曾经问过什么,它在历史记录中是可见的,你可以通过单击“已编辑”的链接来查看[some time] ago”在您的问题下方,在您的个人资料图片和用户名旁边。 (3) 不,您显然不了解差异,因为差异导致了此错误。重新阅读链接问题的答案

标签: java static main


【解决方案1】:

变量 a 必须像下面这样声明为静态:

private static int a = 1 ;

您不能在静态 Java 方法中使用实例变量。

【讨论】:

  • 如果 OP 希望变量成为实例变量而不是像您所做的那样的共享变量,怎么样?本质上,OP 正在寻找 System.out.println(t.a);
  • 你不能在静态 Java 方法中使用实例变量。当然可以,你只需要一个实例。
  • 好的。你是对的。
【解决方案2】:

你的主要方法应该是:

因为a 是一个实例变量,您需要像在静态方法中一样使用实例t。

public static void main(String[] args) {
   Test1 t=new Test1();
   System.out.println(t.a);
}

在add方法中,它是可访问的,因为它是所有成员变量都可以访问目录的成员方法。因此,它是有效的,没有错误。

【讨论】:

    【解决方案3】:

    只有当您有权访问 Test1 类的实例时,您才能调用 add 方法。 Test1 类的每个实例都有一个变量 a 的副本。

    但是,您尝试从 main 方法直接/静态访问字符串 a 的值。这是有问题的,因为来自 main 方法的调用不是来自 Test1 的实例。要记住的关键点是实例变量 a 绑定了类 Test1 的每个实例

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2012-08-25
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2012-03-15
      • 1970-01-01
      • 2015-07-09
      相关资源
      最近更新 更多