1.面向對象與面向過程 java
(1).都是解決問題的思惟方式,都是代碼組織的方式。數組
(2).解決簡單問題可使用面向過程網絡
(3).解決複雜問題:宏觀上使用面向對象把握,微觀處理上仍然是面向過程。dom
2.面向對象思考方式函數
遇到複雜問題,先從問題中找名詞,而後確立這些名詞哪些能夠做爲類,再根據問題需求肯定類的屬性和方法,肯定類之間的關係。工具
一個經典的比喻:面向對象是蓋澆飯、面向過程是蛋炒飯。蓋澆飯的好處就是「菜」「飯」分離,從而提升了製做蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是「可維護性」比較好,「飯」 和「菜」的耦合度比較低。this
3.面向對象內存分析 spa
對象空間的分配:使用new關鍵字建立對象便可.net
對象空間的釋放:將對象賦值null便可。垃圾回收器將負責回收全部」不可達」對象的內存空間線程
棧的特色以下:
(1). 棧描述的是方法執行的內存模型。每一個方法被調用都會建立一個棧幀(存儲局部變量、操做數、方法出口等)
(2). JVM爲每一個線程建立一個棧,用於存放該線程執行方法的信息(實際參數、局部變量等)
(3). 棧屬於線程私有,不能實現線程間的共享!
(4). 棧是由系統自動分配,速度快!棧是一個連續的內存空間!
堆的特色以下:
(1). 堆用於存儲建立好的對象和數組(數組也是對象)
(2). JVM只有一個堆,被全部線程共享
(3). 堆是一個不連續的內存空間,分配靈活,速度慢!
方法區(又叫靜態區)特色以下:
(1). JVM只有一個方法區,被全部線程共享!
(2). 方法區實際也是堆,只是用於存儲類、常量相關的信息!
(3). 用來存放程序中永遠是不變或惟一的內容。(類信息【Class對象】、靜態變量、字符串常量等)
4.構造方法
構造器雖然有返回值,可是不能定義返回值類型(返回值的類型確定是本類),不能在構造器裏使用return返回某個值。
重載:形參類型、形參個數、形參順序不一樣
1 public class User { 2 int id; // id 3 String name; // 帳戶名 4 String pwd; // 密碼 5 public User() { 6 7 } 8 public User(int id, String name) { 9 super(); 10 this.id = id; 11 this.name = name; 12 } 13 public User(int id, String name, String pwd) { 14 this.id = id; 15 this.name = name; 16 this.pwd = pwd; 17 } 18 public static void main(String[] args) { 19 User u1 = new User(); 20 User u2 = new User(101, "張三"); 21 User u3 = new User(100, "李四", "1234"); 22 } 23 }
5.this
建立一個對象分爲以下四步:
(1). 分配對象空間,並將對象成員變量初始化爲0或空
(2). 執行屬性值的顯示初始化
(3). 執行構造方法
(4). 返回對象的地址給相關的變量
this的本質就是「建立好的對象的地址」! 因爲在構造方法調用前,對象已經建立。所以,在構造方法中也可使用this表明「當前對象」 。
this不能用於static方法中。
6.static
在static方法中不可直接訪問非static的成員。
static修飾的成員變量和方法,從屬於類。
普通變量和方法從屬於對象的。
1 public class User2 { 2 int id; // id 3 String name; // 帳戶名 4 String pwd; // 密碼 5 6 static String company = "阿里巴巴"; // 公司名稱 7 8 9 public User2(int id, String name) { 10 this.id = id; //不寫this,沒法區分局部變量id和成員變量id 11 this.name = name; 12 } 13 14 public void login() { 15 printCompany(); 16 System.out.println(company); 17 System.out.println("登陸:" + name); 18 } 19 20 public static void printCompany() { 21 // login();//調用非靜態成員,編譯就會報錯 22 System.out.println(company); 23 } 24 25 public static void main(String[] args) { 26 User2 u = new User2(111, "小七"); 27 User2.printCompany(); 28 User2.company = "阿里巴巴"; 29 User2.printCompany(); 30 } 31 }
7.靜態初始化塊
構造方法用於對象的初始化!靜態初始化塊,用於類的初始化操做!在靜態初始化塊中不能直接訪問非static成員。
靜態初始化塊執行順序:
(1). 上溯到Object類,先執行Object的靜態初始化塊,再向下執行子類的靜態初始化塊,直到咱們的類的靜態初始化塊爲止。
(2). 構造方法執行順序和上面順序同樣。
1 public class User3 { 2 int id; //id 3 String name; //帳戶名 4 String pwd; //密碼 5 static String company; //公司名稱 6 static { 7 System.out.println("執行類的初始化工做"); 8 company = "阿里巴巴"; 9 printCompany(); 10 } 11 public static void printCompany(){ 12 System.out.println(company); 13 } 14 public static void main(String[] args) { 15 User3 u3 = new User3(); 16 } 17 }
8.package
1. 一般是類的第一句非註釋性語句。
2. 包名:域名倒着寫便可,再加上模塊名,便於內部管理類。
1 package com.chb.test
9.包
若是咱們要使用其餘包的類,須要使用import導入,從而能夠在本類中直接經過類名來調用,不然就須要書寫類的完整包名和類名。import後,便於編寫代碼,提升可維護性。
JDK中的主要包 |
|
Java中的經常使用包 |
說明 |
java.lang |
包含一些Java語言的核心類,如String、Math、Integer、System和Thread,提供經常使用功能。 |
java.awt |
包含了構成抽象窗口工具集(abstract window toolkits)的多個類,這些類被用來構建和管理應用程序的圖形用戶界面(GUI)。 |
java.net |
包含執行與網絡相關的操做的類。 |
java.io |
包含能提供多種輸入/輸出功能的類。 |
java.util |
包含一些實用工具類,如定義系統特性、使用與日期日曆相關的函數。 |
(1). Java會默認導入java.lang包下全部的類,所以這些類咱們能夠直接使用。
(2). 若是導入兩個同名的類,只能用包名+類名來顯示調用相關類:
(3).靜態導入(static import)是在JDK1.5新增長的功能,其做用是用於導入指定類的靜態屬性,這樣咱們能夠直接使用靜態屬性。
1 package com.chb; 2 //如下兩種靜態導入的方式二選一便可 3 import static java.lang.Math.*;//導入Math類的全部靜態屬性 4 import static java.lang.Math.PI;//導入Math類的PI屬性 5 6 public class Test2{ 7 public static void main(String [] args){ 8 System.out.println(PI); 9 System.out.println(random()); 10 } 11 }