我的java学习笔记(1)不按时间顺序

原创 2007年09月18日 22:47:00

Try{

       For(; ;){

       Try{

       //

}catch(Exception e){
              //

}finally{

       Continue; / break;

}

       }

}catch(Exception e){

e.printStackTrace();

}

死循环finally中用break,contine,return等任何操作,都肯定不会被执行到。

    

如果在finally中写了出异常的程序,则会先执行finally后去运行catch块中的语句。

       Eg : Try{

                     For(; ;){

                     Try{

                     //

}catch(Exception e){
              //

}finally{

                     Throw new Exception();

}

                     }

}catch(Exception e){

              e.printStackTrace();

}finally{

       System.out.println(“finally first”);

}

 

: object

隐含的默认根对象。

Eg: Array a = new Array[3]; ---- 此也是属object类的,数组也是属于Object类的。

常用方法: equals(), hashcode(); toString(); clone(); finalize();object类中可重写的五种方法)。

注: 接口与类是不同体系的。

 

(1). Equals(); 对象的相等性测试

       ==”: 是对比两个对象的地址是否一致。

       Equals 是对比两个对象的内容是否一致。

Eg: @override

       public boolean equals (Object obj) {

       if (null == obj) {                         //非空性

           return false;

       }

       if (this == obj) {                 //自反性(如果为同一实例,为真)

           return true;

       }

if (!(obj instanceof PhoneNumber)) {   //对比是否是同一类型的(为了//解决不是一类型的对象做对比时的出错问题)

           return false;

       }

       PhoneNumber temp = (PhoneNumber) obj;

if ((this.dianhuahaoma.equals(temp.dianhuahaoma)) && (this.kuozhan.equals(temp.kuozhan)) && (this.quhao.equals(temp.quhao))) {     //对比对象里面的内容是否一致

           return true;

       }

       else{

           return false;

       }

    }

注:重写这种 object类方法时,要注意

自反性,  对称性,  传递性,     一致性,        非空性。

x.equals(x)     x.equals(y)  x—z;y—z;x—z   多次调用不出错    对于空值返回false;

 

小技巧: 字符串或者字节数组中,可用  变量名.getBytes().length; 来获取字符串的长度。

 

2)。Hashcode(); 为了支持hash运算;eg: hashmap等。

注:一般重写了equals()方法,则hashcode()方法也要重写

 

小技巧:因为这个方法经常和equals方法配对出现,所以为了区分开不同的对象,让它们拥有独立的值;可以在声明实例变量时,多加一个变量用于区分它们, 例如:

class PhoneNumber implements Cloneable{

    private String quhao;

    private String dianhuahaoma;

    private String kuozhan;

public PhoneNumber(String dianhuahaoma, String kuozhan, String quhao){

       this.dianhuahaoma = dianhuahaoma;

       this.kuozhan = kuozhan;

       this.quhao = quhao;

    }

public int hashcode(){

       int result = 17;

       result = result * 37 + quhao.length();

       result = result * 37 + dianhuahaoma.length();

       result = result * 37 + kuozhan.length();

       return result;

    }

}

如果这么声明实例变量,则当两个电话号码的三个部分全是一样时,则会出现hashcode同值的情况( result会传回相同的值 ),为了避免这种情况,可以多声明一个变量,在构造这个对象时,传入这个对象特有的这个变量值:

class PhoneNumber implements Cloneable{

    private String quhao;

    private String dianhuahaoma;

    private String kuozhan;

    private String index;

public PhoneNumber(String dianhuahaoma, String kuozhan, String quhao String index){

       this.dianhuahaoma = dianhuahaoma;

       this.kuozhan = kuozhan;

       this.quhao = quhao;

this.index = index;

    }

       public int hashcode(){

       int result = 17;

       result = result * 37 + quhao.length();

       result = result * 37 + dianhuahaoma.length();

       result = result * 37 + kuozhan.length();

result = result * 37 + index.getBytes().length;

       return result;

    }

}

这样就能区分开不同的对象的hashcode了。

 

3.toString()方法: 当比如System.out.println(e2),JVM会自动调用其

           (此方法是对其对象的描述)

toString()方法。

默认实现形式:getClass().getName() + ‘@’ + Integer.toHexString(hashcode())

Eg:

public String toString(){

return this.getClass().getName()+'@'+Integer.toHexString(hashCode());

    }

 

(4). Clone()方法: 支持对象的克隆。

使用: PhoneNumber pn = new PhoneNumber();

       PhoneNumber pn1 = pn.clone();

Eg:

    Protected Object clone() throws CloneNotSupportedException {

       Super.clone();

       PhoneNumber result = new PhoneNumber();

       result.setDianhuahaoma(this.dianhuahaoma);//调用其设置方法set方法

       result.setKuozhan(this.kuozhan);

       result.setQuhao(this.quhao);

    return result;      // 前面定义时要求返回的是object类型的,但是这里返//回的是其子类型,这个是允许的(向上转型)。

}

 

使用clone()方法时,JVM强制要求将clone()方法放在Try块中。

Public static void main(String[] args){

    PhoneNumber e0 = new PhoneNumber();

    Try{

       PhoneNumber e1 = (PhoneNumber)e0.clone();

}catch(CloneNotSupportedException e){

    System.out.println(“…..”);

}

}

在此方法所在的类的定义时,要增加implements Cloneable ,

Eg: class PhoneNumber implements Cloneable{ //想使用clone()方法一定要实现这个接口

                     //Cloneable接口里是没有任何内容的,但还是要实现它。

Protected Object clone() throws CloneNotSupportedException {

              Super.clone();

              PhoneNumber result = new PhoneNumber();

       Result.setDianhuahaoma(this.dianhuahaoma);//调用其设置方法set方法

              result.setKuozhan(this.kuozhan);

              result.setQuhao(this.quhao);

           return result;

}

              }

注:克隆出来的:内容一样,                  地址不同

                            x.equals(x.clone());              x != x.clone();

这个方法的其中一个作用:可以把一个不愿给其对象的东西,克隆一下给另一个人。

 

5. Finalize()方法;垃圾回收;

在垃圾回收器在准备要收回某个内存块之前,会去调用它,而且只调用一次,但这个时间不确定,只能保证去调用一次。

作法:一般在重写时,在最前面写一句super.finalize();把父类的先回收。

 

轻松一下: 用语排序的接口为Comparable

                     重写其中的方法compareTo(T o), 与之前的equals类似。(如想练习,可参照equals方法的例子)

 

以上所写的Object类中的五种方法在需要写一个通用的Class时,非常有必要去重写它们,然后再考虑自己的的特有方法。

 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构学习笔记(1.大O表示法和顺序表)

最近在看国嵌唐老师的数据结构视频,觉得还不错,所以就把笔记记录下来 本节知识点: 1.数据之间的逻辑结构:    集合结构:数据元素之间没有特别的关系,仅同属相同集合    线性结构:数据...

顺序容器 - 1【C++ Primer 学习笔记 - 第九章】

顺序容器: vector :  支持快速随机访问 list      :  支持快速插入/ 删除 deque:  双端队列    double-ended queue 顺序容器适配器 s...

C++学习笔记(1) 顺序容器简介

根据《C++ Primer 第五版》整理,支持C++11相关特性。 1.     概述 所有顺序容器都支持快速访问元素,但是其性能的差异在于: l  添加、删除元素的代价 l  随机访问元素的...

【Struts2学习笔记(1)】Struts2中Action名称的搜索顺序和多个Action共享一个视图--全局result配置

1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action 2.首先寻找namespace为/path1/pat...

数据结构学习笔记1——顺序表

知识要点: 1.数据之间的逻辑结构:    集合结构:数据元素之间没有特别的关系,仅同属相同集合    线性结构:数据元素之间是一对一的关系    树形结构:数据元素之间存在一对多的层次关系    图...

应用时间序列分析(王燕)学习笔记1

第一章 时间序列分析简介按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。对时间序列进行观察、研究、找寻它变化发展的规律,预测它将来的走势就是时间序列分析。描述型时序分析:通过直观的...

数字信号处理(MATLAB版)学习笔记1--离散时间信号与系统

一、周期序列的MATLAB编程 1.产生包含x(n)的P行矩阵 2.利用结构( : )将P行连成一个长的行向量。 注:( : )仅对列起作用,所以必须要用矩阵转置符 '  程序 xtilde...

R语言与时间序列学习笔记(1)

今天分享的是R语言中时间序列的有关内容。主要有:时间序列的创建,ARMA模型的建立与自相关和偏自相关函数。 一、          时间序列的创建 时间序列的创建函数为:ts().函数的参数列表如...

Java学习笔记 (1)

  • 2013-08-17 20:24
  • 100KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)