Java學習筆記(面向物件1)
面向物件
1.何為面向物件
- 面相物件是相對面向過程而言的
- 面相物件和麵向過程都是一種思想
- 面向過程
- 強調功能行為
- 面向物件
- 將功能封裝進物件,強調具備了功能的物件。
- 面向物件是基於面向過程的。
2.類與物件
- 類就是對現實生活中事物的描述;
- 物件則是這類事物,實實在在存在的個體;
- 描述類時,有屬性(成員變數)和行為(成員方法);
- 成員變數與區域性變數
- 成員變數作用於整個類中;
- 區域性變數作用於函式中或者語句中;
- 成員變數在堆記憶體中,因為物件的存在才在記憶體中存在;
- 區域性變數在棧記憶體中
3.匿名物件
使用:
- 當對物件的方法只調用一次,可以使用匿名物件來完成,這樣較為簡化;若對一個物件進行多個成員呼叫,必須給這個物件起個名字;
- 可以將匿名物件作為實際引數進行傳遞。
4.封裝
- 封裝:指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式;
- 好處:
- 將變化隔離
- 便於使用
- 提高重用性
- 提高安全性
- 將變化隔離
- 封裝原則:
- 將不需要對外提供的內容都隱藏起來
- 把屬性都隱藏,提供公共方法對其訪問
- 將不需要對外提供的內容都隱藏起來
4.1 private
私有隻在本類中有效
一個成員變數(私有屬性)通常對應兩個訪問方式,一個是設定set一個是獲取get;
區域性變數必須初始化值,成員變數不需要初始化值,有系統預設
5.建構函式
5.1特點:
- 函式名與類名相同
- 不用定義返回值型別
- 不可以寫return語句
5.1作用:
給物件進行初始化。即物件一建立,就會呼叫與之對應的建構函式
5.3注意:
- 預設建構函式的特點;
- 多個建構函式是一過載的方式存在的;
- 當一個類中沒有定義建構函式,系統會預設給該類加入一個空引數的建構函式;
- 建構函式在物件一建立就執行,給物件初始化,而一般函式是物件呼叫才執行,給物件新增物件具備的功能;
- 一個物件建立,建構函式只執行一次,而一般方法可以被該物件呼叫多次;
- 當分析事物時,該事物存在具備一些特性或者行為,那麼將這些內容定義在建構函式中;
5.4構造程式碼塊
- 作用:給物件進行初始化,物件一建立就執行,並優先於建構函式執行
構造程式碼塊是給所有物件進行統一初始化,而建構函式是給對應的物件初始化
6.關鍵字
6.1 this關鍵字
作用:用於區分區域性變數和成員變數同名的情況;
this代表本類的物件;哪個物件呼叫this所在的函式,this就代表哪個物件;即this代表它所在函式所屬物件的引用
應用:
- 當定義類中功能時,該函式內部要用到呼叫該函式的物件時,這時用this來表示物件
- 建構函式之間呼叫只能使用this關鍵字;
- this的呼叫必須放在建構函式第一句,因為初始化要先執行;
6.2 static關鍵字
6.2.1 作用:
- 修飾符,用於修飾成員(成員變數,成員函式),被修飾後成為類變數;
- 當成員被靜態修飾後,便多一個呼叫方式,除了可以被物件呼叫外,還可以直接被類名呼叫(類名.靜態變數)。
6.2.2 特點:
- static修飾的變數存在於隨著類的載入而載入,隨著類的消失而消失;說明其生命週期最長;
- 優先於物件存在,即靜態是先存在的,物件是後存在的;
- 被所有物件共享
- 可直接被類名所呼叫
ps:例項變數與類變數的區別
- 存放位置
類變數隨著類的載入而存在於方法區中;例項變數隨著物件的建立而存在於堆記憶體中;
- 生命週期
類變數生命週期最長,隨著類的消失而消失;
例項變數生命週期隨著物件消失而消失;
6.2.3 使用注意事項:
- 靜態方法只能訪問靜態成員;非靜態方法既可以訪問靜態也可以訪問非靜態;
- 靜態方法中不可以定義this,super關鍵字,因為靜態優先於物件存在;
- 主函式為靜態。
6.2.4 優缺點:
- 優點:
- 對物件的共享資料進行單獨空間的儲存,節省空間,沒必要對每一個物件都儲存一份;
- 可以直接被類名呼叫。
- 缺點:
- 生命週期過長;
- 訪問出現侷限性(只能訪問靜態)。
6.2.5 何時使用:
何時定義靜態變數(類變數):當物件出現共享資料時,該資料被靜態所修飾,物件中的特有資料要定義成非靜態存在於堆記憶體中;
- 只要資料在物件中都是不同的,就是物件的特有資料,必須儲存在物件中,是非靜態的。如果是相同的資料,物件不需要做修改,只需要使用即可,不需要儲存在物件中,定義成靜態的。
何時定義靜態函式:當功能內部沒有訪問非靜態資料(物件的特有資料),則該功能可以定義為靜態的。
- 簡單點說,從原始碼看,該功能是否需要訪問非靜態的成員變數,如果需要,該功能就是非靜態的。如果不需要,就可以將該功能定義成靜態的。當然,也可以定義成非靜態,但是非靜態需要被物件呼叫。如果沒有訪問特有資料的方法,該物件的建立是沒有意義。
6.2.5 靜態的應用:
- 每個應用程式中都有共性的功能,可以將這些功能進行抽取,獨立封裝,以重複使用
6.2.5 靜態程式碼塊:
特點:
- 隨著類的載入而執行,只執行一次,用於給類進行初始化;
- 優先於主函式執行;(如例1)
- 只有類 載入的時候才會執行靜態程式碼塊。(如例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(虛擬機器)呼叫。
主函式的定義:
- public:代表該函式訪問許可權是最大的;
- static:代表主函式隨著類的載入就已經存在了;
- void:主函式沒有具體返回值;
- main:不是關鍵字,但是是一個特殊字元,可以被jvm識別;
- (String[] args):函式的引數,引數型別是一個字串型別陣列,該陣列中的元素是字串;
- 主函式為固定模式,jvm唯一識別格式
- 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成員變數)