1. 程式人生 > >Java學習筆記(面向物件1)

Java學習筆記(面向物件1)

面向物件

1.何為面向物件

  • 面相物件是相對面向過程而言的
  • 面相物件和麵向過程都是一種思想
  • 面向過程
    • 強調功能行為
  • 面向物件
    • 將功能封裝進物件,強調具備了功能的物件。
  • 面向物件是基於面向過程的。

2.類與物件

  1. 類就是對現實生活中事物的描述;
    • 物件則是這類事物,實實在在存在的個體;
    • 描述類時,有屬性(成員變數)和行為(成員方法);
    • 成員變數與區域性變數
    • 成員變數作用於整個類中;
    • 區域性變數作用於函式中或者語句中;
    • 成員變數在堆記憶體中,因為物件的存在才在記憶體中存在;
    • 區域性變數在棧記憶體中

3.匿名物件

使用:

  • 當對物件的方法只調用一次,可以使用匿名物件來完成,這樣較為簡化;若對一個物件進行多個成員呼叫,必須給這個物件起個名字;
  • 可以將匿名物件作為實際引數進行傳遞。

4.封裝

  • 封裝:指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式;
  • 好處:
    1. 將變化隔離
      • 便於使用
      • 提高重用性
      • 提高安全性
  • 封裝原則:
    1. 將不需要對外提供的內容都隱藏起來
      • 把屬性都隱藏,提供公共方法對其訪問

4.1 private

私有隻在本類中有效

一個成員變數(私有屬性)通常對應兩個訪問方式,一個是設定set一個是獲取get;
區域性變數必須初始化值,成員變數不需要初始化值,有系統預設

5.建構函式

5.1特點:

  1. 函式名與類名相同
    • 不用定義返回值型別
    • 不可以寫return語句

5.1作用:

給物件進行初始化。即物件一建立,就會呼叫與之對應的建構函式

5.3注意:

  1. 預設建構函式的特點;
    • 多個建構函式是一過載的方式存在的;
    • 當一個類中沒有定義建構函式,系統會預設給該類加入一個空引數的建構函式;
    • 建構函式在物件一建立就執行,給物件初始化,而一般函式是物件呼叫才執行,給物件新增物件具備的功能;
    • 一個物件建立,建構函式只執行一次,而一般方法可以被該物件呼叫多次;
    • 當分析事物時,該事物存在具備一些特性或者行為,那麼將這些內容定義在建構函式中;

5.4構造程式碼塊

  • 作用:給物件進行初始化,物件一建立就執行,並優先於建構函式執行

構造程式碼塊是給所有物件進行統一初始化,而建構函式是給對應的物件初始化

6.關鍵字

6.1 this關鍵字

作用:用於區分區域性變數和成員變數同名的情況;

this代表本類的物件;哪個物件呼叫this所在的函式,this就代表哪個物件;即this代表它所在函式所屬物件的引用

應用:

  1. 當定義類中功能時,該函式內部要用到呼叫該函式的物件時,這時用this來表示物件
    • 建構函式之間呼叫只能使用this關鍵字;
    • this的呼叫必須放在建構函式第一句,因為初始化要先執行;

6.2 static關鍵字

6.2.1 作用:

  1. 修飾符,用於修飾成員(成員變數,成員函式),被修飾後成為類變數;
    • 當成員被靜態修飾後,便多一個呼叫方式,除了可以被物件呼叫外,還可以直接被類名呼叫(類名.靜態變數)。

6.2.2 特點:

  1. static修飾的變數存在於隨著類的載入而載入,隨著類的消失而消失;說明其生命週期最長;
    • 優先於物件存在,即靜態是先存在的,物件是後存在的;
    • 被所有物件共享
    • 可直接被類名所呼叫

ps:例項變數與類變數的區別

  1. 存放位置
    類變數隨著類的載入而存在於方法區中;例項變數隨著物件的建立而存在於堆記憶體中;
    • 生命週期
      類變數生命週期最長,隨著類的消失而消失;
      例項變數生命週期隨著物件消失而消失;

6.2.3 使用注意事項:

  1. 靜態方法只能訪問靜態成員;非靜態方法既可以訪問靜態也可以訪問非靜態;
  2. 靜態方法中不可以定義this,super關鍵字,因為靜態優先於物件存在;
  3. 主函式為靜態。

6.2.4 優缺點:

  • 優點:
    • 對物件的共享資料進行單獨空間的儲存,節省空間,沒必要對每一個物件都儲存一份;
    • 可以直接被類名呼叫。
  • 缺點:
    • 生命週期過長;
    • 訪問出現侷限性(只能訪問靜態)。

6.2.5 何時使用:

  1. 何時定義靜態變數(類變數):當物件出現共享資料時,該資料被靜態所修飾,物件中的特有資料要定義成非靜態存在於堆記憶體中;

    • 只要資料在物件中都是不同的,就是物件的特有資料,必須儲存在物件中,是非靜態的。如果是相同的資料,物件不需要做修改,只需要使用即可,不需要儲存在物件中,定義成靜態的。
  2. 何時定義靜態函式:當功能內部沒有訪問非靜態資料(物件的特有資料),則該功能可以定義為靜態的。

    • 簡單點說,從原始碼看,該功能是否需要訪問非靜態的成員變數,如果需要,該功能就是非靜態的。如果不需要,就可以將該功能定義成靜態的。當然,也可以定義成非靜態,但是非靜態需要被物件呼叫。如果沒有訪問特有資料的方法,該物件的建立是沒有意義。

6.2.5 靜態的應用:

  • 每個應用程式中都有共性的功能,可以將這些功能進行抽取,獨立封裝,以重複使用

6.2.5 靜態程式碼塊:

特點:

  1. 隨著類的載入而執行,只執行一次,用於給類進行初始化;
  2. 優先於主函式執行;(如例1)
  3. 只有類 載入的時候才會執行靜態程式碼塊。(如例2)

例1

class StaticCode{
static
{
System.out.print(“a”);
}
}

class StaticCodeDemo{
    static
    {
        System.out.print("b");
    }   
    public static void main(String[] args)  
    {
        new StaticCode();
        new StaticCode();
        System.out.print("over");
    }
    static{
        System.out.print("c");
    }
}

輸出結果:bcaover

例2

class StaticCode{
static
{
System.out.print(“a”);
}
public static void show(){
System.out.print(“show run”);
}
}

class StaticCodeDemo{
    static
    {
        System.out.print("b");
    }   
    public static void main(String[] args)  
    {
        StaticCode s = null;
    }
    static{
        System.out.print("c");
    }
}

輸出結果:bcover

By the way說一下構造程式碼塊,如下例:

class StaticCode{
int num = 9;
StaticCode()//建構函式,給對應物件初始化
{
System.out.println(“b”);
}

    static
    {
        System.out.print("a");//靜態程式碼塊,給類初始化
    }
    {
        System.out.print("c"+9);//構造程式碼塊,給物件初始化
    }

    StaticCode(int x)//建構函式,給對應物件初始化
    {
        System.out.println("d"+x);
    }
    public static void show(){
        System.out.print("show run");
    }
}

class StaticCodeDemo{   
    public static void main(String[] args)  
    {
         new StaticCode(4);
    }
    static{
        System.out.print("e");
    }
}

輸出結果:eac9d4

7.main函式

public static void mian(String[] args);

  • 主函式是一個特殊的函式,作為程式的入口,可以被jvm(虛擬機器)呼叫。

  • 主函式的定義:

    1. public:代表該函式訪問許可權是最大的;
    2. static:代表主函式隨著類的載入就已經存在了;
    3. void:主函式沒有具體返回值;
    4. main:不是關鍵字,但是是一個特殊字元,可以被jvm識別;
    5. (String[] args):函式的引數,引數型別是一個字串型別陣列,該陣列中的元素是字串;
    6. 主函式為固定模式,jvm唯一識別格式
    7. args為引數名,可更改;
  • jvm在呼叫主函式時,傳入的是new String[0];

    例如:

    class MainDemo
    {
    public static void main(String[] args){
    System.out.println(args);
    }
    }
    執行結果:

例如1:


class MainDemo
{
public static void main(String[] args){
System.out.println(args.length);
System.out.println(args.[0]);
}
}
編譯後輸入數值:

例如2:


class MainDemo
{
public static void main(String[] args){
String[] arr ={“hehe”,”haha”,”heihei”,”xixi”};
MainTest.main(arr);
}
}
class MainTest(){
public static void main(String[] args){
for(int x=0; x

相關推薦

Java學習筆記面向物件1

面向物件 1.何為面向物件 面相物件是相對面向過程而言的 面相物件和麵向過程都是一種思想 面向過程 強調功能行為 面向物件 將功能封裝進物件,強調具備了功能的物件。 面向物件是基於面向過程的。 2.類與物件 類就是對現實生活中事物的

java學習02面向物件基礎

1.物件可以簡單認識成一個記憶體塊,一個區域。 2.記憶體分為:棧記憶體,堆記憶體,方法區(堆的一部分,包括類的資訊,靜態方法,靜態變數,字串常量),這點對理解很多東西都很有用 3.包先簡單理解成一個資料夾(域名倒著寫) 4.面向物件: 繼承: 類只能單繼承,接口才可以多繼承 子類建構函式呼叫前預

JAVA學習筆記面向物件

        作為初入開發的萌新,我根據黑馬程式設計師的教學視訊和課件整理總結,記錄下自己的JAVA學習,方便鞏固和交流。每篇筆記首先回顧知識點,然後貼上程式碼和執行結果,最後進行小結。若有不正之處或者有疑問,歡迎指出,望與各位共同進步。1.類的定義修飾符    class

java基礎筆記面向物件

一、封裝 使用者直接對類內部的屬性進行操作會導致資料的錯誤、混亂或安全性問題。可以通過宣告為private ,再提供get/set 方法進行訪問。 二、過載 在一個類中允許同事存在一個以上同名函式,只要引數個數,引數型別 不同即可。 三、this 關鍵詞 是當前類的一個物

Java學習筆記第一次課

stdio.h println 標準 ant 方法參數 ann 控制 大小寫 protect 1.簡單的Java語言模板 package inclass1_1; import java.io.*;//導入包(相當於c語言的#include<stdio.h>)

Java學習筆記trim()與substring()

tro 字符串 n) substr java bsp log 執行 spa 了解到這兩個函數是因為在做OJ的題目時遇到了這樣的情況: 標註輸入為:4 abc 兩種數據用空格分隔開,但找不到只讀一個字符的方法(吃掉中間的空格) trim(): 去掉字符串首尾的空格 St

Java學習筆記二十一:類型轉換和instanceof關鍵字

方法 png true feed out 實例 strong 運算符 nbsp 基本數據類型轉換: 自動類型轉換:把大類型的數據賦值給大類型的變量(此時的大小指的是容量的範圍) 1 byte b = 12; //byte是一個字節 2 int i = b; //i

Java學習筆記二十二:打包程序

lean 技術 打包成 skip 運行 ava div com bsp 加入一個程序測試完畢,我們就可以將它打包,就可以放到服務器上運行了 找到左下角的終端 點擊 輸入命令: mvnw clean package -DskipTests=true clean:清除以

【原創】python學習筆記自學階段1-- 自學,爬蟲備註--先佔坑

  Request:使用者將自己的資訊通過瀏覽器(socket client)傳送給伺服器(socket server) Response:伺服器接收請求,分析使用者發來的請求資訊,然後返回資料(返回的資料中可能包含其他連結,如:圖片,js,css等) ps:瀏覽器在接收Res

【原創】python學習筆記進階1-- 自學,爬蟲備註--先佔坑

  Request:使用者將自己的資訊通過瀏覽器(socket client)傳送給伺服器(socket server) Response:伺服器接收請求,分析使用者發來的請求資訊,然後返回資料(返回的資料中可能包含其他連結,如:圖片,js,css等) ps:瀏覽器在接收Res

JAVA學習筆記併發程式設計 - 玖- 多執行緒併發拓展

文章目錄 死鎖 概念 產生條件 例子 併發最佳實踐 Spring與執行緒安全 死鎖 概念 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象

JAVA學習筆記併發程式設計 - 捌- 執行緒池

文章目錄 執行緒池 執行緒池的好處 執行緒池原理 執行緒池狀態 執行緒池常用方法 使用ThreadPoolExecutor建立執行緒池 執行緒池 執行緒資源必須通過執行緒池提供,不允許在應用中

JAVA學習筆記併發程式設計 - 柒- J.U.C元件2

J.U.C-FutureTask 在Java中一般通過繼承Thread類或者實現Runnable介面這兩種方式來建立執行緒,但是這兩種方式都有個缺陷,就是不能在執行完成後獲取執行的結果,因此Java 1.5之後提供了Callable和Future介面,通過它們就可以在任務執行完畢之後得到

JAVA學習筆記併發程式設計 - 陸- J.U.C之AQS及其相關元件詳解

文章目錄 J.U.C之AQS-介紹 關於AQS裡的state狀態: 關於自定義資源共享方式: 關於同步器設計: 如何使用: 具體實現的思路: 設計思想: 基於AQS的同步元件: AQS小結:

java學習筆記面向物件

成員變數與區域性變數的區別: /* 成員變數和區域性變數的區別: 1:在類中的位置不同 成員變數:在類中方法外 區域性變數:在方法定義中,或者方法宣告上 2:在記憶體中的位置不同 成員變數:在堆記憶體 區域性變數:在棧記憶體 3:生命週期不同 成員變數

java學習筆記第11天

成員變數和區域性變數的區別:   作用域不同:區域性變數的作用域僅限於定義它的方法;成員變數的作用域在這個類內部都是可見的; 初始值不同:java會給成員變數一個初始值,java不會給區域性變數賦予初始值; 在同一個方法中,不允許有同名區域性變數;在不同的方法

Java學習筆記2018.4.7

       介紹一下我的情況,我們學校我們這一屆沒有開java課程,我們是直接學的Android,學校也開設了c,c++,php,但是學的也就馬馬虎虎,打算花2——3個月學java一下。 一直沒更新,一直在看網課,要用手打和複習才行,光看不練很快會忘的!

python學習日記面向物件——繼承

什麼是繼承 繼承是一種建立新類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類   python中類的繼承分為:單繼承和多繼承 class ParentClass1: #定義父類 pass class Paren

java學習筆記9-IO流

1.FileWriter package daigua8; import java.io.FileWriter; import java.io.IOException; /* 輸出流寫資料的步驟: * A:建立輸出流物件 * B:呼叫輸出流物件的寫資料的方法 * C:釋放

java學習筆記11-static關鍵字

1.static關鍵字 1.1 說明: 被static修飾的成員變數屬於類,不屬於這個類的某個物件。(也就是說,多個物件在訪問或修改static修飾的成員變數時,其中一個物件將static成員變數值進行了修改,其他物件中的static成員變數值跟著改變,即多個物件共享同一個static成員變數)