鱼C论坛

 找回密码
 立即注册
查看: 2082|回复: 2

[已解决]关于异常的几个小问题~帮帮忙呀~

[复制链接]
发表于 2018-9-10 10:24:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在类中仅仅只是重写了clone方法 而没有在类的声明中添加实现Cloneable接口,那么在调用clone方法的时候为什么没有抛出CloneNotSupportedException异常?

  1. public class ComplexNumber implements Cloneable{
  2.         private double realPart;//复数的实部
  3.         private double imaginaryPart;//复数的虚部
  4.        
  5.         public ComplexNumber()//默认构造函数
  6.         {
  7.                 this.imaginaryPart=0.0;
  8.                 this.realPart=0.0;
  9.                 //System.out.println("无参构造函数被调用");
  10.         }
  11.        
  12.         public ComplexNumber(double a,double b)//构造一个真正的复数
  13.         {
  14.                 this.realPart=a;
  15.                 this.imaginaryPart=b;
  16.                 //System.out.println("有参构造函数被调用");
  17.         }
  18.        
  19.         public double getImaginaryPart() {
  20.                 return imaginaryPart;
  21.         }
  22.        
  23.         public double getRealPart() {
  24.                 return realPart;
  25.         }
  26.         //将一个复数显示为字符串
  27.         public String toString() {
  28.                 return this.realPart+"+"+this.imaginaryPart+"i";
  29.         }
  30.        
  31.         //重新设置实部
  32.         public void setRealPart(double a) {
  33.                 this.realPart=a;
  34.         }
  35.        
  36.         //重新设置虚部
  37.         public void setImaginaryPart(double a) {
  38.                 this.imaginaryPart=a;
  39.                 }
  40.         //复数的加法运算
  41.         public ComplexNumber add(ComplexNumber aNum) {
  42.                 if(aNum==null) {
  43.                         System.out.println("对象不能够为null");
  44.                         return new ComplexNumber();
  45.                 }
  46.                 return new ComplexNumber(this.realPart+aNum.realPart,this.imaginaryPart+aNum.imaginaryPart);
  47.                
  48.         }
  49.         //复数的减法运算
  50.         public ComplexNumber sub(ComplexNumber aNum) {
  51.                 if(aNum==null) {
  52.                         System.out.println("对象不能够为null");
  53.                         return new ComplexNumber();
  54.                 }
  55.                 return new ComplexNumber(this.realPart-aNum.realPart,this.imaginaryPart-aNum.imaginaryPart);
  56.                
  57.         }
  58.         //复数的乘法运算
  59.         public ComplexNumber multiply(ComplexNumber aNum) {
  60.                 if(aNum==null) {
  61.                         System.out.println("对象不能够为null");
  62.                         return new ComplexNumber();
  63.                 }
  64.                 double newReal=this.realPart*aNum.realPart-this.imaginaryPart*aNum.imaginaryPart;
  65.                 double newImaginary=this.imaginaryPart*aNum.realPart+this.realPart*aNum.imaginaryPart;
  66.                 ComplexNumber result=new ComplexNumber(newReal,newImaginary);
  67.                 return result;
  68.                
  69.         }
  70.        
  71.         //复数的除法运算
  72.         public ComplexNumber divide(ComplexNumber aNum) {
  73.                 if(aNum==null) {
  74.                         System.out.println("对象不能够为null");
  75.                         return new ComplexNumber();
  76.                 }
  77.                 if(aNum.realPart==0&&aNum.imaginaryPart==0) {
  78.                         System.out.println("除数不能够为0");
  79.                         return new ComplexNumber();
  80.                 }
  81.                 double temp=aNum.realPart*aNum.realPart+aNum.imaginaryPart*aNum.imaginaryPart;
  82.                
  83.                 double newReal=(this.realPart*aNum.realPart+this.imaginaryPart*aNum.imaginaryPart)/temp;
  84.                 double newImaginary=(this.imaginaryPart*aNum.realPart-this.realPart*aNum.imaginaryPart)/temp;
  85.                 ComplexNumber result=new ComplexNumber(newReal,newImaginary);
  86.                 return result;
  87.                
  88.         }
  89.        
  90.         //比较值是否相等
  91.         public boolean equals(Object obj) {
  92.                 if(obj==null) {
  93.                         return false;
  94.                 }
  95.                
  96.                 //首先判断是不是ComplexNumber类的一个实例对象;可用instanceof来判断
  97.                 if(obj instanceof ComplexNumber) {
  98.                         ComplexNumber b=(ComplexNumber)obj;
  99.                         if(this.realPart==b.realPart&&this.imaginaryPart==b.imaginaryPart)
  100.                                 return true;
  101.                         else
  102.                                 return false;
  103.                 }else return false;
  104.         }
  105.        
  106.         //获取对象的哈希码 即地址
  107.         /*hashCode是编译器为不同对象产生的不同整数,根据equal方法的定义:
  108.         如果两个对象是相等(equal)的,那么两个对象调用 hashCode必须产生相同的整数结果,
  109.         即:equal为true,hashCode必须为true,equal为false,hashCode也必须 为false,所以必须重写hashCode来保证与equal同步。*/
  110.         public int hashCode(){
  111.                 return this.toString().hashCode();
  112.         }
  113.        
  114.        
  115.        
  116.         //根据现有对象克隆一个新对象,新对象和现有对象的值一样
  117.         public Object clone() {
  118.                 try {
  119.                         //克隆一个对象时,应先调用父类的clone方法
  120.                         ComplexNumber newObject=(ComplexNumber)super.clone();
  121.                         //将现有对象的值给新对象
  122.                         newObject.setRealPart(this.realPart);//可有可无
  123.                         newObject.setImaginaryPart(this.imaginaryPart);
  124.                         return newObject;
  125.                 }catch(CloneNotSupportedException e) {
  126.                         e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
  127.                         return null;}
  128.         }
  129.         public static void main(String[] args) throws CloneNotSupportedException{
  130.                 ComplexNumber test1=new ComplexNumber(2,4);
  131.                 ComplexNumber test2=new ComplexNumber(2,4);
  132.                 System.out.println("ComplexNumber test1:"+test1.toString());
  133.                 System.out.println("ComplexNumber test2:"+test2.toString());
  134.                 System.out.println("test1.equals(test 2):"+test1.equals(test2));
  135.                 System.out.println("test1.hashCode:"+test1.hashCode()+";"+"test2.hashCode:"+test2.hashCode());
  136.                 System.out.println("test1.clone="+test1.clone().toString());
  137.                 //System.out.println("test1.clone.hashCode="+test1.clone().toString().hashCode());
  138.         }

  139. }
复制代码

最佳答案
2018-9-13 14:23:00
你声明类的时候不是已经添加接口了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-13 14:23:00 | 显示全部楼层    本楼为最佳答案   
你声明类的时候不是已经添加接口了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-20 21:04:48 | 显示全部楼层
springrs 发表于 2018-9-13 14:23
你声明类的时候不是已经添加接口了吗

不好意思 我刚学 有点糊涂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 12:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表