日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象

發布時間:2024/10/8 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對象與類

一、面向對象思想的概述

1>面向對象與面向過程:

  • 二者都是一種思想,面向對象是相對于面向過程而言的。面向過程強調的是功能行為。面向對象,將功能封裝進對象,強調具備了功能的對象。
  • 面向對象更加強調運用人類在日常的邏輯中采用的思想方法與原則,如抽象,分類,繼承,聚合,多態等。
  • 面向對象的三大特征:封裝,繼承,多態。
/*

2>面向對象(OOP)程序設計概述

1、 面向對象的程序是由對象組成的,每個對象包含對用戶公開的特定功能部分和隱藏的實現部分。

傳統的面向過程程序設計(結構化程序設計)通過設計一系列的過程(算法)來求解問題。一旦確定了這些過程,就要開始考慮存儲數據的適當方式。(這就是常說的:算法+數據結構=程序)。明確的來說,編程,首先要確定如何操作數據,然后決定如何組織數據的結構,以便于操作數據。但是,OOP卻調換了這個次序,將數據放在第一位,然后再考慮操作數據的算法

2、總結

  • 程序員從執行者轉化成指揮者
  • 完成需求時

? ?先去找具有所需功能的對象來用。

? ?如果該對象不存在,那么創建一個更具有所需功能的對象

? ?這樣簡化開發并提高復用。

  • class類和object對象時面向對象的核心概念

? ?類是對一類事物的描述,是抽象的、概念上的定義。

? ?對象是實際存在的該類事物的每個個體,因而也稱實例

  • 萬事萬物皆對象
  • 面向對象設計程序的重點是類的設計
  • 定義類其實是定義類中的成員(成員變量和成員方法)

3、面向對象思想的落地法則一:

  • 設計類并設計類的成員(成員變量以及成員方法)。
  • 通過類,來創建類的對象(類的實例化)。
  • 通過"對象.屬性 對象.方法"來調用,完成相應的功能。

二、對象與類

1>類

1.1 java類及類的成員

1.1.1 描述類的兩種方法:屬性、行為。

  • 屬性對應類中的成員變量

? 屬性=成員變量

  • 行為對應類中的成員方法

? 成員方法=函數

例一:

//類是抽象的

例二:

public

1.2 類的內存解析

1.3 java類的屬性(成員變量)與局部變量

1.3.1 相同點:

  • 遵循變量聲明的格式
  • 都有作用域

1.3.2 不同點:

  • 聲明位置的不同。

? 成員變量:聲明在類里,方法外

? 局部變量:聲明在方法內,方法的形參部分,代碼塊內。

  • 成員變量的修飾符有四個:public private protected 缺省

? 局部變量沒有修飾符:與所在方法的修飾符相同。

  • 初始化值:一定會有初始化值

? 成員變量:如果在聲明的時候,不顯示的賦值,不同的數據類型會有不同的默認初始化值

? 局部變量: 一定要顯示的賦值。(局部變量沒有默認初始化值)

  • 二者內存中存放的位置不同:成員變量存在于堆空間中;局部變量:??臻g中

1.4 類的方法:提供某種功能的實現

  • 例:
public

格式: 權限修飾符 返回值類型(void : 無返回值/具體的返回值類型)

返回值將會返回給當前的對象

類中的方法可以訪問類中的成員變量

1.4.1 重載

public

以上的代碼就是一個方法的重載

  • 重載的定義:有著相同的方法名,相同的返回類型,不同的參數(個數不同,類型不同),就構成了重載。

再往深了說,Java中,重載可以用于一切方法,包括構造方法(構造器)。

? 注釋:要完整的描述一個方法,需要指定方法名以及參數類型。叫做這個方法的簽名。然而返回類型不是簽名的一部分,也就是說,不能有兩個名字相同、參數類型也相同但卻有不同返回類型的方法。

1.4.2 方法參數

1.4.2.1 形參與實參

  • 形參:方法聲明時的括號里的參數
  • 實參:調用方法時實際傳入的參數

1.4.2.2 java中的傳遞機制------值傳遞

  • 值傳遞和地址傳遞:

? 值傳遞:表示方法接收的是調用者提供的值。

? 地址傳遞:表示方法接收的是調用者提供的變量地址(典型的就是C語言中的指針)

  • 參數為基本數據類型的值傳遞:

? 假如要寫一個方法,這個方法的功能是交換 a b 的值

public

? 內存解析如下:

? 那我們考慮一個有效的寫法:

//我們可以把要交換的一對值寫進一個類里,并且把這個類實例化

內存解析如下:

那直接交換的內存解析是什么呢?不妨動手畫一畫吧!

1.5 類的構造器:

類的第三個成員:構造器(構造方法)。

1.5.1構造器的作用:

  • 創建對象
  • 給創建的對象的屬性賦值
  • 初始化屬性
person

1.5.2 空構造器

設計類時,若不顯示聲明類的構造器的話,程序會默認提供一個空的構造器

構造器寫法如下

//構造器函數名與類名一樣

1.5.3 一旦顯示的定義類的構造器,那么默認的構造器就不再提供。

1.5.4 格式

? 聲明類的構造器,

? 格式: 權限修飾符 類名(形參){}

1.5.5 構造器的重載

? 類的構造器之間也可以構成重載

1.5.6 屬性的賦值的先后順序:

? 屬性的默認初始化值,屬性的顯示賦值(要在構造器賦值的前面),構造器的初始化值,通過對象的.方法的方式給屬性賦值。

1.6 this關鍵字

  • 可以用來修飾屬性、方法、構造器
  • this理解為當前對象或當前正在創建的對象:this.name,this.show();
  • this(形參):可以用來顯示的調用當前類的重載的構造器,必須放在首行。
  • tihs()使用次數有限制
class

1.7 static------靜態字段與靜態方法

static 靜態的 可以用來修飾屬性 方法 代碼塊(初始化塊) 內部類

1.7.1 修飾屬性(類變量):

  • 由類創建的所有的對象,都共用這一個屬性,也可以這樣說,靜態變量屬于類,而不屬于任何單個的對象。
  • 當其中一個對象對此屬性進行修改,會導致其他對象對此屬性的一個調用。
  • 類變量隨著類的加載而加載(不依據實體對象的存在)
  • 靜態的變量可以直接通過“類.類變量”的形式來調用
  • 類變量的加載是要早于對象的,所有當有對象以后,可以“對象.類變量” 但是“類.實例變量”是不行的
  • 類變量存在于靜態域中

2、修飾方法(類方法):

  • 隨著類的加載而加載,在內存中也是獨一份
  • 可以直接通過“類.方法”的方式來調用
  • 內部可以調用靜態的屬性或者靜態的方法,而不能調用非靜態的屬性或者方法。反之,非靜態的方法是可以調用靜態的屬性或者方法

1.8 關鍵字final

最終的,可以用來修飾類,屬性,方法

1.8.1 修飾類,這個類不可以被繼承。

1.8.2 修飾方法,這個方法不可以被重寫

1.8.3 final修飾屬性,此屬性就是一個常量,用大寫字符去表示

? 此常量在那里賦值:a.不能使用默認初始化 b.可以顯示的賦值,代碼塊,構造器

1.8.4 static final 修飾的是 全常量

1.9 初始化塊(類的第四個成員)的應用

代碼塊是什么呢?如下:

class

1.9.1 關于屬性賦值的幾種操作方法:

  • 通過默認的初始化
  • 通過顯示的初始化或代碼塊初始化(按照順序結構執行)
  • 通過構造器
  • 通過方法
  • 通過代碼塊:如果有修飾符,修飾符只能是static

1.9.2 分類:

  • 非靜態代碼塊:

? a.可以對類的屬性(靜態,非靜態)進行賦值,同時也可以調用本類聲明的方法

? b.可以有輸出語句

? c.一個類可以有多個非靜態的代碼塊,多個代碼塊之間按照順序結構執行

? d.每創建一個類,非靜態的代碼塊就加載一次

? e.非靜態的代碼塊的執行要早于構造器

? f.代碼塊與實例字段按照順序執行

  • 靜態代碼塊(修飾符為static):

? a.與靜態的屬性和方法一樣,只加載一次。

? b.加載早于非靜態的

? c.多個靜態代碼塊之間按照順序執行

? d.靜態的代碼塊中只能執行靜態的結構(類屬性,類方法)

? e.隨著類的加載而加載

1.9.3 代碼內含構造器與代碼塊的處理步驟:

  • [x] 如果構造器的第一行調用了另一個構造器,則基于所提供的參數執行第二個構造器
  • [x] 否則
  • 所有數據字段初始化為其默認值(0、false或null)
  • 按照在類聲明中出現的順序,執行所有字段初始化方法和初始化塊
  • [x] 執行構造器主體代碼

2>對象與實例化

2.1 對象與對象變量

2.1.1 對象與對象變量

  • 先看如下代碼:
public
  • 對象變量: 代碼中的 Person person Person person1 的 person person1 都是對象變量
  • 對象:代碼中的new出來的就是對象,這個對象就是由構造器創建的。
  • 我們來看看 他的內存解析:

2.1.2 類的實例化

在Java程序設計語言中,要用構造器構造新實例。構造器是一種特殊的方法,用來構造并初始化對象。創造對象的這個過程就稱為類的實例化的過程。

2.2 用var聲明局部變量

在java10中如果可以從變量的初始值推導出他們的類型,那么可以用var關鍵字聲明這個卡局部變量。

例如:

Person

從現在開始倘若無需了解任何Java API 就能從等號右邊明顯看出類型,在這種情況下我們都將使用var表示法。

但是,我們不會對數值類型使用var,如 int long double。

3>類之間的三大關系

3.1 依賴

? 依賴是一種最明顯的、最常見的關系。簡單來說,如果一個類的方法使用或操作另一個類的對象,我們可以說一個類依賴于另一個類。我們編寫了一個賬戶類和訂單類,而我們要考慮到在賬戶下訂單的時候,訂單類會訪問賬戶類的對象來查看信用狀態,由此,構成了訂單類使用或操作了賬戶類,所以訂單類依賴賬戶類。
? 應該注意的是,應該盡可能的減少相互依賴的類減至最少。智利的關鍵是,如果類A不知道B的存在,它就不會關心B的任何改變(這意味著B的改變不會導致A產生任何bug)。用軟件工程的術語來講,就是盡可能減少類之間的“耦合”。

3.2 聚合

? 簡單來說就是 一個類包含著另一個類

3.3 繼承

? 繼承是面向對象中很重要的一個概念,我們會在后面深入討論。
? 所以我們在這里留一個懸念,到后面我們深入交流~~~

4>類要具有封裝性

4.1 什么是封裝性?

封裝性,就是指,一個類的成員變量是被封裝起來的,不可以在類的外部直接訪問,而是要通過方法來訪問,操作它。

4.2 為什么要有封裝性

如果一個字段沒有被封裝起來,那么外部操作修改他的“搗蛋者”可能出現在任何地方,這樣不利于調試。但是,如果封裝起來,只有這個成員的變量的訪問器和修改器可以訪問與操作他,我們只需要調試兩個方法就可以。

4.3 如何做到封裝性

  • 看如下代碼
public

以上為一個具有封裝性的類

我們來分析它

4.3.1 需要私有的數據字段

什么是”私有的“? 就是用private關鍵字修飾的

我們下來介紹幾個權限修飾符的關鍵字(按照權限從大到小排序):

  • public 權限最大,被修飾的成員變量和成員方法可以在任意地方被訪問
  • protect 被修飾的成員變量和成員方法只能在本包中被訪問以及被子類(繼承的內容,后面會談到)訪問。
  • default 默認修飾符,比如 我們在 int a; 看起來是沒有加任何權限修飾符,實際上它是default的,即只能在本包中被訪問
  • private 權限最小,只能在本類中被訪問

4.3.2 一個公共的字段訪問器方法

就是上面代碼中的get方法

4.3.3 一個公共的字段修改器方法

就是上面代碼的set方法

5>類設計技巧

5.1 一定要保證數據私有

5.2 一定要對數據進行初始化

5.3 不要在類中使用過多的基本類型

? 這個想法是要用其他的類替換使用多個相關的基本類型。這樣會使得類更易于理解,也更易于修改。例如,用一個名為Address的新類替換一個Customer類中一下的實例字段:

private

5.4 不是所有的字段都需要單獨的字段訪問器和字段更改器

? 例如你要設計一個Employee類,要設置員工的雇傭日期,一旦實例化以后就不會再更改,所以雇傭日期字段不需要訪問器和更改器

5.5 分解有過多職責的類

5.6 類名和類方法名要體現他們的職責

5.7 優先使用不可變類

總結

以上是生活随笔為你收集整理的java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。