目录
一、方法的概述
就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。当我们需要这个功能时,就可以去调用。
这样即实现了代码的复用性,也解决了代码冗余的现象。
Java中的方法可以带有参数,可以返回值,也可以不带参数和返回值。方法可以在类中或在类之外定义,但必须在类中声明。
二、方法的定义
修饰符 返回值类型 方法名 (参数列表){
代码。。。
return 返回值;
}
修饰符:
public:表示该方法可以被任意的类访问。
protected:表示该方法只能被同一个包内的类访问,或者是该类的子类。
private:表示该方法只能被同一个类内部的方法调用,不能被其他类调用。
default(默认):没有显式指定修饰符,即不写任何修饰符。表示该方法只能被同一个包内的类访问。
final:表示该方法不能被重写(Override)。
static:表示该方法为静态方法,可以通过类名直接调用,无需实例化对象。
我们开发过程中常用的是public、praivate、static三种。
static定义的方法称为静态方法。在Java中,静态方法是一种特殊类型的方法,它可以通过类名直接调用,而无需先创建该类的实例(new)。静态方法在Java中使用频率很高,因为它们提供了一种方便的方式来访问类级别的属性和方法,同时避免了创建多个实例的开销。
静态方法的定义与普通方法类似,但需要使用static关键字来修饰方法。
静态方法和非静态方法有什么区别呢?
静态方法是属于类的方法,而非静态方法是属于对象的方法。在类加载时,静态方法就会被加载到内存中,而非静态方法需要在创建对象后才能调用。
静态方法可以通过类名直接调用,不需要创建对象,而非静态方法必须通过对象调用。静态方法中不能使用this关键字,因为它没有实例对象。而非静态方法可以使用this关键字来引用实例对象。
静态方法可以访问静态成员,包括静态变量和静态方法,但不可以访问非静态成员。而非静态方法可以访问非静态成员和静态成员。
静态方法通常用于实现一些工具方法,如Math类中的max()方法,而非静态方法用于实现对象的行为,如在Person类中定义一个run()方法。
总之,静态方法和非静态方法之间的区别在于它们的作用范围、调用方式和访问能力。需要根据具体需求选择使用哪种方法。
返回值类型:
空类型(void):表示没有返回值。
基本数据类型:例如int、float、double等。
引用数据类型:例如字符串、数组、自定义对象等。
枚举类型、Optional类等
方法名:
方法的命名应该以小写字母开头,采用驼峰命名法。方法名应该清晰明了,能够描述出它所执行的功能。
注意:
方法定义的先后顺序无所谓。
方法的定义不能产生嵌套包含关系。
方法定义好了之后,不会执行,如果需要执行,一定要进行方法的调用
以下是一个简单的Java方法的例子:
public class MyClass {
public static void main(String[] args) {
System.out.println("Hello World!");
myMethod();//调用myMethod方法
}
static void myMethod() {
System.out.println("This is my method.");
}
}
在这个例子中,我们定义了一个名为 myMethod() 的方法。它不带参数,也没有返回值。我们在main方法中调用了它,输出了相应的结果。
参数
可以没有,也可以有多个,在调用时需要与类型一一对应。
三、方法的调用
在 Java 中,方法可以通过以下三种方式进行调用:
- 对象调用:先创建一个类的对象,然后通过该对象来调用方法。这种方式适用于非静态方法,即实例方法。例如:
MyClass obj = new MyClass(); // 创建 MyClass 类的对象
obj.myMethod(); // 调用该对象的 myMethod 方法
- 类调用:直接通过类名来调用静态方法或静态成员变量。这种方式适用于静态方法或静态成员变量。例如:
MyClass.myStaticMethod(); // 调用 MyClass 类的静态方法 myStaticMethod
System.out.println(MyClass.myStaticVariable); // 直接访问 MyClass 类的静态成员变量 myStaticVariable
- 类型转换调用:将一个对象转换为一个类或接口的类型,并调用该类型中声明的方法。这种方式也适用于非静态方法,即实例方法。例如:
MyInterface obj = new MyClass(); // 将 MyClass 对象转换为 MyInterface 类型
obj.myMethod(); // 调用 MyInterface 接口中的 myMethod 方法
需要注意的是,方法的调用方式受到访问修饰符的限制,如果方法的访问修饰符为 private,则只能在该类中被访问调用。除此之外,方法的调用方式不影响方法的实现和功能。
四、方法的重载
在 Java 中,方法重载指的是在同一个类中定义了两个或多个方法,它们具有相同的名称但参数数量或类型不同的情况。方法重载的实现方式:方法名相同,但参数个数、参数类型或参数顺序不同。例如:
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public String add(String a, String b) {
return a + b;
}
上面的代码中,三个 add 方法的方法名都相同,但是它们的参数个数、类型或顺序不同。第一个 add 方法接收两个 int 类型的参数,并返回它们的和;第二个 add 方法接收两个 double 类型的参数,并返回它们的和;第三个 add 方法接收两个 String 类型的参数,并将它们拼接在一起返回。这三个方法都是 add 方法,但它们的参数和返回值不同,因此可以被视为不同的方法。
当我们调用 add 方法时,编译器会根据我们传递的参数类型和数量来决定调用哪个 add 方法。例如:
int sum1 = add(2, 3); // 调用第一个 add 方法
double sum2 = add(2.5, 3.5); // 调用第二个 add 方法
String sum3 = add("Hello", " World"); // 调用第三个 add 方法
这种方法重载的设计可以提高编程的灵活性,使得我们能够更好地调用方法。同时需要注意的是,方法重载是静态绑定的,也就是说,在编译时期就已经确定了具体要调用的方法。
ps: 这节写的很烂,介绍的很笼统,其中有许多知识要在后面的章节学完后才能更好的理解。这里建议大家将目前的方法比作c语言中的函数,与函数的概念和使用方法大致相同。等后面引入对象的概念后就能够更好的理解方法了。