面向对象—18—包

本文详细解析了Java包的概念、包之间的访问规则,包括类名拼写错误、导入包路径错误、类和方法访问权限不足等问题,并提供了解决方案。同时,阐述了如何正确设置JVM类路径,以便于找到特定包内的类。

 

 

package pack;

class PackageDemo
{
 public static void main(String[] args)
 {
  DemoA d = new DemoA();
  d.show();
 }
}

--------------------------------------------------------------------------------------------------------------

package pack;

class PackageDemo
{
 public static void main(String[] args)
 {
  packa.DemoA d = new packa.DemoA();
  d.show();
 }
}

 

package packa;

public class DemoA
{
 public void show()
 {
  System.out.println("demo show run"); 
 }
}

 

 

/*
PackageDemo.java:7: 错误: 找不到符号
                DemoA d = new DemoA();
                ^
  符号:   类 DemoA
  位置: 类 PackageDemo
PackageDemo.java:7: 错误: 找不到符号
                DemoA d = new DemoA();
                              ^
  符号:   类 DemoA
  位置: 类 PackageDemo
2 个错误

错误原因:类名写错
因为类名的全名是:包名.类名
---------------------------------------------------

PackageDemo.java:7: 错误: 程序包packa不存在
                packa.DemoA d = new packa.DemoA();
                     ^
PackageDemo.java:7: 错误: 程序包packa不存在
                packa.DemoA d = new packa.DemoA();
                                         ^
2 个错误

错误原因:pack包不在当前目录下
需要设置classpath,告诉jvm去哪里找指定的pack包。
--------------------------------------------------

PackageDemo.java:7: 错误: DemoA在packa中不是公共的;
无法从外部程序包中对其进行访问
                packa.DemoA d = new packa.DemoA();
                     ^
PackageDemo.java:7: 错误: DemoA在packa中不是公共的;
无法从外部程序包中对其进行访问
                packa.DemoA d = new packa.DemoA();
                                         ^
2 个错误

错误原因:有了包,范围变大,一个包中的类要被访问,必须
要用足够大的权限。
所以被方法的类要被public修饰

----------------------------------------------------

PackageDemo.java:8: 错误: show()在DemoA中不是公共的; 无法从外部程序包中对其进行
访问
                d.show();
                 ^
1 个错误

错误原因:类共有后,被访问的成员也要被共有才能被访问

*/

---------------------------------------------------------------------------------------------------------------------

个人总结:了解包与包访问格式,生成包的方式,jar包的生成,掌握访问权限的关键字

在 Java 中,相对路径是指相对于当前工作目录或项目资源位置的路径,而不是完整的文件系统路径。相对路径的正确书写格式和使用规范对于文件操作、资源加载等场景非常重要。 ### Java 中相对路径的写法 相对路径通常不以盘符(如 `C:\`)或根目录(如 `/`)开头,而是以当前工作目录或类路径(classpath)为基础。常见的写法括: - `data.txt`:表示当前目录下的 `data.txt` 文件。 - `folder/data.txt` 或 `folder\data.txt`:表示当前目录下 `folder` 子目录中的 `data.txt` 文件。 - `../data.txt`:表示上一级目录中的 `data.txt` 文件。 - `../../data.txt`:表示上两级目录中的文件。 Java 中使用相对路径时,其解析方式取决于上下文。例如,`new File("data.txt")` 会相对于 JVM 启动时的当前工作目录来解析路径。 ### Java 中获取路径的方法 `java.io.File` 类提供了多个方法用于获取路径信息: - `getPath()`:返回构造 `File` 对象时使用的原始路径字符串。 - `getAbsolutePath()`:返回文件的绝对路径字符串。 - `getCanonicalPath()`:返回文件的规范路径字符串,消除了路径中的冗余部分(如 `.` 和 `..`)[^1]。 示例代码如下: ```java File file = new File("data.txt"); System.out.println("Path: " + file.getPath()); System.out.println("Absolute Path: " + file.getAbsolutePath()); System.out.println("Canonical Path: " + file.getCanonicalPath()); ``` ### 文件输入流中使用相对路径 在使用 `FileInputStream` 读取文件时,相对路径的解析方式同样依赖于当前工作目录。例如: ```java FileInputStream fis = new FileInputStream("data.txt"); ``` 上述代码会尝试从当前工作目录中读取 `data.txt` 文件[^3]。 ### Web 项目中读取资源文件的相对路径 在 Web 项目中,通常使用类路径(classpath)来定位资源文件。可以通过以下方式获取资源: - 使用 `ClassLoader.getResourceAsStream()` 加载资源: ```java InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties"); ``` - 使用 `Class.getResourceAsStream()` 加载资源: ```java InputStream is = getClass().getResourceAsStream("/com/example/config.properties"); ``` 其中,以 `/` 开头的路径表示从类路径的根目录开始查找;不以 `/` 开头的路径则表示相对于当前类的路径[^4]。 ### 判断路径是相对路径还是绝对路径 可以通过字符串的前缀或路径中是否含盘符来判断路径类型: - 如果路径以 `/` 或 `C:\`(或其他盘符)开头,则通常为绝对路径。 - 如果路径以 `.` 或不以 `/` 或盘符开头,则通常为相对路径[^2]。 ### 示例判断路径类型的方法 ```java public boolean isAbsolutePath(String path) { return path.startsWith("/") || path.contains(":"); } ``` ### 总结 Java 中相对路径的正确书写格式取决于上下文环境。在使用相对路径时,应明确当前工作目录或类路径的位置,并合理使用 `../` 来访问上层目录。对于复杂的项目结构,建议结合 `ClassLoader` 或 `Resource` 工具类来加载资源,以确保路径的可移植性和正确性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值