類與物件的問題
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
在主函式中呼叫時,先呼叫最小輩分的類的第一個函式,然後依次往後呼叫中間輩分第一個,最大輩分的一個,之後直接呼叫最小輩分剩餘的函式,中間輩分剩餘函式,最大輩分剩餘函式。