Java言語は、オブジェクト指向、そしてトップレベルの親(ルートクラス)のすべてのクラスのためのJavaオブジェクトのクラスです。
各クラスは、スーパークラスとしてObjectクラスを使用して、(アレイを含む)すべてのオブジェクトは、クラスの使用がクラスから継承、それはObjectクラスを継承デフォルトですることを明らか拡張していない場合でも、このクラスの実装です。
Objectクラスは、隣簡単に行うために、より一般的な方法の一つを取るために、いくつかの方法を提供します。
1)公共の文字列のtoString() >>> オブジェクトのメソッド情報を取得します。
オブジェクトを印刷するときに呼び出され、このメソッドは、オブジェクトが返された文字列情報、デフォルトの出力先アドレスになります。
例えば:
/ **
*定义一个类并重写のtoString()方法
* /
パブリック クラス人{ プライベート文字列名; プライベート int型の年齢; プライベート char型性別; @Override パブリック文字列のtoString(){ 戻り "人物{" + "NAME =" '+名+ '\'' + "年齢=" +年齢+ "性別=" +性別+ '}' 。 } パブリック人(){ } 公共人(文字列名、int型の年齢、チャー性別){ この .nameの= 名前。 この .age = 年齢; この .gender = 性別; }
/ ** *テストクラス * / パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ 人P1 = 新しい新規人物(「ジョー・スミス」、22、「M」); 人物P2 = 新しい新規人物(「李斯」、23、 'F' ); のSystem.out.println(p1.toString()); のSystem.out.println(p2.toString()); } }
結果:リライトのtoString()結果の構造と一致。
2)パブリックブール等しい(オブジェクトobj) >>> オブジェクトが同じ分析法であります
比較が等しい場合、この方法が使用され、そしてこの方法は、オーバーライドされなければなりません。
例えば:
/ ** *定义一个类并重写イコール方法 * / パブリック クラス人{ プライベート文字列名; プライベート int型の年齢; プライベート char型性別; パブリック人(){ } 公共人(文字列名、int型の年齢、チャー性別){ この .nameの= 名前。 この .age = 年齢; この .gender = 性別; } パブリック文字列のgetName(){ 戻り名。 } 公共 のボイドsetName(文字列名){ この .nameの= 名前。 } 公共 INT getAge(){ 戻り年齢; } 公共 ボイド setAge(int型の年齢){ この .age = 年齢。 } 公共 チャーgetGender(){ 戻り性別。 } 公共 ボイド setGender(チャー性別){ この .gender = ジェンダー。 } / ** *重写方法等しい * / パブリック ブール{等しい(人物P) 戻る スーパー.equals(p)を。 } }
/ ** *テストクラス * / パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ 人P1 = 新しい新規人物(「ジョー・スミス」、22、「M」); 人物P2 = 新しい新規人物(「ジョン・ドウ"23、 'M' ); 人P3 = 新しい新規人物("ジョー・スミス」、22、 'M' ); 整数A = 10 ; 整数B = 10 ; ブール FLAG1 = p1.equals(P2); ブール FLAG2 = p1.equals(P3); ブール FLAG3 =。p1.getName()に等しい(p2.getName())。 ブール FLAG4 = a.equals(B)。 System.out.println(FLAG1)。 System.out.println(FLAG2)。 System.out.println(FLAG3)。 System.out.println(FLAG4)。 } }
業績:でもp1と同じのp3のさまざまな属性けれども、しかし、ヒープアドレス値で2つのオブジェクトを作成することによって、比較がアドレスで等しい結果が偽であるので、同じではありません。
データ型は、実質的ではない方法に等しいことに留意されたいです。上記の例は整数、p1.getGender()にINTを与えられている。等しい(p2.getGenderは間違っています。
3)公共ネイティブint型のハッシュコード() >>> オブジェクト署名
このメソッドは、オブジェクトの彼の物理アドレス(ハッシュコード値)に戻すために使用され、多くの場合、同じ2つのオブジェクトが等しい.hashCodeを持って確実に、データを書き換える方法に等しくされます。
/ ** *オーバーライドhashCodeメソッド * / @Override 公共 int型のハッシュコード(){ リターン スーパー.hashCode(); }
/** * 测试类 */ public class Test { public static void main(String[] args) { Person p1 = new Person("张三",22,'男'); Person p2 = new Person("张三",22,'男'); int i1 = p1.getName().hashCode(); int i2 = p2.getName().hashCode(); int i3 = p1.hashCode(); int i4 = p2.hashCode(); System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println(i4); } }
运行结果:
由此可见通过new的对象即使属性赋值一致,对象的hashCode也是不一样的。
4)public final native Class<?> getClass() >>> 返回此Object的运行时类
注意:此方法不可重写,要调用的话一般和getName()联合使用,如getClass().getName()
该方法在反射中有大用!
5)线程中常用的方法(此处合在一起说明)
public final void wait() >>> 多线程中等待功能
public final native void notify() >>> 多线程中唤醒功能
public final native void notifyAll() >>> 多线程中唤醒所有等待线程的功能
其中wait()方法还有另外两个带不同功能的方法:
public final native void wait(long timeout) >>> 要等待的最长时间,单位毫秒
public final void wait(long timeout, int nanos) >>> nanos额外时间,单位纳秒
6)protected native Object clone() >>> protected修饰的方法,功能是完成对象的浅复制(创建并返回此对象的一个副本----“副本”的准确含义可能依赖于对象的类)
只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException。
Java中除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里将参数改变,这时就需要在类中复写clone方法(实现深复制)。
7)protected void finalize() >>> 垃圾回收(释放资源的方法)
该方法即使被调用也不知道什么时候执行,所以一般很少主动使用。
finalize()方法的用途:
无论对象是如何创建的,垃圾回收器都会负责释放对象占据的所有内存。这就将对finalize()的需求限制到一种特殊情况,即通过某种创建对象的方式以外的方式为对象分配了存储空间。这种情况一般发生在使用“本地方法”的情况下,本地方法是一种在Java中调用非Java代码的方式。
*>>Java的一大特点就是垃圾回收机制。关于垃圾回收需要注意以下几点:
1)对象可能不被垃圾回收。
只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不到释放。
2)垃圾回收并不等于“析构”。
3)垃圾回收只与内存有关。
使用垃圾回收的唯一原因就是为了回收程序不再使用的内存。
综上所述,Object类常用的六种方法是toString()、equals()、hashCode()、wait()、notify()、notifyAll()。