目录
一、自定义两个异常类,一个父类一个子类,在子类中抛父类的异常。
二、输入两个String串,每个串之间用逗号分隔,如何查看一个String串是另外一个String的子集?
三、写一个类放HashSet中,不重写equals和hashcode是否会出错?
四、写一个类放HasgTree中,实现compareTo方法。
一、自定义两个异常类,一个父类一个子类,在子类中抛父类的异常。
为什么要自定义异常?
创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新的含义;可以显示代码多个位置之间的错误的相似处,也可区分代码运行时可能出现的相似问题的一个或多个错误,或给出应用程序中一组错误的特殊含义。
代码:
package com.zhanghaiping.javaHomeWork;
class FuException extends Exception{
String msg;
public FuException(){}
public FuException(String msg){
this.msg = msg;
}
public String getMsg() {
return msg;
}
}
class SonException{
//定义抛出父类异常
public SonException() throws FuException{
throw new FuException("抛出父类异常");
}
}
public class ExceptionDemo1{
public static void main(String[] args) {
try {
new SonException();
} catch (FuException fuException) {
System.out.println("异常信息: " + fuException.getMsg());
}
}
}
运行结果:
异常信息为: 不能除0的异常
二、输入两个String串,每个串之间用逗号分隔,如何查看一个String串是另外一个String的子集?
主要用到的是string的contains方法。
代码:
package com.zhanghaiping.javaHomeWork;
public class ContainsOfStringDemo {
public static void main(String[] args) {
String string1 = "aaa,bbb,ccc,ddd";
String string2 = "aaa,bbb";
new ContainsOfStringDemo().containsFunc(string1, string2);
}
public void containsFunc(String string1,String string2 ) {
if (string1.contains(string2)) {
System.out.println("String2 是 String1的子集");
}else {
System.out.println("String2 是 String1的子集");
}
}
}
运行结果:
String2 是 String1的子集
三、写一个类放HashSet中,不重写equals和hashcode是否会出错?
直接看代码:
package com.zhanghaiping.javaHomeWork;
import java.util.HashSet;
class Room{
String roomName;
public Room(String name) {
roomName = name;
}
}
public class HashSetDemo {
public static void main(String[] args) {
HashSet<Room> roomSet = new HashSet<Room>();
roomSet.add(new Room("No.1"));
roomSet.add(new Room("No.2"));
if (new Room("No.1").equals(new Room("No.2"))) {
System.out.println("调用默认equals方法,返回为True");
}else {
System.out.println("调用默认equals方法,返回为Flase");
}
}
}
运行结果:
调用默认equals方法,返回为Flase
四、写一个类放HasgTree中,实现compareTo方法。
package com.zhanghaiping.javaHomeWork;
import java.util.Set;
import java.util.TreeSet;
/**
* @ClassName: Computer
* @Description: TODO(HashTreetDemo)
* @date 2016年10月30日 上午1:51:27
* @author 张海平
* 湖南师范大学407工作室
*/
class Computer implements Comparable{
private String comType;
private int comPrize;
public Computer(String type,int prize) {
comType = type;
comPrize = prize;
}
/// 重写compareTo方法,这里我们以价格排序
@Override
public int compareTo(Object o) {
Computer computer = (Computer)o;
if (this.comPrize > computer.comPrize) {
return 1;
}
// if (this.comType == computer.comType) {
// return 1;
// }
return -1;
// int num = new Integer(this.comPrize).compareTo(new Integer(computer.comPrize)) ;
// return num == 0 ? this.comType.compareTo(computer.comType) : num;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return comType + "::" + comPrize;
}
}
public class HashTreeDemo {
public static void main(String[] args) {
Set<Computer> comSet = new TreeSet<Computer>();
comSet.add(new Computer("acer", 5000));
comSet.add(new Computer("联想", 4000));
comSet.add(new Computer("惠普", 3000));
comSet.add(new Computer("戴尔", 2000));
System.out.println(comSet);
}
}
运行结果:
[戴尔::2000, 惠普::3000, 联想::4000, acer::5000]
总结
同过本次的学习,主要知道了如何去自定义一个异常类,为什么要自定义异常类,还有在HashSet中,如果你不重写equals方法的话,那么它就会调用默认的equals方法,默认的equals方法排序就是按数字或字母在ASCII码的字符顺序来做升序的。还有就是在TreeSet中,如果你想按自己的要求来排序的话就必须实现实现comparable接口,然后在实现compareTo方法,在compareTo方法中,定义你所要求的排序规则,在重写toString方法,要不然返回的就是一堆哈希码,看着也没什么太大的意义,只是告诉你,你集合中所存储的东西没有谁是在同一个地址的。
如果有什么错误欢迎各位指出评论,谢谢