1. 程式人生 > >類與物件的問題

類與物件的問題

1、

早期經常這樣定義變數 int value=100;

前面的示例中這樣定義變數 MyClass obj = new MyClass();

第一種僅僅定義了一個變數併為它賦了一個值。而第二種是定義了一個類的物件,通過這個物件可以呼叫該類中的所有內容。

2、

package jiecheng;

public class Test {
public static void main(String[] args)
{
Foo obj1=new Foo();
Foo obj2=new Foo();
System.out.println(obj1==obj2);
}
}
class Foo
{
int value=100;
}

執行該程式碼結果為false,我們肯定認為結果為true, 

當“==”施加於原始資料型別變數時,是比較變數所儲存的資料是否相等 當“==”施加於引用型別變數時,是比較這兩個變數是否引用同一物件。 引用代表地址,所以“==”實際上相當於比較兩個引用型別變數中儲存的物件地址是否相同。

3、如何比較兩個物件的“內容”是否一樣?    

Demo: ObjectEquals.java

很明顯 ==的為false,equals為true。

4、Equals( )方法從哪來?

當你定義一個類的時候,

如果不顯式指明它的“父親”類是哪個,則預設是Object。

Object是Java的最頂層基類,其中定義了equals( )方法。

5、class MyTestClass

{

public MyTestClass(int initValue)

{

Value=initValue;

}

}

該函式名與類名相同,為建構函式。

6、

public class TESTcc {
public static void main(String[] args)
{
Foo obj=new Foo();
}
}
class Foo
{
int value;
public Foo(int initValue)
{
value=initValue;
}
}

該程式碼無法編譯的原因是,Foo類中只有一個建構函式,如果光定義Foo的物件obj,是無法編譯的,如果改成Foo obj=new Foo(0)的話,就沒有問題了,這是呼叫了類中的建構函式。

7、編譯InitializeBlockDemo。

結果為100  300.

在主函式中呼叫時,還是主要呼叫剛定義的時候的值。

8、TestStaticInitializeBlock.java

在主函式中呼叫時,先呼叫最小輩分的類的第一個函式,然後依次往後呼叫中間輩分第一個,最大輩分的一個,之後直接呼叫最小輩分剩餘的函式,中間輩分剩餘函式,最大輩分剩餘函式。