class Test{ private static int i = 1; public static void main(String[] args){ Test test = new Test(); System.out.println(test.i); //此处为何能访问到私有的i变量呢? } }
如果与Test类不同包,调用i变量却报错,为何?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
理論的には、アクセス修飾子は完全に必要というわけではなく、プログラム ロジックには影響しません。これは、プログラマーがより安全なコードを作成できるようにするために、コンパイル段階でのみ行われます。 質問者の混乱は理解していますが、彼はここで this.i を使用する方が適切だと考えています (もちろん、このビューは不十分な static キーワードを削除してください)。それは人によっては気が狂ってしまうかもしれません。 this.i较为妥当(当然,去掉那个蹩脚的static关键字吧),这个观点可能还真会使一些人走火入魔。记住:这些访问修饰符与执行上下文无关,比如private覚えておいてください: これらのアクセス修飾子は実行コンテキストとは何の関係もありません。たとえば、private は、この変数へのアクセスに使用するコードがコンパイル時に現在のクラスに記述されているかどうかのみをチェックします。それと同じくらい単純で粗雑です。
this.i
static
private
理論的には、アクセス修飾子は完全に必要というわけではなく、プログラム ロジックには影響しません。これは、プログラマーがより安全なコードを作成できるようにするために、コンパイル段階でのみ行われます。
質問者の混乱は理解していますが、彼はここで
this.i
を使用する方が適切だと考えています (もちろん、このビューは不十分なstatic
キーワードを削除してください)。それは人によっては気が狂ってしまうかもしれません。this.i
较为妥当(当然,去掉那个蹩脚的static
关键字吧),这个观点可能还真会使一些人走火入魔。记住:这些访问修饰符与执行上下文无关,比如
private
覚えておいてください: これらのアクセス修飾子は実行コンテキストとは何の関係もありません。たとえば、private
は、この変数へのアクセスに使用するコードがコンパイル時に現在のクラスに記述されているかどうかのみをチェックします。それと同じくらい単純で粗雑です。