/ *
- Objectクラス
- 親クラスは、クラス宣言のキーワード、java.lang.Objectクラスにデフォルトの親クラスを拡張使用して指定されていない場合1は、Objectクラスは、親のすべてのJavaクラスのルートです
- クラスのすべてのオブジェクトはObjectクラスのみヌルコンストラクタのパラメータ、オブジェクトのクラス定義されたメソッドを使用できることを意味します。
- 、ハッシュコードをオブジェクトをコピーするのが一般的に等しい()比較のtoString()出力、クローン()()のセットを使用して:2、メソッドオブジェクトクラス
- getClass()クラス・クエリオブジェクトが属する、ファイナライズ()このメソッドは、()、のnotifyAll()、待機()、マルチスレッド利用を通知する、ターゲットをリサイクルガベージコレクタGC前に呼び出され
- 3、差==とequals()の
- 3.1演算子は、もっと基本的なタイプのいずれかは、参照タイプを比較することができます。基本的なタイプのための参照タイプの比較値であります
- これは、メモリアドレスの比較です。
- この方法はまた、デフォルト値を書き換えられていない場合、クラスjava.lang.Objectに属する3.2equals()メソッド
- それは==であり、それは文字列や他のクラスを()メソッドを書き換え、およびStringクラスで毎日開発されているに等しく、私たちが見ることができます
- 以上で、時間をかけて、等号()誤解その比較値を形成します。
- 3.3にはオーバーライドが決定されていないオブジェクトのequalsメソッドを持っている特定のカスタムクラスに依存します。通常の状況下では、オーバーライド()メソッドは、クラスが等しいかどうかを比較して対応するプロパティに等しいです。
- 4 ==比較は、2つの変数は、同じである比較データを保存するかどうか、基本的な可変データ・タイプである場合、オペレータ(必ずしも同じタイプ)
- これらの変数のアドレス値を比較変数の比較基準データ・タイプは、同じである場合。すなわち、2つの参照が同じオブジェクトの実体のヒープ領域を指しています。
- 特別な注意ストリングS1 =新しい文字列(「A」);及び、S1 =「A」;異なる比較== 2つの方法の結果との間の差、
- 文字列データ型は、定数プールではなく、ヒープ領域に格納されているので。その後、ヒープ領域の変数が指している2つのオブジェクトが同じデータに割り当てられている場合、定数プール内のデータ、
- 定数プール内の同じアドレス。
- 等号()メソッドの代わりに、オペレータは、この方法は、参照データ型にのみ適用可能です。
- クラスオブジェクト()==同じ方法及び効果、アドレスの比較対象値で定義された等しいです
- 文字列、日付、ファイル、等しいオブジェクト()メソッドを書き換えている(ラッパークラス)をパッケージ化するには、比較はもはやアドレス値ではありません
- しかし、2つのオブジェクトを比較するために、実際の値は同じです。
- カスタムクラスは、オブジェクトかどうか、同じである2つの属性値を比較するためのequals()メソッドをオーバーライドすることができます。
- 原則5、カスタムクラスを上書きするのequals()メソッド
- 5.1対称性:x.equals(y)のリターンが "真" である場合、次いでy.equals(x)は "真" を返すべきです。
- 5.2、再帰性:x.equals(x)が "真" を返す必要があります。
- 5.3、推移:x.equals(y)が "真" を返し、そして、y.equals(z)を返すYES "真" ならば、z.equals(X)も "真" を返すべきです。
- 5.4一貫性:リターンが「真」ですについて、x.equals(y)が戻った場合には、限り、xと、「真」であるとyは、あなたがx.equals(y)を繰り返しているかどうか、同じ内容を持つ回数。
- いずれの場合について、x.equals(ヌル)で5.5、常に「偽」を返すであろう。x.equals(及びオブジェクトの異なるタイプX)常に返す「偽」です。
- ECLIPS自動オーバライドのhashCode()とequals()関数を提供します。
- 5.6。属性は、クラスA参照データ型クラスBである場合、クラスA等号を書き換えた後()メソッドも、クラスBのオーバーライドの等号()メソッドを必要とします。
- 6、のtoString()メソッド。
- クラスオブジェクトに定義されている6.1のtoString()メソッド、戻り値はString型であり、それは、クラス名とアドレスへの参照を返します。
- データの他のタイプの操作6.2文字列の接続時、自動的にtoString()メソッドを呼び出します
- 例えばMyDateに該当A =新しいMyDateに該当();
- System.out.println();のSystem.out.println(a.toString())に相当する、出力アドレス値
- 6.3は、toString()メソッドをオーバーライドし、そのような文字列のクラスとして、ユーザ定義型のtoString()メソッドに書き換えることができる文字列の値を返します。
- 例えば、文字列S = "こんにちは";のSystem.out.println(S);のSystem.out.println(s.toString())に相当する、出力ハロー
- そこに日付、ファイル、パッケージ(ラッパークラス)のtoString()メソッドを書き換えている残り。リターンアドレスではなく、あなたが呼び出す実際の情報の価値
- データの6.4基本的なタイプのラッパークラスに対応する、toString()メソッドと呼ばれる、文字列型に変換されます。
- 例えばINT A = 11;のSystem.out.println(A)。
- 使用7.Eclipsユニット・テスト(JUnitの)の
- ステップ1、現在のプロジェクトを選択 - 右のビルド・パスを選択するには、ライブラリを--add --JUnit
- ステップ2、Javaクラスのテストを作成し、
- 必要なテストクラス:パブリックにクラス許可、引数のないpublicコンストラクタ
- クラス単位試験法を作成するために、3ステップ
- 試験方法は必要ありません:許可方法が公開され、戻り値、無形のパラメータを
- ステップ4は、この方法に@Test宣言し、テストクラスのインポートに導入するjava.org.junit.Test
- 良いユニットテスト方法ステップ5の後、文は、インビボ相関コードで試験することができます
- ステップ6、テストコードを書いた後、ユニットテストの方法は、右クリックし、残っていた:として実行 - JUnitのテスト
- 説明:
- 1、実行結果が異常でない場合は、緑色のバーを表示
- 2、結果が異常である場合、赤いバーとエラーメッセージ
- 3、簡単な方法、テスト・クラスを検索または作成@Test入力、及び入力公共ボイドメソッド名(){}
- JUnitの自動修復のリーダーパケットおよびインポート操作を完了するために、CTRL + 1を使用した後。
* /
package object_chapter2;
import java.lang.Object;
public class Object_Class {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.getClass());//class object_chapter2.Person
System.out.println(p.getClass().getSuperclass());//class java.lang.Object
int[] arr = new int[10];
int[] arr1 = arr.clone();
arr1 = null;//将对象赋值为null,暗示gc可以回收对象
System.gc();//通知gc回收对象
Runtime.getRuntime().gc();//通知gc回收对象
//垃圾回收机制不可预知,无法精确执行垃圾回收,垃圾回收只针对JVM堆内存的对象空间
//垃圾回收机制对于其他物理连接比如数据库连接,IO流,Socket连接无能为力。
//如果覆盖finalize方法,将一个新的引用变量重新引用该对象,则会重新激活对象
//不要主动调用对象的finalize方法,应由垃圾回收器执行。
//测试==运算符
int i = 10;
int j = 10;
double d = 10.0;
char c = 10;
System.out.println(i == j);//true
System.out.println(i == d);//true ,对于运算符都有自动类型提升
char c1 = 'a';
int k = 97;
System.out.println(i == c);//true
System.out.println(k == c1);//true,对于char型数据 ==比较的是ASCII值。
//boolean类型无法与其他基本数据类型比较。
p = new Man();
Man m = (Man) p;
System.out.println(p == m);//true
String s1 = new String("A");//创建String类型的对象
String s2 = new String("A");
System.out.println(s1 == s2);//false,比较对象地址值,不相同
s1 = "A" ;//为String类型的对象赋值
s2 = "A" ;
System.out.println(s1 == s2);//true,字符串数据储存在常量池中,同一数据的地址值相同。
//测试equals()方法
System.out.println("----------------------------");
Person p1 = new Person("Fun",23);
Person p2 = new Person("Fun",23);
System.out.println(p1.equals(p2));//false,执行Object类中的方法,与==作用相同,比较地址值
System.out.println(s1.equals(s2));//true,执行String类中重写的方法,比较实际值,
Moon moon = new Moon();
MyDate m1 = new MyDate(1,1,1999,moon);
MyDate m2 = new MyDate(1,1,2000,moon);
m2.setYear(1999);
System.out.println(m1.equals(m2));
m2 = null;
System.out.println(m1.equals(m2));
//toString()方法测试
Moon moon1 = new Moon();
System.out.println(moon1);
System.out.println(moon1.toString());
String k1 = "Key";
System.out.println(k1);
System.out.println(k1.toString());
System.out.println(m1.toString());
}
}
class MyDate{
private int day;
private int month;
private int year;
private String str = "公历";
private Moon moon;
public MyDate() {
super();
}
public MyDate(int day, int month, int year, Moon moon) {
super();
this.day = day;
this.month = month;
this.year = year;
this.moon = moon;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public Moon getMoon() {
return moon;
}
public void setMoon(Moon moon) {
this.moon = moon;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(this == obj) {
return true;
}
if(obj == null) {
return false;
}
if(obj instanceof MyDate) {
MyDate m = (MyDate)obj;
return this.day == m.day && this.month == m.month &&
this.year == m.year && this.str.equals(m.str) &&
this.moon.equals(m.moon);
//this.str.equals(m.str)不能改写为this.str == m.str。
//如果形参使用m.setStr(new String("非闰年"))的方式传入参数,地址值就会不同,使用 == 比较会返回false。
//如果形参使用m.setStr("非闰年")的方式传入,因为数据储存在常量池中,所以相同数据只有一个地址值,使用 == 比较会返回true
}else {
return false;
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString() + "\n" + getClass() + "[" + year + "年" + month + "月" + day + "日," + str + "]";
}
}
class Moon{
private int cycle = 28;
@Override
public boolean equals(Object obj) {//eclips自动重写的equals()方法
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Moon other = (Moon) obj;
if (cycle != other.cycle)
return false;
return true;
}
}