一 、关键点

  1. 包声明规则
  • 每个类首行的package声明必须与文件路径完全匹配
  • com.example.math对应路径com/example/math
  • org.demo.greeting对应路径org/demo/greeting
  1. 编译参数
  • -d ./build:指定编译输出目录
  • 编译器会自动根据包声明创建对应目录结构
  1. 类路径(Classpath)
  • 运行时要指定class文件根目录(这里是build目录)
  • 使用-cp-classpath参数指定
  • 正确命令java -cp <类路径> <完全限定类名>
  • 错误命令:直接使用文件路径(如 java ./build/app/Main
  1. 访问控制
  • 确保类和方法都是public修饰
  • 不同包之间访问需要显式import

二、代码

1. 路径
项目结构:
src/
├── com/
│   └── company/
│       └── utils/
│           └── StringProcessor.java
├── org/
│   └── project/
│       └── service/
│           └── DataService.java
└── me/└── user/└── MainApp.java
2.代码

1 字符串处理工具类(src/com/company/utils/StringProcessor.java)

package com.company.utils;public class StringProcessor {// public方法:允许跨包访问public static String toUpperCase(String input) {return input.toUpperCase();}// protected方法:仅允许子类或同包访问protected static String reverseString(String str) {return new StringBuilder(str).reverse().toString();}// 默认权限方法(包级私有):仅允许同包访问static int countLetters(String text) {return text.replaceAll("[^a-zA-Z]", "").length();}
}
  1. 数据服务类(src/org/project/service/DataService.java)
package org.project.service;// 导入其他包的类
import com.company.utils.StringProcessor;public class DataService {// 跨包调用public方法public void processData(String data) {String upper = StringProcessor.toUpperCase(data);System.out.println("处理后的数据: " + upper);// 以下两行会编译报错,演示访问权限限制// String reversed = StringProcessor.reverseString(data); // protected方法不可访问// int count = StringProcessor.countLetters(data);        // 默认权限方法不可访问}// 同类中protected方法protected void specialProcess() {System.out.println("执行特殊处理");}
}
  1. 主程序类(src/me/user/MainApp.java)
package me.user;// 导入不同包的类
import com.company.utils.StringProcessor;
import org.project.service.DataService;public class MainApp {public static void main(String[] args) {// 跨包实例化类DataService service = new DataService();String input = "Hello World!";// 调用其他包的public方法service.processData(input);// 使用工具类的public方法String upper = StringProcessor.toUpperCase(input);System.out.println("直接调用工具类: " + upper);// 以下调用会编译报错,演示访问权限限制// service.specialProcess(); // protected方法不可访问}
}

4 编译和运行命令(在项目根目录执行)

# 编译命令
javac -d ./build \src/com/company/utils/StringProcessor.java \src/org/project/service/DataService.java \src/me/user/MainApp.java# 运行命令
java -cp ./build me.user.MainApp

5.结果对比

# 编译命令
javac -d ./build \src/com/company/utils/StringProcessor.java \src/org/project/service/DataService.java \src/me/user/MainApp.java# 运行命令
java -cp ./build me.user.MainApp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/81232.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/81232.shtml
英文地址,请注明出处:http://en.pswp.cn/web/81232.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的文件系统和软硬连接

磁盘的访问方式 CHS&#xff08;柱面&#xff0c;磁头&#xff0c;扇区&#xff09; 法&#xff08;磁盘硬件查找&#xff09;&#xff1a; 确定柱面&#xff08;C&#xff09; 磁头臂移动到对应的柱面位置。例如&#xff0c;柱面号为 5&#xff0c;则磁头移动到第 5 个磁道组…

whisper相关的开源项目 (asr)

基于 Whisper&#xff08;OpenAI 的开源语音识别模型&#xff09;的开源项目有很多&#xff0c;涵盖了不同应用场景和优化方向。以下是一些值得关注的项目&#xff1a; 1. 核心工具 & 增强版 Whisper OpenAI Whisper 由 OpenAI 开源的通用语音识别模型&#xff0c;支持多语…

深入解析Spring Boot与JUnit 5集成测试的最佳实践

深入解析Spring Boot与JUnit 5集成测试的最佳实践 引言 在现代软件开发中&#xff0c;单元测试和集成测试是确保代码质量的重要手段。Spring Boot作为当前最流行的Java Web框架之一&#xff0c;提供了丰富的测试支持。而JUnit 5作为最新的JUnit版本&#xff0c;引入了许多新特…

gitlab占用内存 优化

优化 GitLab 配置 GitLab 的配置文件可以对内存使用进行优化。 以下是一些优化配置的方法&#xff1a; 1.1 调整 Unicorn&#xff08;或 Puma&#xff09;配置 GitLab 使用 Unicorn&#xff08;旧版&#xff09;或 Puma&#xff08;新版本&#xff09;作为其 Web 服务器。可以…

视觉语言模型(Vision-Language Model, VLM)的简单介绍

目录 1. 起源与历史 2. 核心技术与原理 3. 优势 4. 应用领域 5. 技术难点与挑战 6. 学习方法与路径 7. 未来发展方向 8. 总结 1. 起源与历史 起源&#xff1a; 视觉语言模型&#xff08;VLM&#xff09;的起源可以追溯到多模态机器学习的研究。早期的计算机视觉&#…

关于PHP的详细介绍,结合其核心特点、应用场景及2025年的技术发展趋势,以清晰的结构呈现:

一、PHP的核心特点 动态脚本语言 语法灵活&#xff1a;支持过程式与面向对象编程&#xff0c;类似C/Java的语法结构&#xff0c;但动态类型特性更接近Python。即时编译&#xff1a;PHP 8.x的JIT&#xff08;Just-In-Time&#xff09;编译器显著提升性能&#xff0c;尤其在数学…

MCP、MCPHub、A2A、AG-UI概述

MCP Model Context Protocol&#xff0c;模型上下文协议&#xff0c;Anthropic于2024年开源的标准协议&#xff0c;旨在统一AI模型与数据源的交互方式&#xff0c;提升数据访问的便捷性和可靠性&#xff0c;提供标准化的工具调用、资源管理和提示词功能。 MCP的基本定义&…

[学习]浅谈C++异常处理(代码示例)

浅谈C异常处理 文章目录 浅谈C异常处理一、异常处理基础1.异常的概念与作用2.C异常处理机制&#xff08;try、catch、throw&#xff09;3.基本语法示例 二、标准异常类1.常见标准异常类&#xff1a;2.自定义异常类的实现 三、异常安全与最佳实践1. RAII&#xff08;资源获取即初…

PHP学习笔记(十)

extends 一个类可以在声明中用extends关键字继承另一个类的方法和属性。PHP不支持多重继承&#xff0c;一个类只能继承一个基类。 被继承的方法和属性可以通过同样的名字重新声明被覆盖&#xff0c;但是如果父类定义或者常量时是使用类final&#xff0c;则不可被覆盖&#xff…

rt-linux里的泛rtmutex锁的调用链整体分析

一、背景 linux系统里有非常多的锁种类&#xff0c;除了spinlock&#xff0c;mutex&#xff0c;rwlock&#xff0c;rwsem&#xff0c;还有rcu及顺序锁&#xff0c;这里面还有不少锁变种&#xff0c;比如spinlock的带bh或者irq字样的lock/unlock&#xff0c;还有nmi里可以用的顺…

LLM多平台统一调用系统-LiteLLM概述

概述 在当今快速发展的AI领域&#xff0c;大语言模型(LLM)已成为技术创新的核心驱动力。然而&#xff0c;随着市场上涌现出越来越多的LLM提供商&#xff08;如OpenAI、Anthropic、Google Gemini、AWS Bedrock等&#xff09;&#xff0c;开发者面临着一个日益复杂的问题&#x…

C#实现MCP Client 与 LLM 连接,抓取网页内容功能!

该专栏优先在飞书发布&#xff0c;欢迎收藏关注&#xff01; https://www.feishu.cn/community/article?id7507084665509904403 前面的课程&#xff0c;我们已经用C#实现了&#xff0c;自己的MCP Client。 下面我们一起来实现&#xff0c;MCP Client与LLM 对接。 一、添加依…

并发编程(6)

指令重排序 指令重排序是指在程序执行过程中&#xff0c;为了提高性能&#xff0c;编译器或处理器会对指令的执行顺序进行重新排列。 指令重排序导致可见性消失 在多线程环境下&#xff0c;每个线程都有自己的工作内存&#xff0c;线程对变量的操作是在工作内存中进行的&…

鸿蒙仓颉开发语言实战教程:页面跳转和传参

前两天分别实现了商城应用的首页和商品详情页面&#xff0c;今天要分享新的内容&#xff0c;就是这两个页面之间的相互跳转和传递参数。 首先我们需要两个页面。如果你的项目中还没有第二个页面&#xff0c;可以右键cangjie文件夹新建仓颉文件&#xff1a; 新建的文件里面没什…

Java 学习笔记:注解、泛型与 IO 流

目录 课程目标 Java 注解(Annotation) 1. 概念与作用 2. 自定义注解示例 3. JDK 内置注解 4.注释 Java 泛型(Generics) 1. 基本语法 2. 通配符与上下限 3. 常见应用场景 Java IO 流 1. 流的分类1.File文件类 2. 字节流与字符流 3. 经典示例:文件拷贝 总结与…

git仓库代码操作

1、从gitee下载代码提交到本地github仓库&#xff0c;保留提交记录 # 查看当前分支 git branch# 查看当前远程仓库 git remote -v# 确保所有更改已提交 git add . git commit -m "准备提交到GitLab"# 添加GitLab远程仓库 git remote add gitlab https://gitlab.com/…

Thinkphp6使用token+Validate验证防止表单重复提交

htm页面加 <input type"hidden" name"__token__" value"{:token()}" /> Validate 官方文档 ThinkPHP官方手册

Mcu_Bsdiff_Upgrade

系统架构 概述 MCU BSDiff 升级系统通过使用二进制差分技术&#xff0c;提供了一种在资源受限的微控制器上进行高效固件更新的机制。系统不传输和存储完整的固件映像&#xff0c;而是只处理固件版本之间的差异&#xff0c;从而显著缩小更新包并降低带宽要求。 该架构遵循一个…

Spring Boot微服务架构(四):微服务的划分原则

微服务划分原则&#xff08;CRM系统案例说明&#xff09; 一、微服务划分的核心原则 单一职责原则&#xff08;SRP&#xff09; 每个微服务只负责一个明确的业务功能服务边界清晰&#xff0c;避免功能混杂便于独立开发、测试和部署 业务领域驱动设计&#xff08;DDD&#xff0…

基于CNN卷积神经网络的带频偏QPSK调制信号检测识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…