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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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的概念架构及其版本演进差异。 一、…