如何保存变量i的值,使Java生成客户ID的方法下次调用延续上次数值
问题根因
你当前将计数变量i定义为main方法内的局部变量,每次方法执行都会重新初始化为10;且局部变量存储在栈内存中,程序运行结束后内存直接释放,自然无法保留上次运行的数值。
解决方案
分两种场景实现:
场景1:同一次程序运行内多次调用生成ID
将i设置为类的静态成员变量,即可在多次方法调用间保留值,同时可以优化补零逻辑,避免多层嵌套判断:
public class TestId { // 静态成员变量,全局唯一,类加载时初始化一次 private static int i = 10; private static final String PREFIX = "CUST"; public static String generateCustId() { // 用String.format直接补零到5位,无需多层if判断 String id = String.format("%s%05d", PREFIX, i); i++; return id; } public static void main(String[] args) { // 多次调用测试 System.out.println(generateCustId()); // 输出CUST00010 System.out.println(generateCustId()); // 输出CUST00011 System.out.println(generateCustId()); // 输出CUST00012 } }
场景2:程序重启后仍保留上次的计数值
需要将计数值持久化存储到磁盘,最简单的方案是存储到本地文本文件,每次生成ID时先读取文件中的当前值,生成完成后再把新值写回文件:
import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; public class TestId { private static final String PREFIX = "CUST"; // 存储计数的本地文件路径 private static final String COUNT_FILE_PATH = "cust_id_count.txt"; public static String generateCustId() throws Exception { int currentCount; // 读取文件中的计数,文件不存在则默认从10开始 if (Files.exists(Paths.get(COUNT_FILE_PATH))) { String content = Files.readString(Paths.get(COUNT_FILE_PATH)).trim(); currentCount = Integer.parseInt(content); } else { currentCount = 10; } // 生成ID String id = String.format("%s%05d", PREFIX, currentCount); // 新的计数写回文件 Files.writeString(Paths.get(COUNT_FILE_PATH), String.valueOf(currentCount + 1), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); return id; } public static void main(String[] args) throws Exception { System.out.println(generateCustId()); // 每次运行程序都会在上次的基础上递增,不会重置为10 } }
内容的提问来源于stack exchange,提问作者naman kapoor
相关产品推荐
相关产品推荐

