p5OO 第五章 面向對象 (基礎篇) Notes
(1), Constructor / this / String
String str1 = "hello"; 解釋 : 是把一個在堆內存空間的使用權給了 str1 對象。
String str2 = "hello"; str1 == str2 是 true
String 字符串的內容不可改變
(2), Java 經常使用的內存區域
1), 棧內存空間 2), 堆內存空間
3), 全局數據區 4), 全局代碼區
(3), static 類屬性, 類方法
非 static 聲明的方法能夠去調用 static 聲明的屬性或方法。
static 聲明的方法不能調用 非 static 聲明的屬性或方法。
(4), 理解 main 方法 public static void main(String[] args)
1), public:表示此方法能夠被外部調用
2), static : 表示此方法能夠由類名稱直接調用
3), void : 主方法是程序的起點,全部不須要任何的返回值
4), main : 系統規定好默認調用的方法名稱,執行時默認找到 main 方法名稱
5), String args[] 運行時參數,參數傳遞的形式是 : 「java類名稱」, 參數1, 參數2, ...
(5), 代碼塊
1), 普通代碼塊 : 直接在方法或者語句中定義的代碼塊
2), 構造塊 : 直接寫在類中的代碼塊
3), 靜態代碼塊 : 使用 static 關鍵字聲明的代碼塊
4), 同步代碼塊
總結 : 靜態代碼塊優先於主方法執行,而在類中定義的靜態代碼塊會優先於構造塊執行,並且無論有多少個對象產生,靜態代碼塊只執行一次。
(6), 私有構造方法 - 單例
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
(7), 內部類 http://blog.csdn.net/robbyo/article/details/26233993java
1 package com.qunar.basicJava.javase.p5OO; 2 3 /** 4 * Author: libin.chen@qunar.com Date: 14-5-18 21:35 5 * Knowledg : Constructor / this 6 */ 7 public class Person { 8 private String name; 9 private int age; // default 0 10 11 public Person() { 12 System.out.println("一個新的 Person 對象被實例化"); 13 } 14 15 public Person(String name) { 16 this.name = name; // this 表示當前對象 17 } 18 19 public Person(String name, int age) { 20 this(); // this 調用構造函數 21 this.setName(name); 22 this.setAge(age); 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 public void setName(String name) { 30 this.name = name; 31 } 32 33 public int getAge() { 34 return age; 35 } 36 37 public void setAge(int age) { 38 if (age >= 0 && age < 150) { 39 this.age = age; 40 } 41 } 42 43 public void tell() { 44 System.out.println("姓名 : " + this.getName()); 45 System.out.println("年齡 : " + this.getAge()); 46 } 47 48 public static void main(String[] args) { 49 Person person = new Person("RoBY", -20); // 若是沒寫構造函數,則默認有一個無參構造函數,寫了則不會存在默認的Constructor。 50 person.tell(); 51 } 52 } 53