java 面向對象基本概念

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 }
相關文章
相關標籤/搜索