我的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时,非常有必要去重写它们,然后再考虑自己的的特有方法。

 

java中map里面的key按我们插入进去的顺序输出

TreeMap的顺序是自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序。  用LinkedHashMap吧。它内部有一个链表,保持插入的顺序。迭代的时候,也是按照插入顺序迭代,而...
  • Zhangxichao100
  • Zhangxichao100
  • 2017年05月17日 16:48
  • 1787

我的JAVA学习笔记(2)不按时间顺序

对象的集合1 概述容器类类库的用途是持有对象,所有的容器都只能保存对Object的引用。包括:1.Collection: 一组独立的元素List: 必须保持元素特定的顺序Set: 不能有重复元素2.M...
  • paulfong
  • paulfong
  • 2007年09月18日 22:55
  • 440

eclipse debug java程序,为什么不按照行顺序执行?

java程序可能没有编译。
  • feiyun72
  • feiyun72
  • 2012年08月24日 17:54
  • 1476

批处理 按顺序按时间重命名文件

转载自:http://hi.baidu.com/zhhb/blog/item/aa0b1bd533a043cf50da4bbd.html @echo off :k...
  • xuehuic
  • xuehuic
  • 2011年12月04日 23:59
  • 2243

Map,Set按插入顺序排序比较与实现

Map,Set按插入顺序排序比较与实现  String months[] = new DateFormatSymbols().getMonths();   String italian...
  • gaoqiao1988
  • gaoqiao1988
  • 2013年06月27日 13:45
  • 1629

matlab读取文件顺序排序问题。10 1 2出错问题。

来源nature order sort 如题,最近用matlab处理数据,自动读取n个txt的时候,突然发现一个bug。 比如windows下命名是这样的。 wz1 wz2 wz3......wz10...
  • me4weizhen
  • me4weizhen
  • 2016年11月17日 14:29
  • 364

定义枚举实例时按照顺序定义的好处

java的枚举基本上大家都用过,枚举定义时候的顺序对程序的影响呢,呵呵,我也是最近才发现这个问题,这涉及到两个方法public final int compareTo(E o);和public fin...
  • coffee_hc
  • coffee_hc
  • 2014年09月17日 08:49
  • 893

聊天记录按时间排序,时间相同时按人名排序

package com.qunar.fresh.wangqiaohong.exam1; /* * OrderMsg * 2014/11/4 * Created by qiaohong.wang...
  • a735465047
  • a735465047
  • 2014年11月10日 14:54
  • 931

MPI 每个rank依次往下一个rank发送消息的循环

https://www.sharcnet.ca/help/index.php/Getting_Started_with_MPI #include #include #defin...
  • wangeen
  • wangeen
  • 2013年01月31日 09:16
  • 2909

Copy文件的顺序

选择一批文件(列表或详细资料查看方式),拖动copy.第一个copy的文件将是拖动时鼠标所在的文件(有个虚线标识),接着是按列表顺序copy.手机上文件缺省按上传顺序排列,才注意到这一点。...
  • redvalley
  • redvalley
  • 2005年10月30日 13:11
  • 873
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我的java学习笔记(1)不按时间顺序
举报原因:
原因补充:

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