You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:57:32