还是属于Object类
0324 hashCode
0325 toString
0326 finalize
把对象置成垃圾
默认finalize在object类里什么都不做,在car里重写
0327 断点调试介绍
B b = new A();
左边:编译类型 右边:运行类型
断点调试按运行类型来看
0328 - 0333 断点调试案例
案例一:F8
案例二:越界异常
案例三:追源码
案例四:执行到下一个断点F9
案例五:课后练习
object 的运行类型person类,进入到person类的ToString
案例六:动态绑定机制的运行过程
0334 - 0341 零钱通项目
0.零钱通介绍:
1.零钱通菜单:
化繁为简
1.完成显示菜单,可以选择菜单,并给出相应提示
2.完成零钱通明细
3.完成收益入账
4.完成消费
5.退出
6.用户输入4退出时,给出提示"确定要退出吗,输入y/n,
如果没有正确输入,循环到正确输入为止。"
2.零钱通明细:
收益和入账如何实现:
(1)收益和入账保存到数组
(2)使用对象
(3)使用 String 拼接
3.零钱通收益
定义新的变量
Date date = null;//date包是用来表示日期的
String details = "----------------零钱通明细----------------";
//用于日期格式化的函数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf.format(date)//格式化之后的日期
4.消费
功能基本已经实现
package com.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;
//double money = 0.00;
double balance = 0.00;
Date date = null;//date包是用来表示日期的
date = new Date();//获取到当前的日期
String details = "----------------零钱通明细----------------";
//String details2 = "----------------消费----------------";
//用于日期格式化的函数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
do{
Scanner myScanner = new Scanner(System.in);
System.out.println("================零钱通菜单================");
System.out.println(" 1 零钱通明细");
System.out.println(" 2 收益入账");
System.out.println(" 3 消费");
System.out.println(" 4 退 出");
System.out.println("请选择(1-4):");
// System.out.println("----------------零钱通明细----------------");
char c1 = myScanner.next().charAt(0);
switch (c1){
case '1':
System.out.println(details);
break;
case '2':
System.out.println("----------------收益入账----------------");
System.out.print("收益入账金额:");
double money = myScanner.nextDouble();//入账金额
//入账金额应当校验一下
balance += money;
//date = new Date();//获取到当前的日期
//拼接收益入账信息到details
details += "\n收益入账\t+" + money +"\t" + sdf.format(date) +"\t余额:" + balance;
//System.out.println(details);
break;
case '3':
System.out.println("----------------消费----------------");
System.out.println("消费的店铺:");
String shop = myScanner.next();
System.out.println("消费金额:");
double money2 = myScanner.nextDouble();//消费金额
balance -= money2;
details += "\n" + shop +"\t-" + money2 + "\t" + sdf.format(date) +"\t余额:" + balance;
//System.out.println(details);
break;
case '4':
System.out.println("----------------退 出----------------");
loop = false;
break;
default:
System.out.println("选择有误,请重新选择");
}
}while(loop);
System.out.println("----------------退出了零钱通项目...----------------");
}
}
5.退出确认
用户输入4退出时,给出提示"确定要退出吗,输入y/n,如果没有正确输入,循环到正确输入为止。
6.零钱通金额效验
7.OOP编程
package com.smallchange.smallchangeOOP;
/**
* 直接调用smallchangeOOP对象,显示主菜单
* **/
public class smallchangeAPP {
public static void main(String[] args) {
new SmallChangeSystemOOP().mainMenu();
}
}
package com.smallchange.smallchangeOOP;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//完成零钱通的各个功能的类
//使用面向对象编程
//将各个功能对应成一个方法
public class SmallChangeSystemOOP {
//属性..
boolean loop = true;//是否还要循环显示
String c1 = "";
String details = "----------------零钱通明细----------------";
double balance = 0.00;
Date date = null;//date包是用来表示日期的
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Scanner myScanner = new Scanner(System.in);
//显示零钱通菜单,并可以选择
public void mainMenu(){
do {
System.out.println("\n================ 零钱通菜单================");
System.out.println("\t\t\t1 零钱通明细");
//System.out.println(" 1 零钱通明细");
System.out.println("\t\t\t2 收益入账");
System.out.println("\t\t\t3 消费");
System.out.println("\t\t\t4 退 出");
System.out.println("请选择(1-4):");
//System.out.println("----------------零钱通明细----------------");
c1 = myScanner.next();
switch (c1) {
case "1":
this.detail();
break;
case "2":
this.income();
break;
case "3":
this.pay();
break;
case "4":
this.exits();
break;
default:
System.out.println("选择有误,请重新选择");
}
}while(loop);
}
//完成零钱通明细
public void detail () {
while(loop){
System.out.println("\n================零钱通菜单================");
System.out.println("\t\t\t1 零钱通明细");
//System.out.println(" 1 零钱通明细");
System.out.println("\t\t\t2 收益入账");
System.out.println("\t\t\t3 消费");
System.out.println("\t\t\t4 退 出");
System.out.println("请选择(1-4):");
//System.out.println("----------------零钱通明细----------------");
c1 = myScanner.next();
switch (c1) {
case "1":
System.out.println(details);
break;
case "2":
System.out.println("----------------收益入账----------------");
System.out.print("收益入账金额:");
double money = myScanner.nextDouble();//入账金额
//找出不正确的金额条件,给出提示或直接break
//入账金额应当校验一下
if (money <= 0) {
System.out.println("入账金额应大于0元");
break;
} else {
balance += money;
date = new Date();//获取到当前的日期
//拼接收益入账信息到details
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
//System.out.println(details);
}
break;
case "3":
System.out.println("----------------消费----------------");
System.out.println("消费的店铺:");
String shop = myScanner.next();
System.out.println("消费金额:");
double money2 = myScanner.nextDouble();//消费金额
//有一个范围的效验
if (money2 < 0 || money2 > balance) {
System.out.println("消费金额应在0-" + balance);
break;
} else {
balance -= money2;
details += "\n" + shop + "\t-" + money2 + "\t" + sdf.format(date) + "\t余额:" + balance;
//System.out.println(details);
}
break;
case "4":
boolean loop2 = true;
do {
System.out.println("是否确认退出(y/n):");
char answer = myScanner.next().charAt(0);
if (answer == 'y') {
System.out.println("----------------退 出----------------");
loop = false;
loop2 = false;
} else if (answer == 'n') {
loop = true;
loop2 = false;
} else {
loop = true;
loop2 = true;
}
//System.out.println("----------------退 出----------------");
//loop = false;
//break;
} while (loop2);
break;
default:
System.out.println("选择有误,请重新选择");
}
}
System.out.println("----------------退出了零钱通项目...----------------");
}
//完成收益入账
public void income () {
System.out.println("----------------收益入账----------------");
System.out.print("收益入账金额:");
double money = myScanner.nextDouble();//入账金额
//找出不正确的金额条件,给出提示或直接break
//入账金额应当校验一下
if (money <= 0) {
System.out.println("入账金额应大于0元");
} else {
balance += money;
date = new Date();//获取到当前的日期
//拼接收益入账信息到details
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
//System.out.println(details);
}
}
public void pay () {
System.out.println("----------------消费----------------");
System.out.println("消费的店铺:");
String shop = myScanner.next();
System.out.println("消费金额:");
double money2 = myScanner.nextDouble();//消费金额
//有一个范围的效验
if (money2 < 0 || money2 > balance) {
System.out.println("消费金额应在0-" + balance);
return;
} else {
balance -= money2;
details += "\n" + shop + "\t-" + money2 + "\t" + sdf.format(date) + "\t余额:" + balance;
//System.out.println(details);
}
}
//退出
public void exits () {
boolean loop2 = true;
while(loop2) {
System.out.println("是否确认退出(y/n):");
char answer = myScanner.next().charAt(0);
if (answer == 'y') {
System.out.println("----------------退 出----------------");
loop = false;
loop2 = false;
} else if (answer == 'n') {
loop = true;
loop2 = false;
} else {
loop = true;
loop2 = true;
}
//System.out.println("----------------退 出----------------");
//loop = false;
//break;
}
}
}