Java主程序如何不使用static存储自定义库Store类的用户输入数据
结论
你的实现逻辑存在错误,无法在不添加static关键字的前提下完成用户输入存储的需求,具体问题和修正方式如下。
现存问题
- 包导入路径不匹配:你定义的
Store类位于library1包下,但主类Test中写的导入语句为import Library.*;,Java包名严格区分大小写且路径必须完全对应,编译时会直接抛出找不到类的错误。 - 实例成员访问方式错误:
Store类中定义的name、age没有加static修饰,属于实例成员,归属于Store类的具体实例对象,不能直接通过Store.name、Store.age这种类名调用的方式赋值。 - 构造方法设计与业务逻辑冲突:你为
Store定义了需要同时传入name和age两个参数的有参构造,但是交互逻辑是用户单次操作只输入姓名或者年龄其中一项,无法匹配现有构造方法的实例化要求。
修正后代码
类库Store类
package library1; public class Store { // 不添加static关键字,保持实例属性定义 public String name; public int age; // 新增无参构造方法,支持先创建空实例再逐个赋值属性 public Store() {} }
主应用Test类
package app; // 修正导入路径,匹配Store实际所在的包 import library1.*; import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("Enter 1 if you want to store name data \nEnter 2 if you want to store age data "); Scanner scan = new Scanner(System.in); int choice = scan.nextInt(); // 先创建Store类的实例对象,所有非static属性都依附于该实例存在 Store storeInstance = new Store(); switch(choice){ case 1: System.out.printf("Name: "); // 通过实例对象操作name属性,无需static修饰 storeInstance.name = scan.next(); break; case 2: System.out.printf("Age: "); // 通过实例对象操作age属性 storeInstance.age = scan.nextInt(); break; } // 验证存储结果 System.out.printf("Stored result: name = %s, age = %d%n", storeInstance.name, storeInstance.age); scan.close(); } }
核心概念说明
未加
static修饰的成员属于实例层级:可以把类理解为设计图纸,new 类名()创建出的实例才是实际承载数据的实体,直接通过类名操作非静态成员,本质是拿着图纸试图修改还没造出来的实物的属性,逻辑上不成立。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

