java自学 --换车重启11


Object 类详解


finalize 方法

  • 当对象被回收时,系统自动调用该对象的 finalize 方法
  • 什么时候被回收:当某个对象没有任何引用时,则 jvm 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用 finalize 方法
  • 垃圾回收机制的调用,是由系统来决定(即有自己的 GC 算法), 也可以通过 System.gc() 主动触发垃圾回收机制

**老韩提示: 我们在实际开发中,几乎不会运用 finalize , 所以更多就是为了应付面试. **


debug

  • 断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误, 停下。进行分析从而找到这个Bug
  • 断点调试是程序员必须掌握的技能。
  • 断点调试也能帮助我们查看java底层源代码的执行过程, 提高程序员的Java水平。
//F7(跳入方法内) 
//F8(逐行执行代码) 
//shift+F8(跳出方法) 
//F9(resume,执行到下一个断点) 

​ 小技巧:将光标放在某个变量上,可以看到最新的数据

​ 小技巧: 断点可以在 debug 过程中,动态的下断点

​ 小技巧: 可以通过动态下断点,来判断程序是否会进入判断条件内,进不去就退到main方法


零钱通

  • 编程思想:代码尽量分开实现,一段代码实现一小个功能,增加可读性,后续新增选项也比较容易维护
  • 编程思想:选择条件时,尽量找出不正确的形式来做排除,break(过关斩将,排除掉所有不可以的)

过程编程版本

package smallchange;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class smallchangeSys {
    public static void main(String[] args) {
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        String choice = "";
        double money = 0;
        double balance = 0;
        String note = "";
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String detail = "-----------零钱通明细-----------";

        do{
            System.out.println("\n-----------零钱通菜单-----------");
            System.out.println("\t\t1  零钱通明细");
            System.out.println("\t\t2  收益入账");
            System.out.println("\t\t3  消费");
            System.out.println("\t\t4  退    出");

            System.out.println("请选择(1-4):");
            choice = scanner.next();
            switch(choice){
                case "1" :
                    System.out.println(detail);
                    break;
                case "2" :
                    System.out.print("收益入账金额:");
                    money  = scanner.nextDouble();
                    if(money <= 0){
                        System.out.println("收益入账金额需要大于0");
                        break;
                    }
                    balance += money;
                    date = new Date();
                    detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" +balance;

                    break;
                case "3" :
                    System.out.println("消费说明(花哪了):");
                    note = scanner.next();
                    System.out.println("消费金额(花多少):");
                    money = scanner.nextDouble();
                    if(money <= 0 || money > balance){
                        System.out.println("您的消费金额应在0-" + balance);
                        break;
                    }
                    balance -= money;
                    date = new Date();
                    detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" +balance;

                    break;
                case "4" :
                    boolean quit = true;
                    char cc = 'x';
                    do{
                        System.out.println("你确定要退出吗?y/n");
                        cc = scanner.next().charAt(0);
                        if(cc == 'y'){
                            loop =  false;
                            quit = false;
                        }else if(cc == 'n'){

                            quit = false;
                        }else{
                            System.out.println("输入有误,请重新输入4");
                        }


                    }while(quit);


                    break;
                default:
                    System.out.println("输入有误,请重新输入");
            }
        }while(loop);
        System.out.println("-----------退出零钱通-----------");
    }
}

OOP版本

package smallchange.oop;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class smallchangeSysOOP {
    boolean loop = true;
    Scanner scanner = new Scanner(System.in);
    String choice = "";
    double money = 0;
    double balance = 0;
    String note = "";
    Date date = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    String detail = "-----------零钱通明细-----------";

    public void mainMenu(){
        do{
            System.out.println("\n-----------零钱通菜单-----------");
            System.out.println("\t\t1  零钱通明细");
            System.out.println("\t\t2  收益入账");
            System.out.println("\t\t3  消费");
            System.out.println("\t\t4  退    出");

            System.out.println("请选择(1-4):");
            choice = scanner.next();
            switch(choice){
                case "1" :
                    this.detail();
                    break;
                case "2" :
                    this.income();
                    break;
                case "3" :
                    this.pay();
                    break;
                case "4" :
                    this.quit();
                    break;
                default:
                    System.out.println("输入有误,请重新输入");
            }
        }while(loop);
        System.out.println("-----------退出零钱通-----------");
    }

    public void detail(){
        System.out.println(detail);
    }
    public void income(){
        System.out.print("收益入账金额:");
        money  = scanner.nextDouble();
        if(money <= 0){
            System.out.println("收益入账金额需要大于0");
            return;
        }
        balance += money;
        date = new Date();
        detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" +balance;
    }
    public void pay(){
        System.out.println("消费说明(花哪了):");
        note = scanner.next();
        System.out.println("消费金额(花多少):");
        money = scanner.nextDouble();
        if(money <= 0 || money > balance){
            System.out.println("您的消费金额应在0-" + balance);
            return;
        }
        balance -= money;
        date = new Date();
        detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" +balance;
    }
    public void quit(){
        boolean quit = true;
        char cc = 'x';
        do{
            System.out.println("你确定要退出吗?y/n");
            cc = scanner.next().charAt(0);
            if(cc == 'y'){
                loop =  false;
                quit = false;
            }else if(cc == 'n'){

                quit = false;
            }else{
                System.out.println("输入有误,请重新输入");
            }
        }while(quit);
    }
}
package smallchange.oop;

public class smallchangeSysAPP {
    public static void main(String[] args) {
        new smallchangeSysOOP().mainMenu();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值