【问题标题】:Private access modifier causes errors in one program but not in the other? [closed]私有访问修饰符会导致一个程序出错,但不会导致另一个程序出错? [关闭]
【发布时间】:2014-09-02 01:06:05
【问题描述】:

这是我的 a.java 文件,它可以编译:

class a{
    static int k=2;    
    private static void main(String arg[]){
        System.out.println(k);
    }
}

main 函数是从外部调用的(私有成员只能在本地访问)。

下面的代码给了我一个编译错误:

class A{  
    private int data=40;  
    private void msg(){System.out.println("Hello java");}  
}  

public class Simple{  
     public static void main(String args[]){  
         A obj=new A();  
         System.out.println(obj.data);//Compile Time Error  
         obj.msg();//Compile Time Error  
     }  
}  

如果访问修饰符是在编译时确定的,那么为什么 Code 1 dint 会给我一个编译时错误?

【问题讨论】:

  • 您的问题不清楚 - 您没有提供足够的代码,在第一个示例中 不起作用 让我们知道问题所在。您还没有指定第二种情况下的编译错误是什么。请阅读tinyurl.com/so-list
  • 你得到的编译错误是什么?
  • 亲爱的@virendra,第一个类编译是因为 jvm 从未调用私有成员,但在第二个类中,您正在调用私有成员。
  • 我不同意这个问题不清楚。我认为它应该重新打开。

标签: java access-modifiers


【解决方案1】:

第一个 sn-p 将编译,因为没有尝试调用私有方法。尽管使main 方法private 不会阻止您的代码被编译,但它不会运行,因为private main method cannot be used as an entry point to your program

第二个 sn-p 显式尝试访问另一个类的 private 成员,触发编译时错误。

【讨论】:

    【解决方案2】:

    这是因为您已在 A 类中将变量 data 和方法 msg 声明为私有。只能在 A 类中访问它们。您无法在 Simple 类中访问它们。
    要访问class A 的变量data 和方法msg,您需要将其声明为publicdefault
    还有第一类a 编译,因为您没有访问任何私有变量或任何类的方法。

    【讨论】:

      【解决方案3】:

      示例1中的代码是正确的,因为该代码中没有从外部调用该方法。在示例 2 中,您实际上是从外部调用私有方法 msg,这是不允许的。访问data 也是一样的,也是私有的。

      我想知道示例 1 是否会运行,但我对此表示怀疑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-26
        • 2021-12-23
        • 2021-01-15
        • 2020-07-12
        • 1970-01-01
        相关资源
        最近更新 更多