package chapter07.D8运算符;
//基本数据类型和引用数据类型判断==,equals只判断引用类型
public class Equals {
public static void main(String[] args) {
A a = new A();
A b=a;
A c=b;
System.out.println(a==c);//判断地址
System.out.println(b==c);
B bobj=a;//向上编译
System.out.println(bobj==c);//都指向同一A对象
System.out.println("hello".equals("abc"));//ctrl+b看原码
//String类的equals,把Object类中的equals方法重写,变成比较字符串的值是否相等
String str1 = new String("zhengtu");
String str2 = new String("zhengtu");//new以后地址变化
System.out.println(str1==str2);//判断对象(地址)
System.out.println(str1.equals(str2));
// String str3 = new Object("kk");
//Object类的equals是默认比较对象地址是否相同(是不是同一对象)
}
}
class A extends B{
}
class B{
}
package chapter07.D8运算符;
public class EqualExercise {
public static void main(String[] args) {
Person person1 = new Person("jack", 10, '男');
Person person2 = new Person("jack", 10, '男');
System.out.println(person1.equals(person2));//若Person类里没有重写,用的是object里的equals,判断对象(地址)
}
}
class Person{//extend object
private String name;
private int age;
private char gender;
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public char getGender() {
return gender;
}
public boolean equals(Object obj){//传进来person2
if (this==obj){
return true;
}
if (obj instanceof Person){
//进行向下转型 因为需要obj的各个属性,在父类Object里没有,要强转
Person p =(Person) obj;
return this.name.equals(p.name)&&this.age==p.age&&this.gender==p.gender;//this指person1
}else {
return false;
}
}
}
package chapter07.D8运算符;
public class EqualExercise02 {
public static void main(String[] args) {
Person2 p1 = new Person2();
p1.name="zhengtu";
Person2 p2 =new Person2();
p2.name="zhengtu";
System.out.println(p1==p2);
System.out.println(p1.name.equals(p2.name));
System.out.println(p1.equals(p2));// Person2类没有重写,用的是object的equals,比较地址
String s1=new String("uio");
String s2=new String("uio");
System.out.println(s1.equals(s2));//String类有重写,比较数值
System.out.println(s1==s2);
}
}
class Person2{
public String name;
}
package chapter07.D8运算符;
//不同对象hashCode值不同,但hashCode值不能表示地址
public class HashCode {
public static void main(String[] args) {
AA aa = new AA();
AA aa2 = new AA();
AA aa3=aa;
System.out.println(aa.hashCode());
System.out.println(aa2.hashCode());
System.out.println(aa3.hashCode());
}
}
class AA{
}
package chapter07.D8运算符;
public class ToString {
public static void main(String[] args) {
Monster monster = new Monster("小妖怪", "巡山", 1000);
System.out.println(monster.toString());//没重写走Object的toString()
System.out.println(monster);//等价调用monster.toString()
}
}
class Monster{
private String name;
private String job;
private double sal;
public Monster(String name, String job, double sal) {
this.name = name;
this.job = job;
this.sal = sal;
}
//重写 toString方法 输出对象属性
@Override
public String toString() {//重写后,一般是把对象的属性值输出,也可自己定制
return "Monster{" +
"name='" + name + ''' +
", job='" + job + ''' +
", sal=" + sal +
'}';
}
}
package chapter07.D8运算符;
//实际开发中几乎不用,应付面试
public class Finalize {
public static void main(String[] args) {
Car bmw = new Car("宝马");
bmw = null;//这时 Car对象就是一垃圾,垃圾回收期就会销毁该对象,在这之前会调用Finalize方法,在Finalize中可写业务如释放空间(数据库连接,或打开文件..)
//若不重写Finalize,就会调用object类的Finalize,即默认处理
//若重写了,则实现自己的逻辑
System.gc();//主动调用垃圾回收器
System.out.println("程序退出...");
}
}
class Car{
private String name;//属性,资源
public Car(String name){
this.name=name;
}
@Override
protected void finalize() throws Throwable {
System.out.println("我们销毁 汽车"+name);
System.out.println("释放了某些资源");
}
}
断点调试
F7 跳入
F8 逐行
shift+F8 跳出
F9 执行到下一个断点
package chapter08.D1断点调试;
public class Debug01 {
public static void main(String[] args) {
int res=0;
for (int i = 0; i <5 ; i++) {
res+=i;
System.out.println("i="+i);
System.out.println("sum="+i);
}
System.out.println("退出for....");
}
}
package chapter08.D1断点调试;
public class Debug02 {
public static void main(String[] args) {
int []arr={1,10,-1};
for (int i = 0; i <= arr.length ; i++) {
System.out.println(arr[i]);
}
System.out.println("退出for");
}
}
package chapter08.D1断点调试;
import java.util.Arrays;
//追原码 Setting>Build,Execution,Deployment>Debugger>Stepping 划掉java javax 可进原码
public class Debug03 {
public static void main(String[] args) {
int[] arr={1,-1,10,-20,100};
Arrays.sort(arr);
for (int i=0;i< arr.length;i++){
System.out.print(arr[i]+"t");
}
}
}
package chapter08.D1断点调试;
import java.util.Arrays;
//执行到下一个断点
public class Debug04 {
public static void main(String[] args) {
int[] arr={1,-1,10,-20,100};
Arrays.sort(arr);
for (int i = 0; i
package chapter08.D1断点调试;
//演示对象创建过程
public class DebugExercise {
public static void main(String[] args) {
Person jack = new Person("jack",20);
System.out.println(jack);
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
零钱通
package chapter09.D1零钱通;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Lingqiantong {
public static void main(String[] args) {
boolean flag=true;
double sum=0.0;
Date date = new Date();
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd H:m");
Scanner myscanner = new Scanner(System.in);
String detail="-------------零钱通明细------------";
do {
System.out.println("-------------零钱通菜单------------");
System.out.println("ttt1 零钱通明细");
System.out.println("ttt2 收益入账");
System.out.println("ttt3 消费");
System.out.println("ttt4 退出");
System.out.println("请选择(1-4):");
int num= myscanner.nextInt();
switch (num) {
case 1:
System.out.println(detail);
break;
case 2:
System.out.println("请输入入账金额:");
double money = myscanner.nextDouble();
if (money <= 0) {
System.out.println("输入金额必须大于0!");
break;
}
sum += money;
detail += "n收益入账" + "t" + "+" + money + "t" + sim.format(date) + "t" + "余额:" + sum;
break;
case 3:
System.out.println("请输入消费项目:");
String a = myscanner.next();
System.out.println("请输入消费金额:");
double e = myscanner.nextDouble();
if (e <= 0 || e > sum) {//是或不是与,与的话肯定不成立
System.out.println("输入金额必须在0-余额"+sum+"元之间!");
break;
}
sum -= e;
detail += "n" + a + "t" + "-" + e + "t" + sim.format(date) + "t" + "余额:" + sum;
break;
case 4:
String choice;//定义在外边,让两个if都能调用到
while (true) {
System.out.println("确认退出吗?(y/n)");
choice = myscanner.next();
if ("y".equals(choice) || "n".equals(choice)) {//用myscanner.next()代替会输入两次
break;
}
}
if ("y".equals(choice)) {//Alt+shift+enter可以改错
flag = false;
}
break;
default:
System.out.println("选择有误,请重新选择");
}
}while (flag);
System.out.println("-----------零钱通已退出-----------");
}
}
package chapter09.D1零钱通;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Lingqiantong2 {
String detail="-------------零钱通明细------------";
Scanner myscanner = new Scanner(System.in);
boolean flag=true;
double sum=0.0;
Date date = new Date();
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd H:m");
public void jiemian(){
do {
System.out.println("-------------零钱通OOP菜单------------");
System.out.println("ttt1 零钱通明细");
System.out.println("ttt2 收益入账");
System.out.println("ttt3 消费");
System.out.println("ttt4 退出");
System.out.println("请选择(1-4):");
int num= myscanner.nextInt();
switch (num) {
case 1:
detail();
break;
case 2:
inmoney();
break;
case 3:
outmoney();
break;
case 4:
exit();
break;
default:
System.out.println("选择有误,请重新选择");
}
}while (flag);
System.out.println("-----------零钱通已退出-----------");
}
public void detail(){
System.out.println(detail);
}
public int inmoney(){//有返回值,终止程序写return 0
System.out.println("请输入入账金额:");
double money = myscanner.nextDouble();
if (money <= 0) {
System.out.println("输入金额必须大于0!");
return 0;
}
sum += money;
detail += "n收益入账" + "t" + "+" + money + "t" + sim.format(date) + "t" + "余额:" + sum;
return 0;
}
public void outmoney(){//void不返回值,终止程序可写return
System.out.println("请输入消费项目:");
String a = myscanner.next();
System.out.println("请输入消费金额:");
double e = myscanner.nextDouble();
if (e <= 0 || e > sum) {//是或不是与,与的话肯定不成立
System.out.println("输入金额必须在0-余额"+sum+"元之间!");
return;
}
sum -= e;
detail += "n" + a + "t" + "-" + e + "t" + sim.format(date) + "t" + "余额:" + sum;
}
public void exit(){
String choice;//定义在外边,让两个if都能调用到
//用myscanner.next()代替会输入两次
do {
System.out.println("确认退出吗?(y/n)");
choice = myscanner.next();
} while (!"y".equals(choice) && !"n".equals(choice));
if ("y".equals(choice)) {//Alt+shift+enter可以改错
flag = false;
}
}
}
package chapter09.D1零钱通;
import chapter09.D1零钱通.Lingqiantong2;
public class Test {
public static void main(String[] args) {
Lingqiantong2 test = new Lingqiantong2();
test.jiemian();
}
}


