Java編程基礎階段筆記 day04 Java基礎語法(下)

?

面向對象編程

筆記Notes

  • 面向對象三條學習主線

  • 面向過程 VS 面向對象

  • 類和對象

  • 創建對象例子

  • 面向對象的內存分析

  • 類的屬性:成員變量

  • 成員變量 VS 局部變量

  • 類的方法

  • 方法的重載

  • 可變個數形參

  • 面向對象:封裝性

  • 訪問權限修飾符

  • 構造方法(構造器)

  • 給屬性賦值的方法

  • UML類圖

  • this 關鍵字

?

  • 面向對象學習主線

    • 類及類的成員:屬性,方法,構造器,代碼塊,內部類

    • 面向對象的三大特性:封裝性,繼承性,多態性

    • 其他關鍵字:this,super,interface,final,static......

  • 面向過程?vs?面向對象

    • 面向過程:強調的是功能行為

    • 面向對象 :強調具備了功能的對象? ? ? ? ? ? ? ?

  • 類和對象的區別

    • 類:抽象的(汽車設計模板)

    • 對象:具體的,類的實例(根據模板造出的汽車)

  • 類的成員:屬性和方法

    • 屬性 = field = 成員變量

    • (成員)方法 = 函數 = method

  • 面向對象的例子

1.創建一個類,并在類中提供必要的屬性和方法

2.由類派生出對象。(創建對象)

3.調用對象中的屬性和方法。(對象名.屬性名/方法名)

? ? ? ? ? ? ?//創建一個類

class?Person{

??????????//屬性

??????????String?name;

??????????int?age;

??????????char?sex;

??????????

??????????//方法

??????????public?void?run(){

???????????????????System.out.println(name?+?"跑起來");

??????????}

??????????

??????????public?void?say(){

???????????????????System.out.println(name?+?"今年"?+?age);

??????????}

}

? ? // main 方法中

???????????????????Person?person?=?new?Person();

???????????????????//調用屬性 :對象名.屬性名

???????????????????person.name?=?"王慶港";?//給屬性賦值

???????????????????person.age?= 23;

???????????????????//獲取屬性的值

???????????????????String?name?=?person.name;

???????????????????System.out.println("name="?+?name);

???????????????????//調用方法 :對象名.方法名

???????????????????person.run();

???????????????????person.say();

  • 面向對象的內存分析

    • 同一個類創建的多個對象,每個對象獨自擁有一份屬性。

    • 當修改其中一個對象的屬性的值后,其它對象的該屬性不會受到影響

  • 類的成員之 :屬性(成員變量)

      • 變量的分類:

①按照數據類型分 :基本數據類型?vs?引用數據類型

②按照位置分 :成員變量??vs?局部變量

    • 成員變量和局部變量??相同點:

①變量的聲明的格式都是一樣的。

②變量都有作用域

③變量都是先聲明后使用

    • 成員變量和局部變量?不同點:

①局部變量:在方法里,方法的形參,構造器中,構造器的形參,代碼塊

②成員變量:?在類中方法等結構外

    • 權限修飾符:

①局部變量:不能使用權限修飾符修飾

②成員變量:可以使用四種權限修飾符(public protected 缺省的(default) private)

    • 內存:

①局部變量:在內存的棧中

②成員變量:在內存的堆(對象)中

    • 默認值:

①局部變量 :沒有默認值

②成員變量 :有默認值(和數組元素的默認值是一樣的)

?byte,short,int,long -> 0

?float,double -> 0.0

?boolean -> false

?char -> \u0000

引用數據類型 -> null

?

?

class?Animal{

??????????//屬性(成員變量)

??????????public?String?name?=?"動物";

??????????int?legs;

??????????protected?boolean?isLive?=?true;

??????????{//代碼塊

???????????????????String?address?=?"";//局部變量

??????????}

??????????public?Animal(){}?

??????????//構造器

??????????public?Animal(int?sex){//構造器的形參

???????????????????int?a?= 10;//局部變量

??????????}

??????????//方法

??????????public?void?say(int?sex){//方法的形參

???????????????????//局部變量

???????????????????int?age?= 10;

???????????????????age?= 20;

???????????????????name?=?"大錘";

??????????}

}

?

    • 不定義對象的句柄,而直接調用這個對象的方法。這樣的對象叫做匿名對象。

    • 如:new Person().shout();

  • 類的成員:方法(method)

    • Java里的方法不能獨立存在,所有的方法必須定義在類里。

    • 方法的聲明格式:

修飾符?返回值類型?方法名(參數類型?形參1,?參數類型?形參2,?….){

方法體程序代碼

return?返回值;

}

?

?

    • 權限修飾符 :public protected 缺省的? private (先用public)

①void/具體的類型(基本數據類型、引用數據類型):

②void : 表示該方法沒有返回值

具體的類型 :調用該方法會有返回值。

注意:返回數據需要使用return關鍵字。return 后面跟需要返回的數據。

    • 方法名 :只需要遵守標識符的規則和規范即可

(形參相同的情況下,同一個類中的方法名不能相同)。

    • 形參列表 :可以有0個1個或多個。多個之間使用","隔開。

①作用 :用來通知方法的調用者調用此方法時需要傳遞數據。

②注意:實參的類型必須和形參的類型保持一致

    • 方法體 :方法功能的具體體現。

注意 :只有調用方法時方法體才會執行。

?

對象數組題目:

定義類Student,包含三個屬性:學號number(int),年級state(int),成績score(int)。創建20個學生對象,學號為1到20,年級和成績都由隨機數確定。

問題一:打印出3年級(state值為3)的學生信息。

問題二:使用冒泡排序按學生成績排序,并遍歷所有學生信息

提示:

1)?生成隨機數:Math.random(),返回值類型double;?

2)?四舍五入取整:Math.round(double d),返回值類型long。

?

class?Student1{

??????????int??number;

??????????int?state;

??????????int?score;

??????????

??????????@Override

??????????public?String toString() {

???????????????????return?"Student1 [number="?+?number?+?", state="?+?state?+?", score="?+?score?+?"]";

??????????}

??????????

}

public?class?StuInfo {

??????????public?static?void?main(String[]?args) {

???????????????????// 創建對象數組

???????????????????Student1[]?studentArr?=?new?Student1[20];

???????????????????// 循環創建對象并賦值,傳給對象

???????????????????

???????????????????for?(int?i?= 0;?i?< 20;?i++) {

?????????????????????????????Student1?student1?=?new?Student1();

?????????????????????????????student1.number?=?i;

?????????????????????????????student1.state?= (int)Math.round( (Math.random()*7));

?????????????????????????????student1.score?= (int) (Math.random()*100);???

?????????????????????????????studentArr[i] =?student1;

???????????????????}

???????????????????System.out.println("---------打印排序前的學生信息-------------");

???????????????????for?(int?i?= 0;?i?<?studentArr.length;?i++) {

?????????????????????????????System.out.println(studentArr[i]);

???????????????????}

???????????????????

???????????????????System.out.println("----------打印state為3的學生信息---------");

???????????????????// 循環查找對象數組中state值為3的對象,打印輸出對象信息

???????????????????for?(int?i?= 0;?i?<?studentArr.length;?i++) {

?????????????????????????????if?(studentArr[i].state?== 3) {

??????????????????????????????????????System.out.println(studentArr[i]);

?????????????????????????????}

???????????????????}

???????????????????System.out.println("----------------------------------------");

???????????????????// 使用冒泡排序按學生成績排序,并遍歷所有學生信息

???????????????????// 思路:兩個循環遍歷數組中的對象的成績,若對象的成績小于后一個,則交換對象的位置

???????????????????for?(int?i?= 0;?i?<?studentArr.length?-1;?i++) {?// 外層循環決定冒泡排序的次數,為數組長度-1

?????????????????????????????for?(int?j?= 0;?j?<?studentArr.length?-?i?-1;?j++) {?// 內層循環決定每次多少次冒泡,為

??????????????????????????????????????if?(studentArr[j].score?>?studentArr[j+1].score) {?// 如果前面的對象小于大于后面的,就叫交換類數組地址

????????????????????????????????????????????????Student1?temp?=?studentArr[j];

????????????????????????????????????????????????studentArr[j] =?studentArr[j+1];

????????????????????????????????????????????????studentArr[j+1] =?temp;

??????????????????????????????????????}

?????????????????????????????}

???????????????????}

???????????????????// 注意!!!!!!!!!!

???????????????????// 冒泡排序交換的值的數組的下標為內循環的循環變量

???????????????????System.out.println("------打印排序后的信息-------");

???????????????????// 打印排序后的信息

???????????????????for?(int?i?= 0;?i?<?studentArr.length;?i++) {

?????????????????????????????System.out.println(studentArr[i]);

??????????????????????????????????????

???????????????????}

???????????????????

??????????}

}

?

  • 重載的概念、特點、實例

①在同一個類中,允許存在一個以上的同名方法,只要它們的參數個數或者參數類型不同即可。

②與返回值類型無關,只看參數列表,且參數列表必須不同。

(參數個數或參數類型)。調用時,根據方法參數列表的不同來區別。

③示例:

//返回兩個整數的和

??int?add(int?x,int?y){return?x+y;}

//返回三個整數的和

??int?add(int?x,int?y,int?z){return?x+y+z;}

//返回兩個小數的和

double add(double?x,double?y){return?x+y;}

注意!!:

①不同的形參列表 :形參的個數,順序,類型不同

②方法的重載和權限修飾符,返回值類型,形參的名字無關。

③判斷方法:只看 方法名 + 形參列表(看形參和實參的類型)

?

  • 可變個數形參

    • 格式 :變量的類型 ... 變量名

    • 說明:

? ? ? ? ? ? ? ? ?①可變形參的底層就是一個數組

? ? ? ? ? ? ? ? ?②在可變形參的方法中,和可變形參相同類型的數組的方法不構成重載。

? ? ? ? ? ? ? ? ?③在形參列表中可變形參只能放在最后

? ? ? ? ? ? ? ? ?④在同一個方法的形參列表中只能有一個可變形參。

? ? ? ? ? ? ? ? ?⑤ 可變形參的個數可以是0個1個或多個

  • 方法的參數傳遞

    • 基本數據類型的參數傳遞

    • 引用數據類型的參數傳遞

    • 方法的參數傳遞

    • 面向對象:封裝

      • 為什么要使用封裝性?

在創建對象以后,就可以通過對象名.屬性名這種方式對屬性直接進行操作。這種操作對于屬性只有類型和范圍的限制。但是在實際開發中我們會有更多的其它的限制條件。而這些限制條件又不能在屬性的聲明處加以限制。我們采取取如下方式

①使用權限修飾符對屬性進行權限的限制,那么在類的外部就不能隨意的再調用類中的屬性

②提供公共的方法,在方法中可以加以限制其它的條件。然后可以通過該方法給屬性賦值和獲取屬性的值。

? ? ? ? ? ? ? ? ?

      • 封裝性的體現(狹義上):

①將屬性私有化。(private修飾屬性)

②提供公共的set/get方法。(set方法用來給屬性賦值,get方法用來獲取屬性的值)

? ? ? ? ? ? ? ? ?

      • 封裝性的體現(廣義上):

①可以使用四種權限修飾符:private,缺省的,protected,public

②四種權限修飾符可以修飾 :屬性,方法,構造器,內部類

③類只能被public和缺省的修飾。

?

  • 四種訪問權限修飾符

?

  • 構造方法(構造器)

    • 構造器的特征

      • 它具有與類相同的名稱

      • 它不聲明返回值類型。(與聲明為void不同)

      • 不能被static、final、synchronized、abstract、native修飾,不能有return語句返回值

    • 構造器的作用:創建對象;給對象進行初始化

      • 如:Order o = new?Order();????Person p = new?Person(“Peter”,15);

    • 根據參數不同,構造器可以分為如下兩類:

      • 隱式無參構造器(系統默認提供)

      • 顯式定義一個或多個構造器(無參、有參)

    • 注??意:

      • Java語言中,每個類都至少有一個構造器

      • 默認構造器的修飾符與所屬類的修飾符一致

      • 一旦顯式定義了構造器,則系統不再提供默認構造器

      • 一個類可以創建多個重載的構造器

      • 父類的構造器不可被子類繼承

    • 構造器重載使得對象的創建更加靈活,方便創建各種不同的對象。

?

?

  • 給屬性賦值的方法

    • 賦值的位置:

① 默認初始化:int a;

② 顯式初始化:int a = 0;

③ 構造器中初始化

④ 通過“對象.屬性“或“對象.方法”的方式賦值

    • 賦值的先后順序:

? ① - ② - ③ - ④

?

?

  • JavaBean:Java語言編寫的可重用組件

    • 定義:是一個普通的Java類,但是符合如下標準

    • ①類是公共的

    • ②有一個無參的公共的構造器

    • ③有屬性,且有對應的get、set方法

  • UML類圖

?

      • ①+?表示?public?類型,?-?表示?private?類型,#表示protected類型

      • ②方法的寫法:方法的類型(+、-)??方法名(參數名:參數類型):返回值類型

    • this 關鍵字

      • this 是什么?

①它在方法內部使用,即這個方法所屬對象的引用;

②它在構造器內部使用,表示該構造器正在初始化的對象。

      • this作用域:this 可以調用類的屬性、方法和構造器

      • 適用情形:當在方法內需要用到調用該方法的對象時,就用this。

具體的:我們可以用this來區分屬性和局部變量。

public?void?setAge(int?age){

???????????age?=?age;//局部變量 :就近原則(屬性名和局部變量名相同時默認調用的是局部變量)

? ? ? ? ? ?System.out.println("==========="?+?age);

}

    • this 調用構造器

總結Summary

  • 面向對象的內存分析

  • 成員變量與局部變量

  • 構造器

  • 函數重載

?

轉載于:https://www.cnblogs.com/bigdatahub/p/11305271.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247258.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

漢諾塔遞歸算法

起源&#xff1a; 漢諾塔&#xff08;又稱河內塔&#xff09;問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子&#xff0c;在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子…

Java編程基礎階段筆記 day 07 面向對象編程(上)

? 面向對象編程 筆記Notes 面向對象三條學習主線 面向過程 VS 面向對象 類和對象 創建對象例子 面向對象的內存分析 類的屬性&#xff1a;成員變量 成員變量 VS 局部變量 類的方法 方法的重載 可變個數形參 面向對象&#xff1a;封裝性 訪問權限修飾符 構造方法&…

談“發表(撰寫)學術論文的注意事項”

題記&#xff1a;做兩個核心學術期刊的“數字圖像處理”類審稿專家有一段時間了&#xff0c;在審稿過程中發現存在很多問題&#xff0c;所以在此就撰寫學術論文過程中的一些注意事項&#xff0c;跟大家交流一下&#xff08;當然&#xff0c;文中的很多觀點也是一些資深主編的看…

Vue/Angular中父窗口新開的子窗口關閉的時候刷新父窗口

最近遇到一個項目需求&#xff1a;Angular中父窗口新開的子窗口提交完信息關閉的時候刷新父窗口。 知識點&#xff1a; window.opener 概述 返回打開當前窗口的那個窗口的引用&#xff0c;例如&#xff1a;在window A中打開了window B&#xff0c;B.opener 返回 A. 語法 …

圖像邊緣特征

圖像邊緣是圖像的重要特征&#xff0c;是圖像中特性&#xff08;如像素灰度、紋理等&#xff09;分布的不連續處&#xff0c;圖像周圍特性有階躍變化或屋脊狀變化的那些像素集合。圖像的邊緣部分集中了圖像的大部分信息&#xff0c;一幅圖像的邊緣結構與特點往往是決定圖像特質…

HDU 6631 line symmetric(枚舉)

首先能想到的是至少有一對相鄰點或者中間間隔一個點的點對滿足軸對稱&#xff0c;那么接下來只需要枚舉剩下的點對是否滿足至多移動一個點可以滿足要求。 第一種情況&#xff0c;對于所有點對都滿足要求&#xff0c;那么Yes。 第二種情況&#xff0c;有一個點不滿足要求&#x…

學習數字圖像處理經驗談

一、面向應用&#xff1a;層層分解、抓住要點 我們學習數字圖像處理的最終目的還是應用&#xff0c;不管是用它來研制產品還是研發項目抑或是研究課題&#xff0c;都要用數字圖像處理的理論、方法和技術來解決實際問題。在此過程中&#xff0c;提高效率是非常重要的&#xff0c…

讀javascript百煉成仙笑死筆記一

“自然是這樣的&#xff0c;但是我現在這樣改一下&#xff0c;你說結果是多少呢&#xff1f;”葉小凡詭異地笑了笑&#xff0c;然后打出一段比較奇特的代碼。 var a 1; var b; var sum (b a --a) a-- b; “噗&#xff01;”看到這段代碼&#xff0c;對面弟子差點一口老血…

C#調用存儲過程的通用類

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlClient;usingSystem.Collections;usingSystem.Data;//摘要&#xff1a;數據訪問助手。//作者&#xff1a;ZhiQiao//日期&#xff1a;2008/07/02namespaceZhiQiao.DataAccessHelper{ //存…

圖靈獎得主(一)

本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A A.M. Turing Award ACMs most prestigious technical award is accompanied by a prize of $25,000. It is given to an individual selected fo…

react-router-dom@6獲取路由傳參

目錄 參數獲取 1、子路由形式攜帶 2、問號(?)形式參數 3、事件跳轉傳參 router/index.tsx import App from "App"; import Home from "pages/Home"; import List from "pages/List"; import Detail from "pages/Detail"; import…

圖靈獎得主(二)

本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A 1987年度的圖靈獎授予了IBM沃特森研究中心老資格的研究員 約翰科克(Johncocke)。 科克是從機械到數學、又從數學轉到 計算機方向上來的學者。…

jQuery效果之滑動

jQuery 滑動方法有三種&#xff1a;slideDown()、slideUp()、slideToggle()。 jQuery slideDown() 方法用于向下滑動元素&#xff0c; 語法&#xff1a;$(selector).slideDown(speed,callback); 可選的 speed 參數規定效果的時長。它可以取以下值&#xff1a;"slow"、…

Error: This command has to be run with superuser privileges (under the root user on most systems).

意思是錯誤&#xff1a;此命令必須以超級用戶權限&#xff08;在大多數系統上以root用戶權限&#xff09;運行。所以當前的用戶是普通用戶&#xff0c;需要切換為超級用戶&#xff08;root用戶&#xff09;先輸入在命令行中輸入 su root 然后會出現Password&#xff1a;&#…

圖靈獎得主(三)

本文轉自&#xff1a;本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A 繼1979年度圖靈獎首次授予一位加拿大學者K.E.Iverson之后&#xff0c; 1989年度的圖靈 獎又一次授予加拿大學者威廉凱亨(Willia…

對微信公共號的理解

通過redirect_uri獲取code 通過code和appid 獲取access_token 進行鑒權 轉載于:https://www.cnblogs.com/zhouyideboke/p/11309752.html

vue3 v-model變化

概覽 就變化內容而言&#xff0c;此部分屬于高階內容&#xff1a; 非兼容&#xff1a;用于自定義組件時&#xff0c;v-model的 prop 和事件默認名稱已更改&#xff1a; prop&#xff1a;value -> modelValue&#xff1b;event&#xff1a;input -> update:modelValue&a…

圖靈獎得主(四)

本文轉自&#xff1a;本文轉自&#xff1a;本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A 1991年度的圖靈獎授予了愛丁堡大學計算機科學系教授羅 賓米爾納(Robin Milner)。米爾納是繼M.V.Wilkes(1…

sql 日期類型空值等于 1900-01-01

SQL server 中查詢&#xff1a;select cast( as datetime) 結果&#xff1a;1900-01-01 00:00:00.000 做為判斷條件的話&#xff0c;要注意。不能直接 轉載于:https://www.cnblogs.com/meng9527/p/11311765.html

koa洋蔥模型

Koa 和 Express 都會使用到中間件 Express的中間件是順序執行&#xff0c;從第一個中間件執行到最后一個中間件&#xff0c;發出響應如上圖 Koa是從第一個中間件開始執行&#xff0c;遇到 next 進入下一個中間件&#xff0c;一直執行到最后一個中間件&#xff0c;在逆序&#x…