java - 用户定义的包和系统定义的java包在访问静态内容方面有什么区别

标签 java compiler-errors static scjp

Q) With respect to accessing static content, what is the difference between user defined package and java system package (say java.lang etc)

我正在准备ocjp6。使用1.6.26 java版本

我的java程序在PackageTest.java中有一个名为“pack”的包

package pack;
public class PackageTest {
    public static final int i=20;
  }
}

javac -d . PackageTest.java 

在 pack 文件夹中创建 PackageTest.class 文件

现在从另一个java访问PackageTest类的静态内容

程序(TestStaticContents.java)如下

import pack.PackageTest.*; 
// here importing all contents of PackageTest class
class TestStaticContents {
public static void main(String[] args){
System.out.println("normal import, accessing i value with class name: "+PackageTest.i);
    }
}

javac TestStaticContent.java  

显示编译错误:

TestStaticContents.java: cannot access PackageTest bad class file: .\PackageTest.java   

如果我尝试从我的 java 程序访问 Math 类的静态内容 它没有显示任何编译错误,即

import java.lang.Math.*; 
// here importing all contents of Math class
class TestMathStaticContents {
public static void main(String[] args){
System.out.println("normal import, accessing pi value with class name : "+ Math.PI);
    }
}

javac TestMathStaticContents.java 

没有编译错误,并且 PI 值按预期打印。

为什么此行为与用户定义的包不同?

最佳答案

我相信我现在明白你的问题了。您已将 PackageTest.javaTestStaticComponents.java 放置在同一个包 pack 中。共享同一个包的两个类不能显式地相互导入。

您已经通过向 TestStaticComponents.java 提供包私有(private)类标识符来暗示了这一点。

如果两个类驻留在不同的包中,您的导入语句将完美运行。

关于java - 用户定义的包和系统定义的java包在访问静态内容方面有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43336138/

相关文章:

java - 将平面 map 映射到 Jackson 中的嵌套 pojo

java - 无法在项目 myserver 上执行目标 org.apache.maven.plugins :maven-surefire-plugin:2. 12.4:test (default-test)

java - 如何在不左移其余元素的情况下从 ArrayList 中删除元素

java - 在哪里配置 m2e 生命周期映射源目录和输出目录?

ios - 由于缺少 BluetoothDevice.h 文件,无法编译 BeeTee 框架

C 编译器错误 "expected ... before ..."和无效类型参数

我定义的类的成员出现 C++ Vector 数据类型编译器错误问题

PHP 网站转换为静态 HTML 网站 - 链接问题

c - Linux 设备驱动程序中的静态函数

c# - 在 C# 中调用静态方法时会发生什么?