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();
}
}
版权声明:本文为qzbc9460原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。