Java SE 學習筆記--Lesson 03

Java SE Lesson 3

 

1. 接口中所聲明的方法都是抽象方法。接口中的方法都是public的。

 

2. 接口中也可以定義成員變量。接口中的成員變量都是publicfinalstatic的。

 

public interface InterfaceTest

{

       int a = 1;

}

 

3. 一個類不能既是final,又是abstract的。因爲abstract的主要目的是定義一種約定,讓子類去實現這種約定,而final表示該類不能被繼承,這樣abstract希望該類可以被繼承而final明確說明該類不能被繼承,兩者矛盾。因此一個類不能既是final的,又是abstract的。

 

public abstract final Test//編譯錯誤,一個類不能既是final,又是abstract

{

 

}

 

4. Design Pattern(設計模式)。單例模式(Singleton):表示一個類只會生成唯一的一個對象。

 

public class SingletonTest

{

       public static void main(String[] args)

       {

              Singleton singleton = Singleton.getInstance();

              Singleton singleton2 = Singleton.getInstance();

 

              System.out.println(singleton == singleton2);

       }

}

 

 

class Singleton

{

       private static Singleton singleton  = new Singleton();;

      

       private Singleton()

       {

             

       }

 

       public static Singleton getInstance()   //因爲private,使用static讓外部可以直接用類名調用

       {

              return singleton;

       }

 

 

}

 

5. 包(package)。用於將完成不同功能的類分門別類,放在不同的目錄(包)下。包的命名規則:將公司域名反轉作爲包名。www.shengsiyuan.comcom.shengsiyuan(包名),對於包名:每個字母都需要小寫。如果定義類的時候沒有使用package,那麼Java就認爲我們所定義的類位於默認包裏面(default package)。

 

package com.shengsiyuan;  //包名

 

public class PackageTest

{

       public static void main(String[] args)

              {

                     System.out.println(“hello word!”);

}

}

 

6. 編譯帶有package聲明的Java源文件有兩種方式:

a) 直接編譯,然後根據類中所定義的包名,逐一手工建立目錄結構,最後將生成的class文件放到該目錄結構中(很少使用,比較麻煩)。

b) 使用編譯參數–d,方式爲javac d . 源文件.java這樣在編譯後,編譯會自動幫助我們建立好包所對應的目錄結構。

 

7. 有兩個包名,分別是aa.bb.ccaa.bb.cc.dd,那麼我們稱後者爲前者的子包。

 

 

8. 導入(import,將使用package分離的各個類導入回來,讓編譯器能夠找到所需要的類。

 

9. import的語法import  com.shengsiyuan.PackageTest;

 

10. import com.shengsiyuan.*,表示導入com.shengsiyuan包下面的所有類。

 

11. import aa.bb.*並不會導入aa.bb.cc包下面的類。這時需要這樣寫:

import aa.bb.*;

import aa.bb.cc.*;

 

例:

Import com.shengsiyuan.test.*;

 

public class ImportTest

{

       public static void main(String[] args)

       {

              System.out.println(PackageTest.i);

       }

}

 

12. 關於packageimportclass的順序問題:

a) 首先需要定義包(package),可選

b) 接下來使用import進行導入,可選

c) 然後纔是classinterface的定義。

 

13. 如果兩個類在同一個包下面,那麼則不需要導入,直接使用即可。

 

 

14. 訪問修飾符(access modifier)。

1 public(公共的):被public所修飾的屬性和方法可以被所有類訪問。

2 protected(受保護的):被protected所修飾的屬性和方法可以在類內部、相同包以及該類的子類所訪問。

3 private(私有的):被private所修飾的屬性和方法只能在該類內部使用

4)默認的(不加任何訪問修飾符):在類內部以及相同包下面的類所使用。

 

 

15.  instanceof:判斷某個對象是否是某個類的實例。語法形式:引用名 instanceof 類名(接口名),返回一個boolean值。

 

public class InstanceofTest

{

       public static void main(String[] args)

       {

              People people = new Man();

 

              System.out.println(people instanceof People); //結果爲true,因爲ManPeople的子類,根據繼承,子類就是父類,因此Man也可以看作是People的實例。

 

       }

}

 

class People

{

 

}

 

class Man extends People

{

 

}

 

 

16. People people = new Man();

 

17.  System.out.println(people instanceof People); //結果爲true,因爲ManPeople的子類,根據繼承,子類就是父類,因此Man也可以看作是People的實例。

 

 

18. 相等性的比較(==

 

1)對於原生數據類型來說,比較的是左右兩邊的值是否相等。

2)對於引用類型來說,比較左右兩邊的引用是否指向同一個對象,或者說左右兩邊的引用地址是否相同。

 

 

19.  java.lang.Object類。java.lang包在使用的時候無需顯式導入,編譯時由編譯器自動幫助我們導入。

 

20. API Application Programming Interface),應用編程接口。

 

21. 當打印引用時,實際上會打印出引用所指對象的toString()方法的返回值,因爲每個類都直接或間接地繼承自Object,而Object類中定義了toString(),因此每個類都有toString()這個方法。

 

22. 關於進制的表示:16進制,逢16進一,16進制的數字包括:09A,B,C,D,E,F

 

public class ObjectTest

{

       public static void main(String[] args)

       {

              Object object = new Object();

 

              System.out.println(object);

              System.out.println(object.toString());

 

              String str = "aaa";

 

              System.out.println(str);

              System.out.println(str.toString());

 

              Student student = new Student();

 

              System.out.println(student);

              System.out.println(student.toString());

 

       }

}

 

class Student extends Object

{

       public String toString()

       {

              return "Hello World";

       }

}

 

 

 

 

23. equals()方法,該方法定義在Object類當中,因此Java中的每個類都具有該方法,對於Object類的equals()方法來說,它是判斷調用equals()方法的引用與傳進來的引用是否一致,即這兩個引用是否指向的是同一個對象。對於Object類的equals()方法來說,它等價於==

 

24.對於String類的equals()方法來說,它是判斷當前字符串與傳進來的字符串的內容是否一致。

 

25. 對於String對象的相等性判斷來說,請使用equals()方法,而不要使用==

 

public class StringTest

{

       public static void main(String[] args)

       {

              String str = new String("aa");

              String str2 = new String("aa");

 

              System.out.println(str.equals(str2));

 

              String str3 = "aa";

              String str4 = "aa";

 

              System.out.println(str3.equals(str4));

 

              System.out.println("-----------------");

 

              Object object = new Object();

              Object object2 = new Object();

 

              System.out.println(object.equals(object2));

              System.out.println(object.equals(object));

 

              System.out.println("-----------------");

 

 

       }

}

 

 

 

­

 

public class EqualsTest

{

       public static void main(String[] args)

       {

              Student s1 = new Student("zhangsan");

              Student s2 = new Student("zhangsan");

 

              System.out.println(s1 == s2);

              System.out.println(s1.equals(s2));             

       }

}

 

class Student

{

       String name;

 

       public Student(String name)

       {

              this.name = name;

       }

      

       public boolean equals(Object anObject)

       {

              if(this == anObject)

              {

                     return true;

              }

 

              if(anObject instanceof Student)

              {

                     Student student = (Student)anObject;

                    

                     if(student.name.equals(this.name))

                     {

                            return true;

                     }

              }

 

              return false;

       }

 

}

 

 

26. String是常量,其對象一旦創建完畢就無法改變。當使用+拼接字符串時,會生成新的String對象,而不是向原有的String對象追加內容。

 

public class StringTest2

{

       public static void main(String[] args)

       {

              String s1 = "hello";

              String s2 = " world";

              String s3 = s1 + s2;

 

              System.out.println(s3);

       }

}

 

 

27. String Pool(字符串池)

 

28. String s = aaa;(採用字面值方式賦值)

1) 查找String Pool中是否存在“aaa”這個對象,如果不存在,則在String Pool中創建一個“aaa”對象,然後將String Pool中的這個“aaa”對象的地址返回來,賦給引用變量s,這樣s會指向String Pool中的這個“aaa”字符串對象

2) 如果存在,則不創建任何對象,直接將String Pool中的這個“aaa”對象地址返回來,賦給s引用。

 

 

29. String s = new String(“aaa”);

1) 首先在String Pool中查找有沒有“aaa”這個字符串對象,如果有,則不在String Pool中再去創建“aaa”這個對象了,直接在堆中(heap)中創建一個“aaa”字符串對象,然後將堆中的這個“aaa”對象的地址返回來,賦給s引用,導致s指向了堆中創建的這個“aaa”字符串對象。

 

2) 如果沒有,則首先在String Pool中創建一個“aaa“對象,然後再在堆中(heap)創建一個”aaa“對象,然後將堆中的這個”aaa“對象的地址返回來,賦給s引用,導致s指向了堆中所創建的這個”aaa“對象。

 

public class ObjectTest2

{

       public static void main(String[] args)

       {

              Object object = new Object();

              Object object2 = new Object();

 

              System.out.println(object == object2);//false

 

              System.out.println("----------------");

 

 

              String str = new String("aaa");

              String str2 = new String("aaa");

 

              System.out.println(str == str2);//false

 

              System.out.println("----------------");

 

              String str3 = "bbb";

              String str4 = "bbb";

 

              System.out.println(str3 == str4);//true

             

              System.out.println("----------------");

 

              String str5 = new String("ccc");

              String str6 = "ccc";

 

              System.out.println(str5 == str6);//lse

 

              System.out.println("----------------");

 

              String s = "hello";

              String s1 = "hel";

              String s2 = "lo";

 

              System.out.println(s == s1 + s2);//lse

 

              System.out.println("----------------");

 

              System.out.println(s == "hel" + "lo");//true

 

 

       }

}

 

 

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章