JavaSE-案例-记录上次登录时间

1.1.1 equals() & hashCode()

  • 问题1: "=="和equals方法究竟有什么区别?

     ==比较的是值
    	== 如果比较的是基本数据类型,比较的则是变量值
    	== 如果比较的为引用数据类型,比较的则是地址值
     equals比较的是引用数据类型
    	如果没有重写hashCode和equals方法,比较的是地址值。因为Object的equals方法中使用是==。
    	如果重写hashCode和equals方法,则比较的重写后的规则。
    	例如:两个String字符串比较时:比较的是内容。因为String底层重写了equals方法进行内容的比较。
    
    
  • 思考2:重写了equals()方法时,为什么要重新hashCode()的方法?

    作用:hashCode()方法和equals()方法的作用一样,对比两个对象是否相等
    区别:
    	equals() 比较对象很多内容,比较全面,耗时较多,效率就比较低。绝对可靠。
    	equals()相等的两个对象,hashCode()肯定相等。(hashcode不同,equals肯定不同)
    	hashCode() 只比较一个hash值,效率就比较高。不可靠。
    	hashCode()相等的两个对象他们的equal()不一定相等
    比较原则:
    	首先,比较hashCode(),如果不相同,两个对象肯定不相同。
    	如果hashCode()相同,再比较equals
    目的:既能大大提高了效率也保证了对比的绝对正确性
    
    

1.1.2 上次登录时间

1)需求
  • 编程题:记录用户上次登录时间,在登录成功后打印。

    请输入账号:jack
    请输入密码:1234
    登录成功!!!
    上次登录时间为:2023/09/18 22:29:59:456
    
    请您操作:
    1.登录
    2.退出
    
2)分析
  • 方案1:记录登录时间
  • JavaSE-案例-记录上次登录时间_第1张图片
    方案2:记录最后登录的时间
    JavaSE-案例-记录上次登录时间_第2张图片
3)基本结构
package com.czxy.test01;

import java.util.Scanner;


public class TestUser {
    public static void main(String[] args) {
        //准备数据
        Scanner scanner = new Scanner(System.in);

        //一直执行
        while(true) {
            System.out.println("欢迎来到xxx用户管理系统");
            System.out.println("操作如下:");
            System.out.println("1.登录");
            System.out.println("2.退出登录");
            System.out.println("3.退出系统");
            System.out.print("请输入您的选项:");
            String command = scanner.nextLine();
            switch(command) {
                case "1":
                    //登录
                    break;
                case "2":
                    //退出登录
                    break;
                case "3":
                    System.exit(0);;
                    break;
                default:
                    System.out.println("命令无效!!!");
            }
        }
    }
}

4)核心业务
  • 完善基本结构

    package com.czxy.test01;
    
    import java.util.Scanner;
    
    
    public class TestUser {
        public static void main(String[] args) {
            //准备数据
            Scanner scanner = new Scanner(System.in);
            UserManager userManager = new UserManager();
    
            //一直执行
            while(true) {
                System.out.println("欢迎来到xxx用户管理系统");
                System.out.println("操作如下:");
                System.out.println("1.登录");
                System.out.println("2.退出登录");
                System.out.println("3.退出系统");
                System.out.print("请输入您的选项:");
                String command = scanner.nextLine();
                switch(command) {
                    case "1":
                        //登录
                        System.out.print("请输入用户名:");
                        String username = scanner.nextLine();
                        System.out.print("请输入密码:");
                        String password = scanner.nextLine();
    
                        userManager.login(username, password);
                        break;
                    case "2":
                        //退出登录
                        userManager.logout();
                        break;
                    case "3":
                        System.exit(0);;
                        break;
                    default:
                        System.out.println("命令无效!!!");
                }
            }
        }
    }
    
    
  • 核心

    package com.czxy.test01;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    
    public class UserManager {
        //账号&密码
        private String sysUsername = "jack";
        private String sysPassword = "1234";
        //最后的登录时间
        private String lastLoginTime = "";
        //格式化
        private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        //当前登录用户(登录状态)
        private String currentUser = "";
        /**
         * 用户登录
         * @param username
         * @param password
         */
        public void login(String username, String password) {
            // 如果已经登录,忽略
            if(!"".equals(currentUser)) {
                System.out.println("已登录,无需重复!!");
                return;
            }
            // 登录
            if(sysUsername.equals(username) && sysPassword.equals(password)) {
                //登录成功
                System.out.println("登录成功");
                //上次的登录
                if(!"".equals(lastLoginTime)) {
                    System.out.println("您上次登录时间为:" + lastLoginTime);
                }
                //记录登录用户
                currentUser = username;
            } else{
                //失败
                System.out.println("用户名或密码不匹配");
            }
        }
    
        /**
         * 退出登录
         */
        public void logout() {
            //登录状态
            if(!"".equals(currentUser)) {
                //清空当前用户
                currentUser = "";
                //记录登出时间
                lastLoginTime = dateFormat.format(new Date());
                System.out.println("您已退出登录!");
            } else {
                System.out.println("您还没有登录");
            }
        }
    }
    
    

你可能感兴趣的:(java,jvm,开发语言)