Java基礎知識(貳)

来源:http://www.cnblogs.com/strivelearn/archive/2016/11/09/6045326.html
-Advertisement-
Play Games

一、面向對象 Java中的面向對象與C 的面向對象,本質都是一樣。所以對於學過C 的同學理解Java中面向對象的概念就比較輕鬆。 對象 定義: 萬物皆對象,客觀存在的事物都稱為 對象 。 1、面向對象 類 定義: 類是模具,確定對象將會擁有的特性(屬性)和行為(方法) 特點: A.類是對象的類型 B ...


  • 一、面向對象

  • Java中的面向對象與C#的面向對象,本質都是一樣。所以對於學過C#的同學理解Java中面向對象的概念就比較輕鬆。
  • 對象

  • 定義: 萬物皆對象,客觀存在的事物都稱為對象
  • 1、面向對象

  • 定義: 類是模具,確定對象將會擁有的特性(屬性)和行為(方法)
  • 特點:
  • A.類是對象的類型
  • B.具有相同屬性和方法的一組對象的集合
  • 屬性
  • 定義: 有什麼就是這個屬性
  • 方法
  • 定義: 能幹什麼(對象操作的執行)
  • 2、Java中如何定義類

  • 1.所有Java程式中都以類(class)為組織單元
  • 2.類有屬性、方法
  • 3.如何定義類:
graph LR
如何定義類-->定義類名
如何定義類-->編寫類的屬性
如何定義類-->編寫類的方法
  • 3、如何創建Java對象

類名 對象名=new 類名();
  • 4、Java中成員變數與局部變數

  • 成員變數
  • 在類中定義,用來描述對象將要有什麼,整個類內部都可以看到
  • 局部變數
  • 在類的方法中定義,在方法中臨時保存數據
  • 區別
  • 1.作用域不同
  • 2.成員變數會預設給一個初始值,不會給局部變數初始值。C#也是如此
  • 3.在同一個方法中,不允許有同名局部變數,在不同方法中,可以有同名局部變數
  • 4.兩類變數同名時,局部變數優先調用。C#也是如此

  • 5、構造方法

  • 1.使用new + 構造方法 創建一個新的對象
  • 2.構造方法是定義在Java類中的一個用來初始化對象的方法
  • 3.構造方法與類名相同且沒有返回值
  • 4.無參構造方法,如果我們沒有指定,系統會自動生成無參構造方法
  • 5.有參構造方法,當我們指定有參構造方法,系統就不會自動生成無參構造方法
  • 6.構造方法的重載,方法名相同,但是參數不同的多個方法,系統調用時候根據參數去調用
  • 7.構造方法不但可以給對象的屬性賦值,還可以保證給對象屬性賦一個合理的值。(就是加判斷條件)
  • 6、靜態變數(static)

  • 我們可以基於一個類創建多個該類的對象,每個對象都擁有自己的成員,互相獨立,然而在某些時候,我們更希望該類的所有對象共用一個成員。這時候需要靜態變數
  • 使用static修飾的成員稱為靜態成員或者類成員,它屬於整個類所有,而不是某個對象所有,即被雷的所有對象共用
  • 靜態成員可以使用類名直接訪問,也可以使用對象名進行訪問。推薦使用類名訪問
  • 靜態成員屬於整個類,當系統第一次使用該類時,就會分配記憶體空間直到類被卸載才進行資源回收

  • 7、靜態方法

  • 與靜態變數一樣,我們也可以使用static修飾方法,稱為靜態方法或類方法
  • 1.靜態方法中可以直接調用類中的靜態成員,但不能調用非靜態成員
  • 2.若希望在靜態方法中調用非靜態變數,可以通過創建類的對象,然後通過對象來訪問非靜態變數
  • 3.在普通方法中,則可以直接訪問同類的非靜態變數和靜態變數

  • 8、靜態初始化塊

  • 靜態初始化只在類載入時執行,且只會執行一次,同時靜態初始化只能給靜態變數賦值,不能初始化普通變數
  • Java中有靜態初始化塊,但是在C#中沒有對應的概念
  • Java初始化塊是不能接收任何參數的,定義的靜態變數可以通過初始化塊進行初始化
  • 好處在於:提高初始化塊的復用,提高整個應用的可維護性

  • 二、封裝

  • 1.封裝

  • 定義:將類的某些信息隱藏在類的內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問
  • 好處:
  • 1.只能通過規定的方法訪問數據
  • 2.隱藏類的實例細節,方便修改和實現
  • 步驟:
  • 1.修改屬性的可見性(private修飾)
  • 2.創建getter/setter方法(用於屬性的寫讀)
  • 3.在getter/setter方法中加入屬性控制語句

  • 2.使用包管理Java中類

  • 包的作用:1.管理Java文件。2.解決同名文件衝突
  • 定義包:package包名:包名間可以使用"."號隔開
  • 可以通過import關鍵字,在某個文件中使用其它文件中的類
  • Java中,包的命名規則是全小寫字母拼寫

  • 3.Java訪問修飾符

修飾符 本類 同包 子類 其他
private Y N N N
預設 Y Y N N
protected Y Y Y N
public Y Y Y Y
  • 4.Java中this關鍵字

  • this關鍵字代表當前對象
  • 封裝對象屬性

  • 5.Java中內部類,C#也可以定義內部類

  • 就是定義在另一個類裡面的類,與之對應,包含內部類的類被稱為外部類
  • 作用:
  • 1.可以提供了更好的封裝,可以把內部類隱藏在外部之內,不允許同一個包中的其他類訪問
  • 2.內部類可以直接訪問外部類的所有數據,包含私有數據
  • 內部類的劃分:
  • 1.成員內部類
  • 2.靜態內部類
  • 3.方法內部類
  • 4.匿名內部類
  • 註意點:
  • 外部類不能訪問內部類中的成員方法,如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法。如果要訪問外部類成員則要加this

  • 6.Java中靜態內部類

  • 1.靜態內部類不能直接訪問外部類的非靜態成員,但可以通過

new 外部類().成員變數
  • 2.如果外部類的靜態成員與內部類的成員名稱相同,可通過
類名.靜態成員
  • 3.創建靜態內部類的對象時,不需要外部類的對象,可以通過直接創建
內部類 對象名=new 內部類();
  • 7.Java方法內部類,C#不允許

  • 方法內部類就是內部類定義在外部方法中,方法內部類只在該方法中內部可見,不能使用修飾符及static

  • 三、繼承

  • 1.繼承

  • 繼承是類與類的一種關係,是一種"is a"的關係。父類 基類 | 子類 派生類
  • Java中的繼承是單繼承,C#也是單繼承
  • 語法規則:

class 子類 extends 父類
  • 2.方法的重寫

  • 如果子類對於繼承父類的方法不滿意,是可以重寫父類繼承的方法的,當調用方法時會優先調用子類的方法
  • C#中方法重寫是用override關鍵字表示,Java中是在方法上註解的方式@Override
  • 語法規則:
  • 1.返回值類型
  • 2.方法名
  • 3.參數類型及個數
  • 都要與父類繼承的方法相同,才叫方法的重寫

  • 3.Java繼承初始化順序

  • 初始化相當於執行類的構造方法
  • 1.初始化父類再初始化子類對象
  • 2.先執行初始化對象中的屬性,再執行構造方法中的初始化

public class Person {
    private int age = 10;

    Person() {
        age = 20;
    }

    public static void main(String[] args) {
        System.out.println(new Person().age);//20
    }
}
  • 4.final關鍵字

  • 使用final關鍵做標識有"最終的"含義
  • final可以修飾類、方法、屬性、變數
  • final修飾類,則該類不允許被繼承。類似C#.sealed
  • final修飾方法,則該方法不允許被覆蓋
  • final修飾屬性,則該類的屬性不會進行隱式初始化,或在構造方法中賦值(兩者選其一)
  • final修飾變數,則該變數的值只能賦值一次,稱為常量

  • 5.super關鍵字

  • 在對象內部使用,可以代表父類對象
  • 1.訪問父類的屬性
  • 2.訪問父類的方法
  • 使用場景
  • 1.子類的構造的過程必須調用其父類的構造方法
  • 2.隱式程式預設調用無參構造方法

  • 6.Object類

  • Object是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另一個類,那麼這個類預設繼承Object類
  • 1.toString()方法
  • 在Object類中定義的toString()方法時返回的對象的哈希code碼。即地址
  • 2.equals()方法
  • 比較的是對象的引用是否執行同一個快記憶體地址
  • 類對象與類的對象的區別
  • 類對象是類對象的類型getclass();
  • 類的對象是關註的數據信息

  • 四、多態

  • 1.多態(對象的多種形態)

  • 1.引用多態
  • 父類的引用可以指向本類對象

Animal obj=new Animal();
  • 父類的引用可以指向子類對象(里氏替換原則)
Animal obj=new Dog();
  • 2.方法多態
  • 1.創建本類對象時,調用的方法為本類對象
  • 2.創建子類對象時,調用的方法為子類重寫的方法或繼承的方法

  • 2.引用類型轉換

  • 向上類型轉換(隱式/自動類型轉換),是小類型到大類型的轉換。不存在風險
  • 向下轉換(強類型轉換),是大類型到小類型的轉換
  • 使用instanceof運算符,來解決引用對象的類型

  • 3.抽象類(abstract)

  • 應用場景:
  • 1.在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但是無法準確知道這些子類如何實現這些方法
  • 2.從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性
  • 作用
  • 不關註子類的實現,但是約束子類的設計
  • 使用規則
  • 1.abstract定義抽象類
  • 2.abstract定義抽象方法,只要聲明,不需要實現
  • 3.包含抽象方法的類是抽象類
  • 4.抽象類中可以包含普通的方法,也可以沒有抽象方法
  • 5.抽象類不能直接創建

  • 五、介面

  • 1.定義

  • 類的一種具體實現體,而介面定義了某一批所需要遵守的規範,介面不關心這些類的內部數據,也不關係這些類里的方法的實現細節,它只是規定這些類必須提供某些方法
  • 和類定義不同,定義介面不再使用class關鍵字,而是使用interface關鍵字
  • 2.語法格式

[修飾符] interface 介面名 [extends 父介面1,父介面2,...]
{
  零個到多個常量定義
  零個到多個抽象方法的定義
}
  • 介面就是用來被繼承,被實現,修飾符一般建議使用public
  • 介面中的方法只能是抽象方法,即使定義時不添加public abstract 修飾符,系統也會自動加上

  • 3.實現介面

  • 一個類可以實現一個或多個介面,實現介面使用implements關鍵字,Java中一個類只能繼承一個類,是不夠靈活的,通過實現多個介面可以做補充。
  • 如果需要繼承父類,繼承父類必須在實現介面之前


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • abs(x) 返回數字的絕對值,如abs(-10) 返回 10 ceil(x) 返回數字的上入整數,如math.ceil(4.1) 返回 5 cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1 exp(x) 返回e的x次冪(ex),如mat ...
  • 你沒有錯,現在的瀏覽器都不怎麼支持實體引用了,這是個無奈的現實。我記得上回試過,好像如果DTD不是單獨的文件而是內置到XML裡面的話,實體還可以顯示的。你可以試一下 ...
  • ...
  • 百度API:xlongwei 這個人提供的介面很多啊,也很實用:Word轉Html、Word轉Pdf、屬性配置、手機號段、微信公眾號消息加密、微信公眾號消息解密、二維碼、關鍵詞、分詞、拼音、生僻字、微博短鏈接。但是很多都不感興趣的,除了一個,那就是中文分詞啊。以前某天突然對瀏覽器以及編輯器中的滑鼠雙 ...
  • 新版六合彩投註網站系統源碼 (測試完整可商業運行) 帶新開獎結果》》》》》 網站系統可以支持代理開設,股東發展,普通會用等常用的功能。 玩法齊全》連碼自由對碰》各類玩法內附說明。資料庫文件 hs001 修改資料庫連接 文件夾 configs 文件config後臺管理 admin admin前臺會員目 ...
  • 本節介紹EnumMap的用法和實現原理,為什麼要針對枚舉類型單獨實現一個Map?它的用法和其他Map有什麼不同?內部是如何實現的?... ...
  • 效果: ...
  • 使用beans.xml文件進行bean的創建和註入通常是可行的,但在便利性上Spring提供了更簡單的方法——自動裝配 當然,我們也可以在創建bean時對它命名,在CDPlayer類中可以體會到。代碼如下: 值得註意的是,真正的實現過程與代碼主體非常複雜,@Component,@ComponScan ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...