Java中方法的学习
方法
方法的概念
在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法。
如:小明同学在路边准备坐车来学校学习。这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢?可采用坐公交车或坐出租车的方式来学校,那么,这种解决某件事情的办法,我们就称为方法。
所以:
Java方法是语句的集合,它们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
方法的优点:
- 使程序变得更简短而清晰。
- 有利于程序维护。
- 可以提高程序开发的效率。
- 提高了代码的重用性。
方法的定义
一般情况下,定义一个方法包含以下语法:
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
- 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
- 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
- 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
- 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 方法体:方法体包含具体的语句,定义该方法的功能。
静态方法(类的方法)
静态方法(Static Method)是属于类而不是类的实例的方法。它可以在不创建类的实例的情况下被调用。静态方法通常用于执行与类相关的操作,而不需要访问或修改特定实例的状态。
以下是关于静态方法的声明、调用以及与实例方法的区别:
声明静态方法:
在Java中,声明静态方法需要使用static关键字。静态方法可以直接属于类,而不是类的实例。
public class MyClass {
public static void myStaticMethod() {
// 静态方法的代码
}
}
调用静态方法:
你可以通过类名来调用静态方法,而不需要创建类的实例。
MyClass.myStaticMethod();
静态方法与实例方法的区别:
-
关联性:静态方法与类本身相关,而实例方法与类的实例相关。
-
调用方式:静态方法通过类名调用,而实例方法需要通过对象实例来调用。
-
访问权限:静态方法可以访问类的静态成员,但不能访问非静态成员(实例成员)。实例方法可以访问类的静态和非静态成员。
-
内部引用:静态方法中不能使用this关键字,因为它没有当前对象的引用。实例方法可以使用this来引用当前对象。
-
生命周期:静态方法在类加载时初始化,而实例方法在对象创建时初始化。
总之,静态方法是与类本身相关的方法,通常用于执行通用操作或访问静态成员。实例方法则是与类的实例相关的方法,可以访问和修改实例的状态。选择使用静态方法还是实例方法取决于你的需求和代码设计。
成员方法(对象的方法)
成员方法的定义
访问修饰符 返回参数类型 方法名(形参列表){ //方法主体
语句;
return 返回值;
}
-
形参列表:表示成员方法的输入,比如课件说的cal01(int n), getSum(int num1,int num2)
-
返回数据类型:表示成员方法输出,void表示没有返回值
-
方法主体:表示为了实现某一功能的代码块
-
return语句不是必须的
成员方法的好处
-
提高代码的复用性
-
可以将实现的细节封装起来,然后供其他用户来调用
注意事项和使用细节
访问修饰符
访问修饰符作用是控制方法使用的范围;如果不写访问修饰符,就是默认访问修饰符,
访问修饰符分为四种【public , protected, 默认, private】
返回数据类型
①一个方法最多有一个返回值
②返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
③如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值;而且要 求返回值类型必须和return的值类型一致或兼容
④如果方法是void,则方法体中可以没有return语句或者只写return
方法名
遵循驼峰命名法,最好见名知意,表达出该功能的意思即可,开发中按照规范
形参列表
①一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开
②参数类型可以为任意类型,包含基本类型或引用类型
③调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数
④方法定义时的参数称为形式参数,简称形参;方法调用时的传入参数称为实际参数,
简称实参。形参和实参的类型要一致或兼容、个数、顺序必须一致!
方法体
里面写完成功能的具体的语句,可以为输入、输出、变量、运算、分支、循环、方法调用,但里面不能再定义方法,即:方法不能嵌套定义
成员方法传参机制
-
基本数据类型的传参机制
结论:基本数据类型传递的是值(值拷贝),形参的任何改变不影响实参!
-
引用数据类型的传参机制
结论:引用数据类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
形参
形参:用来接收调用方法时传递的参数,只有在被调用时才分配内存,一旦调用结束,就释放内存空间。因此仅在方法内有效。
public void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
// 这里a,b就是形参,方法结束时,在栈空间就会被销毁。
实参
调用方法swap(6, 8); 其中6 8就是实参。
值传递和引用传递
值传递(pass by value):在调用函数时,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改,就不会影响到原来的实际参数;
public class SimplePassByValueExample {
public static void main(String[] args) {
int num = 5;
System.out.println("Before: " + num);
increment(num);
System.out.println("After: " + num);
}
public static void increment(int x) {
x = x + 1; // 这里的x是num的一个拷贝,所以num本身不会变
}
}
// 输出:
// Before: 5
// After: 5
引用传递(pass by reference):在调用函数时,将实际参数的地址直接传递到函数中。这样在函数中对参数进行的修改,就会影响到实际参数;
class SimpleObject {
int value;
SimpleObject(int value) {
this.value = value;
}
void setValue(int newValue) {
this.value = newValue;
}
int getValue() {
return value;
}
}
public class SimplePassObjectReference {
public static void main(String[] args) {
SimpleObject obj = new SimpleObject(5);
System.out.println("Before: " + obj.getValue());
changeValue(obj);
System.out.println("After: " + obj.getValue());
}
public static void changeValue(SimpleObject obj) {
obj.setValue(10); // 修改了obj引用的对象的内部状态
}
}
// 输出:
// Before: 5
// After: 10
值传递 | 引用传递 | |
---|---|---|
根本区别 | 会创建副本 | 不创建副本 |
所以 | 函数中无法改变原始对象 | 函数中可以改变原始对象 |
重载规则
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)