Java 私有访问修饰符在一个程序中导致错误,但在另一个程序中不导致错误?
这是我的a.java文件,它编译:Java 私有访问修饰符在一个程序中导致错误,但在另一个程序中不导致错误?,java,access-modifiers,Java,Access Modifiers,这是我的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.
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
}
}
如果访问修饰符是在编译时确定的,那么为什么代码1不能给我一个编译时错误?示例1中的代码是正确的,因为此代码中的方法不是从外部调用的。在示例2中,您实际上是从外部调用私有方法
msg
,这是不允许的。访问数据
也是一样的,它也是私有的
我想知道示例1是否会运行,但我对此表示怀疑。将编译第一个代码段,因为没有尝试调用私有方法。虽然使
main
方法private
不会阻止编译代码,但它不会运行,因为
第二个代码段显式尝试访问另一个类的
private
成员,触发编译时错误。这是因为您在类a
中将变量数据和方法msg
声明为私有。这些只能在类a
中访问。您无法访问类简单
要访问A类
的变量数据
和方法msg
,您需要将其声明为公共
或默认
另外,第一类a
编译是因为您没有访问任何类的任何私有变量或方法。您的问题不清楚-您没有提供足够的代码,在第一个示例中,这些代码不起作用,我们无法了解问题所在。您还没有指定第二种情况下的编译错误是什么。请阅读您得到的编译错误是什么?亲爱的@virendra,编译的第一个类是因为jvm从未调用私有成员,但在第二个类中,您调用的是私有成员。我不同意这个问题不清楚。我认为应该重新开放。