
本文讲解如何在 java 中从 main 包的 start 类安全访问 db 包中 db 类生成的字符串数组(如 title),涵盖实例化、方法改造、返回值获取及使用注意事项。
本文讲解如何在 java 中从 main 包的 start 类安全访问 db 包中 db 类生成的字符串数组(如 title),涵盖实例化、方法改造、返回值获取及使用注意事项。
在 Java 中,不同包之间的数据访问必须遵循面向对象的基本原则:封装性与显式暴露。你当前的 db_access() 方法内部声明了局部数组(如 String[] title),但这些变量作用域仅限于该方法内,无法被其他类直接访问。要实现跨包使用 title 数组,需进行以下关键改造:
✅ 步骤一:修改 db 类方法,使其返回所需数组
将原 void 方法改为返回 String[],并在方法末尾 return title;:
package db;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.lang.ClassNotFoundException;
public class db {
public String[] db_access() throws ClassNotFoundException, SQLException {
int[] id = new int[15];
String[] title = new String[16];
String[] genre = new String[16];
BigDecimal[] price = new BigDecimal[16];
// 示例:为 title 赋初值(实际中通常从数据库填充)
for (int i = 0; i <blockquote><p>⚠️ 注意:不要在方法内仅声明数组而不初始化或赋值——否则返回的将是 null 或全 null 元素,导致 NullPointerException。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20dbae7c507.jpg" alt="Java注释规范Skills" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills" class="overflowclass">Java注释规范Skills</a>
<p class="overflowclass">当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。</p>
</div>
<a rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div></blockquote><h3>✅ 步骤二:在 main.start 类中正确调用并使用</h3><p>确保已导入 db 包,并通过实例调用方法获取数组:</p><pre class="brush:php;toolbar:false;">package main;
import db.db; // 正确导入
public class start {
public start() {
initComponents();
db_connect();
}
private void db_connect() {
try {
db db_v = new db(); // 创建 db 类实例
String[] title = db_v.db_access(); // 获取返回的 title 数组
// 安全打印第二个元素(索引为 1),避免越界
if (title != null && title.length > 1 && title[1] != null) {
System.out.println("Second title: " + title[1]);
} else {
System.out.println("Title array is empty or second element is null.");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
private void initComponents() {
// UI 初始化逻辑(略)
}
}? 补充说明与最佳实践
- 不要使用静态方法替代实例化(除非明确设计为工具类):static 可能破坏封装性且不利于测试和依赖管理;
- 数组长度需校验:调用方务必检查 title != null && title.length > N,防止运行时异常;
-
考虑更优的数据结构:若需返回多维关联数据(如 ID、标题、类型、价格),建议封装为 Book 实体类并返回 List
,而非多个平行数组; - 数据库资源管理:真实场景中,db_access() 应包含连接获取、查询执行、结果集遍历与资源关闭(推荐使用 try-with-resources)。
通过以上改造,你就能在 main.start 中可靠、清晰地访问并使用来自 db 包的数组数据。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










