Java-类设计综合实验
介绍:vet & Pet
备注:因为代码由多个类上传,所以本文不会粘贴代码,只是总结
1、代码思路总结
总体思路
因为是写一个综合的实验,设计多个类、接口和功能;所以需要:
1、先弄清楚各个类、接口之间的关系(继承、实现…)
2、再看main函数,对比函数输出,了解程序大致功能、输出、以及每个类需要实现的功能等 (刚开始的时候,没有看主函数,导致功能不全)
代码规范
类中,定义了一个private变量,一定要写个get方法获取变量的值
private String name; //pet's name
//返回名字
public String getName(){
return name;
}
2、(易错)知识点补充
1、关于数组的定义
误区:
数组长度可以不在创造的时候就规定好
作用:
—这样就可以根据输入参数自行定义数组的长度
代码:
public class Vet implements Database {
Pet[] clients; //宠物名称
public Vet(int startSize) {
clients = new Pet[startSize];
}
}
2、sort函数和Comparable接口
sort函数:
排序算法—详见Arrays.sort()详解)
Comparable接口的地位:
Comparable 并重写其 compareTo 方法以实现自然排序(sort)
重写:
关于重写的知识点:
------方法名和输入==“参数”尽量保持一直==,比如,compareTo是object,重写的输入也要是object;
-------如果传入的是类,可以用这个方法调整其所属的类
public int compareTo(Object o) { Pet pt = (Pet) o;
本题的要求(忽略大小写)
-----用 ==compareToIgnoreCase==来比较
-----返回值是int型
代码:
public class Pet implements Comparable //实现接口
················//省略许多代码
//重写compareTo
@Override
public int compareTo(Object o) {
Pet pt = (Pet) o;
if( this.getOwner().compareToIgnoreCase(pt.getOwner()) == 0){
return this.getName().compareToIgnoreCase(pt.getName());
}else{
return this.getOwner().compareToIgnoreCase(pt.getOwner());
}
}
3、Java 数组
定义:
dataType[] arrayRefVar = new dataType[arraySize]; int[] int1 = new int[10];
4、println中的toString()
问题:
为什么这个代码会调用toString方法?
Person p = new Person(); System.out.println(p1.toString());//TestEquals.Person@15db9742 System.out.println(p); //TestEquals.Person@15db9742
解答:
看println方法:
public void println(Object x) { String s = String.valueOf(x); ·········//省略了这里用不到的部分 }
看valueOf方法:
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
可以发现,这里就调用了toString方法!!!
总结:
当遇到不理解的函数时,可以阅读其方法,步步迭代,找到原因
5、toString()方法
作用:
官方定义:toString方法会返回一个“以文本方式表示”此对象的字符串。结果是一个简明但易于读懂的信息表达式。
直白点:返回字符串的“详细信息”/“属性”
重写:
正因为其的特殊性,所以经常要重写
6、instanceof关键字
定义:
Java 中可以使用 instanceof 关键字判断一个对象是否为一个类(或接口、抽象类、父类)的实例
------ 输出为TRUE:要么是同一类,要么前者(obj)是后者(class)的子类
boolean result = obj instanceof Class
例子:
Integer integer = new Integer(1); System.out.println(integer instanceof Integer); // true
7、Java指定位数输出
常用方法:
double data = 1.2345;
System.out.println(String.format("%.2f", data)); //1.23
拓展:
3、Debug
1、变量定义
问题:
cost变量是用来累计所有的花费,而不是单次的花费;
代码:
public double visit(int shots) {
//记录去过医院
visits++;
//计算价格
int cost;
cost = (85 + shots * 30);
this.cost += cost; //一定要加上之前的this.cost
return cost; //而不是this.cost
}