分析java代码

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String account = sc.next();
Card card = new Card(account);
card.generateCard();
System.out.println(card.getCardNumber());

}
}
class Card {
private String cardNumber;
private String linkedAccount;
private double balance;
private boolean active;
public Card(String linkedAccount) {
this.linkedAccount = linkedAccount;
this.balance = 0.0;
this.active = true;
}
public void generateCard() {
String prefix = "6228";
int code = linkedAccount.hashCode();
long num = Math.abs(code % 100000000);
String middle = String.format("%08d", num);
this.cardNumber = prefix + middle;
}
public String getCardNumber() {
return cardNumber;
}
}
代码整体分析

一、程序整体功能

接收控制台输入的账户字符串,基于账户的哈希值生成一张银行卡,卡号固定前缀6228+8位数字,最后打印生成的银行卡号;
封装了Card卡片类,存储卡号、关联账户、余额、激活状态。

卡号格式:6228XXXXXXXX(4+8,一共12位)

二、两大结构:Main主程序类 + Card实体类

  1. Main类:程序入口、负责输入与调用

  2. import java.util.Scanner;:导入输入工具类,实现键盘录入账号。

  3. main是程序执行入口:

• 创建Scanner对象,读取用户输入字符串作为关联账户号;

• 用输入的账号创建Card银行卡对象;

• 调用generateCard()自动生成银行卡号;

• 通过getCardNumber()获取卡号并控制台输出。

  1. Card类:银行卡实体,封装卡片属性和生成卡号逻辑

成员变量(私有封装)

• cardNumber:银行卡号(生成后赋值)

• linkedAccount:绑定的账户号(构造方法传入)

• balance:账户余额,构造默认初始化为0.0

• active:卡片激活状态,构造默认true(已激活)

构造方法 public Card(String linkedAccount)

创建卡片对象时传入绑定账号,自动初始化余额=0、卡片启用。

核心方法 generateCard():生成卡号规则

  1. 固定前缀:prefix = "6228";

  2. 对绑定账号linkedAccount调用hashCode()获取哈希整数;

  3. 取绝对值后对100000000取余,得到0~99999999范围数字;

  4. String.format("%08d",num):不足8位前面补0,凑齐8位;

  5. 拼接前缀+8位数字赋值给cardNumber。

getCardNumber():getter方法

私有成员不能直接访问,提供方法向外返回银行卡号。

三、运行流程

  1. 运行程序 → 控制台等待输入账户字符串;

  2. 输入账号回车 → 实例化Card;

  3. 执行generateCard按规则生成卡号;

  4. 输出最终拼接好的12位卡号。

四、代码优缺点&隐患

优点

  1. 面向对象封装:卡片属性私有化,符合Java封装思想;

  2. 职责分离:Main负责交互,Card负责卡片数据与卡号生成。

缺陷

  1. hashCode()不稳定:相同字符串hash固定,但不同字符串可能哈希碰撞,不同账号生成相同卡号;

  2. 无输入校验:空字符串、特殊字符都能作为账号;

  3. 余额、激活状态只定义未提供修改方法,无法存取款、冻结卡片;

  4. 卡号长度固定12位,不能自定义。

五、运行示例

输入:zhangsan123
程序计算哈希→取余补零→拼接6228,输出类似:622812345678。
今天我同学在教我分析java代码的时候,他让我多看看java语言基础,还有对象和类,我觉得他说的有道理于是我今天的博客全是关于代码分析的。分析完之后复现,再去把之前学的再去记一遍。

posted @ 2026-06-02 22:07  人青是个小卷毛  阅读(28)  评论(0)    收藏  举报