JAVASE:方法

JavaSE 方法詳解

一、方法的核心概念

方法(Method)是一組執行特定任務的語句集合,它將代碼邏輯封裝為可復用的單元,提高代碼的模塊化和可維護性。

方法的組成

[修飾符] 返回類型 方法名([參數列表]) {// 方法體[return 返回值;] // 若返回類型為void,則無需return語句
}
二、方法的分類
1. 實例方法
  • 特點:通過對象調用,可訪問實例變量和其他實例方法。
  • 示例
    public class Person {private String name;// 實例方法public void setName(String name) {this.name = name;}public String getName() {return name;}
    }// 調用方式
    Person p = new Person();
    p.setName("張三"); // 必須通過對象調用
    
2. 靜態方法
  • 特點:使用 static 修飾,屬于類而非對象,可直接通過類名調用。
  • 限制:只能訪問靜態成員(靜態變量和靜態方法),無 this 關鍵字。
  • 示例
    public class MathUtils {// 靜態方法public static int add(int a, int b) {return a + b;}
    }// 調用方式
    int result = MathUtils.add(3, 5); // 直接通過類名調用
    
3. 構造方法
  • 特點:方法名與類名相同,無返回類型,用于初始化對象。
  • 分類:無參構造和有參構造。
  • 示例
    public class Student {private String name;// 無參構造public Student() {}// 有參構造public Student(String name) {this.name = name;}
    }
    
三、方法的參數傳遞

Java中參數傳遞方式為值傳遞

  • 基本類型:傳遞值的副本,方法內修改不影響原始值。
  • 引用類型:傳遞引用(內存地址)的副本,方法內可修改對象狀態,但無法重新賦值引用。

示例

// 基本類型參數
public void modifyValue(int x) {x = 100; // 修改的是副本,不影響原始值
}// 引用類型參數
public void modifyArray(int[] arr) {arr[0] = 100; // 修改數組元素,影響原始對象arr = new int[3]; // 重新賦值引用,不影響原始引用
}
四、方法的重載(Overload)
  • 定義:同一類中,方法名相同但參數列表不同的現象。
  • 規則:參數的類型、個數或順序不同,與返回類型無關。
  • 示例
    public class Calculator {public int add(int a, int b) { return a + b; }public int add(int a, int b, int c) { return a + b + c; } // 參數個數不同public double add(double a, double b) { return a + b; } // 參數類型不同
    }
    
五、方法的重寫(Override)
  • 定義:子類重新實現父類中已有的方法。
  • 規則
    • 方法名、參數列表、返回類型必須與父類一致(Java 5+ 支持協變返回類型)。
    • 訪問修飾符不能比父類更嚴格。
    • 不能重寫 finalstaticprivate 方法。
  • 示例
    public class Animal {public void makeSound() {System.out.println("動物發出聲音");}
    }public class Dog extends Animal {@Override // 注解:顯式標識重寫public void makeSound() {System.out.println("汪汪叫");}
    }
    
六、可變參數(Varargs)
  • 語法類型... 參數名
  • 特點
    • 可變參數本質是數組,可接收0個或多個參數。
    • 一個方法最多有一個可變參數,且必須位于參數列表末尾。
  • 示例
    public void printNumbers(int... numbers) {for (int num : numbers) {System.out.println(num);}
    }// 調用方式
    printNumbers(1, 2, 3); // 傳遞多個參數
    printNumbers(); // 傳遞0個參數
    
七、方法的遞歸
  • 定義:方法直接或間接調用自身。
  • 關鍵
    • 遞歸出口(終止條件)。
    • 遞歸公式(問題分解)。
  • 示例:計算階乘
    public int factorial(int n) {if (n <= 1) { // 遞歸出口return 1;}return n * factorial(n - 1); // 遞歸調用
    }
    
八、方法的異常處理
  • throws:聲明方法可能拋出的異常。
  • try-catch:在方法內部捕獲并處理異常。
  • 示例
    public void readFile(String path) throws IOException {// 方法可能拋出IOExceptionFileReader reader = new FileReader(path);// ...
    }public void safeRead(String path) {try {readFile(path);} catch (IOException e) {// 處理異常}
    }
    
九、面試常見問題
  1. 重載和重寫的區別?

    • 重載:同一類中方法名相同但參數不同,編譯時確定。
    • 重寫:子類覆蓋父類方法,運行時動態綁定。
  2. Java的參數傳遞是值傳遞還是引用傳遞?

    • 值傳遞。基本類型傳遞值的副本,引用類型傳遞引用的副本。
  3. 靜態方法能否調用實例方法?

    • 不能,靜態方法屬于類,不依賴對象,而實例方法需要通過對象調用。
  4. 可變參數的注意事項?

    • 一個方法最多有一個可變參數,且必須位于參數列表末尾。
十、最佳實踐
  1. 單一職責原則:方法應只做一件事,保持代碼簡潔。
  2. 參數驗證:在方法開始處檢查參數合法性,避免空指針異常。
  3. 避免過長方法:超過100行的方法應考慮拆分。
  4. 遞歸優化:遞歸可能導致棧溢出,復雜問題優先使用迭代。

方法是Java編程的基本單元,合理設計和使用方法是提高代碼質量的關鍵。

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

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

相關文章

MXNet-cu101 + CUDA 10.1 在 Windows 11 上啟用 GPU 的完整指南

一、報錯信息 (pytorch) C:\Users\Administrator\Desktop\test>D:/conda/anaconda3/envs/pytorch/python.exe c:/Users/Administrator/Desktop/test/test.py Traceback (most recent call last): File “c:/Users/Administrator/Desktop/test/test.py”, line 1, in import…

Python基礎數據類型與運算符全面解析

Python作為一門動態類型語言&#xff0c;擁有豐富的內置數據類型和運算符系統&#xff0c;構成了編程的基礎。本文將深入介紹Python核心數據類型的基本概念、特點及使用方法&#xff0c;并系統梳理運算符的分類、優先級和實際應用示例&#xff0c;幫助開發者全面掌握Python的基…

Mysql分區(單服務器應對大數據量方案)

參考資料&#xff1a; 參考視頻 參考博客 分區的復雜操作 參考資料 概述&#xff1a; 這里只講實操&#xff0c;不講原理&#xff0c;看原理請看參考資料Mysql自5.1后支持分區&#xff0c;在Mysql8之后只有InnoDB支持分區&#xff0c;Mysiam不支持分區本例只是一個簡單的說…

[Java惡補day22] 240. 搜索二維矩陣Ⅱ

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a; 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17…

基于Master-Slave主從博弈論的儲能與能源協調算法matlab仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統仿真參數 5.系統原理簡介 6.參考文獻 7.完整工程文件 1.課題概述 基于Master-Slave主從博弈論的儲能與能源協調算法matlab仿真.主從博弈&#xff08;Stackelberg Game&#xff09;是一種具有層級決策結構的博弈模型&am…

vue-print-nb 打印相關問題

一、背景與解決方案 1、ElementUI表格打印通病&#xff0c;均面臨邊框丟失、寬度超出問題&#xff1a;相關解決代碼有注釋&#xff1b; 2、大多數情況下不會打印頁眉頁腳的日期、網址、未配置popTitle顯示的undefined&#xff1a;相關解決代碼有注釋&#xff1b; 3、打印預覽頁…

Agent應用案例精選,以及主流Agent框架開源項目推薦

一、Agent技術概述 在人工智能領域,Agent(智能體)是指能夠感知環境、自主決策并執行動作以實現特定目標的智能系統。隨著大語言模型(LLM)的快速發展,基于LLM的Agent系統已成為當前AI研究的熱點方向,為復雜任務解決提供了全新范式。 Agent的核心特征 自主性(Autonomy): 能夠…

Linux下基礎IO

1 文件 這里首先得理解一下文件&#xff0c;文件存放在磁盤中&#xff08;磁盤是永久性存儲介質&#xff0c;是一種外設&#xff0c;也是一種輸入輸出設備&#xff09;&#xff0c;磁盤上的文件的所有操作&#xff0c;都是對外設的輸入和輸出簡稱IO&#xff0c;linux下一切皆?…

云原生核心技術 (6/12): K8s 從零到一:使用 Minikube/kind 在本地搭建你的第一個 K8s 集群

摘要 本文是一篇保姆級的實踐指南&#xff0c;旨在解決學習 Kubernetes (K8s) 時“環境搭建難”的頭號痛點。我們將對比分析 Minikube、kind、K3s 和 Docker Desktop Kubernetes 等主流本地 K8s 環境方案的優缺點&#xff0c;幫助你選擇最適合自己的工具。隨后&#xff0c;文章…

線程運行的現象和相關指令

一.多個線程運行的現象 1.規律 交替執行誰先誰后&#xff0c;不由我們控制 2.舉例 Slf4j(topic "c.Test6") public class Test06 {public static void main(String[] args) {//創建并運行線程1new Thread(()->{while (true){log.debug("running");…

Windows網絡配置避坑指南

Windows網絡配置避坑指南 一、網絡配置是什么?防火墻的“信任開關”二、何時需要手動切換網絡配置文件??必需切換的場景高危!絕對禁止選錯的兩個場景三、3種切換指南(Win10/11通用)方法1:圖形化操作(推薦小白)?方法2:用PowerShell強制切換方法3:注冊表底層修改(應…

基于ThinkPHP8.*的后臺管理框架--Veitool框架學習使用

基于ThinkPHP8.*的后臺管理框架--Veitool框架學習使用 一、安裝部署二、目錄結構 一、安裝部署 環境要求 Linux、Unix、macOS、Windows Nginx、Apache、IIS PHP > 8.1.0 MySQL > 5.7 下載地址 官網下載&#xff1a;https://www.veitool.com/download 境內倉庫&#xff…

Java多線程通信核心機制詳解

在Java中&#xff0c;多線程通信與協作主要通過以下幾種核心機制實現&#xff0c;每種方式適用于不同的并發場景&#xff1a; &#x1f504; 一、共享變量同步控制&#xff08;基礎方式&#xff09; // 使用volatile保證可見性 private volatile boolean flag false;// 線程A…

Django知識-視圖

視圖設置 一個視圖函數&#xff0c;簡稱視圖&#xff0c;是一個簡單的Python 函數&#xff0c;它接受Web請求并且返回Web響應。代碼寫在哪里也無所謂&#xff0c;只要它在你的應用目錄下面。但是為了方便視圖一般被定義在“應用/views.py”文件中。 視圖的第一個參數必須為Ht…

DevSecOps實踐:CI/CD流水線集成動態安全測試(DAST)工具

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 讓安全掃描成為代碼交付的“守門員” 引言&#xff1a;安全漏洞的代價&#xff0c;越早發現越好 在軟件開發領域&#xff0c;安全漏洞的修復成本隨著開發…

使用CSDN作為Markdown編輯器圖床

使用CSDN作為Markdown編輯器圖床 一、CSDN圖床的優勢 MD編輯器在撰寫文檔時功能強大&#xff0c;但插入圖片需借助圖床。CSDN作為免費圖床&#xff0c;操作簡單且穩定性高&#xff0c;適合日常使用。只需將圖片上傳至CSDN的MD編輯器&#xff0c;即可獲取可直接訪問的圖片地址…

python打卡day51

復習日 作業&#xff1a;day43的時候我們安排大家對自己找的數據集用簡單cnn訓練&#xff0c;現在可以嘗試下借助這幾天的知識來實現精度的進一步提高 還是繼續用上次的街頭食物分類數據集&#xff0c;既然已經統一圖片尺寸到了140x140&#xff0c;所以這次選用輕量化模型 Mobi…

Vuex 自動化生成工具

Vuex 自動化生成工具需求文檔 1. 需求背景 為提升前端開發效率&#xff0c;減少重復代碼編寫&#xff0c;需開發一個自動化工具&#xff0c;根據輸入參數自動生成完整的 Vuex 存儲模塊&#xff08;包括api.js&#xff0c;mutations.js&#xff0c;actions.js&#xff0c;gette…

深入淺出多路歸并:原理、實現與實戰案例解析

文章目錄 二路歸并多路歸并方法一&#xff1a;指針遍歷&#xff08;多指針比較法&#xff09;方法二&#xff1a;小根堆法&#xff08;最小堆歸并&#xff09; 實際場景外部排序 經典題目丑數Ⅱ方法一&#xff1a;三指針法方法二&#xff1a;優先隊列法&#xff08;K路歸并&…

Koji構建系統宏定義注入與Tag體系解析

在Red Hat生態的持續集成鏈條中&#xff0c;Koji作為核心構建系統&#xff0c;其靈活的宏定義機制與精密的Tag體系是保障軟件包高效流轉的關鍵。本文將系統闡述在既有構建目標中注入宏定義的技術路徑&#xff0c;并深度解析Koji中Target與Tag的概念架構及其版本演進差異。 一、…