方法概述
当我们在编写Java程序时,方法就是一组完成特定任务的代码块。你可以把方法看作是一个工具,它可以接受一些数据(输入参数),执行一些操作,然后可能返回一个结果。
举个例子,假设需要写一个方法来计算两个数字的和。你可以定义一个名为"add"的方法,它接受两个数字作为输入参数,并返回它们的和。这个方法可以被其他地方多次调用,而不需要重复编写相同的代码。
public class function {
public static int add(int a, int b) {
int sum = a + b;
return sum;
}
public static void main(String[] args) {
int result = add(5, 3); //第一次调用add方法
System.out.println("Sum: " + result);
result = add(10, 20); //第二次调用add方法
System.out.println("Sum: " + result);
}
}
项目中具体的哪些任务需要写成方法,需要根据自己的项目经验判断,并不是所有任务都适合写成方法。
方法分类
在Java程序中,我们可以根据方法是否带有static
修饰符,可以将方法分为:
- 实体方法 :也可以叫做成员方法。方法没有带
static
关键字,这种方法不能通过"类名.方法名"的形式直接调用,需要先创建(new
)出类的对象,通过"对象名.方法名"的形式调用。
- 静态方法 :也叫做类方法,方法带有
static
关键字。可以通过"类名.方法名"的形式直接调用。
方法定义
基本语法:
修饰符 返回值类型 方法名(参数列表)
{
方法体
...
return 返回值; //这里这个返回值可以是变量也可以是表达式
}
一个方法的定义由以下几个部分构成:
- 修饰符(Modifiers) :修饰符是可选的,用于控制方法的访问权限和其他特性。常见的修饰符包括
public
、private
、protected
和static
等。修饰符确定了其他类是否可以访问该方法。 - 返回类型(Return Type) :返回类型指定了方法执行完毕后返回的数据类型。如果方法不返回任何值,则返回类型使用关键字
void
表示。如果方法返回一个值,返回类型则是该值的数据类型。 - 方法名(Method Name):方法名是标识符,用于唯一标识方法。命名约定通常使用驼峰命名法,即首字母小写,后续单词首字母大写。
- 参数列表(Parameter List):参数列表是一组用逗号分隔的参数,每个参数由参数类型和参数名组成。参数允许我们向方法传递数据。方法可以有零个或多个参数。
- 方法体(Method Body):方法体是包含在花括号({})中的代码块,它定义了方法执行的操作。方法体中的语句描述了方法的具体行为。
- 返回语句(Return Statement) :返回语句用于指定方法的返回值。如果方法有返回类型,那么在方法体中使用
return
关键字返回一个值。如果方法的返回类型是void
,则可以省略返回语句或使用return
语句来提前结束方法的执行。
以下是一个方法的定义示例:
public static int add(int a, int b) {
int sum = a + b;
return sum;
}
在上面的示例中,方法定义具有public
和static
修饰符,返回类型为int
,方法名为"add",参数列表包含两个整数类型的参数a和b。方法体内部计算a和b的和,并通过return
语句返回结果。
通过这些组成部分,我们可以定义一个方法,使其具备特定的功能和行为,并可以在程序中多次使用。
有返回值方法
有返回值的方法是指在方法执行完毕后会返回一个特定数据类型的值。在Java程序中,我们可以在方法定义中指定返回类型来表示方法将返回的数据类型。返回值可以是基本数据类型(如整数、浮点数、布尔值等)或引用数据类型(如对象、数组等)。
int
类型返回值:
public class function {
public static int sum(int x,int y){
return x+y;
}
}
double
类型返回值:
public class function {
public static double sum(double x,double y){
return x+y;
}
}
boolean
类型返回值:
public class function {
public static boolean isTrue(){
if (10>20){
return true;
}
else {
return false;
}
}
}
在boolean
类型举例中,可以看出参数列表那里什么都没有写,这是因为没有参数就可以不写,直接省略,不需要写void
。
return
在方法中主要有两个作用:
- 返回值: 当方法具有返回类型时,
return
用于将计算得到的结果返回给调用该方法的地方。通过return
关键字,我们可以指定方法执行完毕后要返回的值,该值的类型必须与方法的返回类型匹配。 - 方法终止:
return
还可以用于提前终止方法的执行,并返回到方法的调用位置。当遇到return
语句时,方法将立即停止执行,并将控制权返回给调用该方法的地方。这可以用于在特定条件下提前结束方法的执行。
public class function {
// 返回值
public static int sub(int x, int y){
return x-y;
}
// 方法终止1
public static int sum(int x, int y){
System.out.println("这条输出语句将会执行,因为这条语句位于return前面");
return x+y;
System.out.println("这条输出语句将不会执行,因为这条语句位于return后面");
}
// 方法终止2
public static void printf(){ //这里使用了无返回值方法
System.out.println("这条输出语句将会执行,因为这条语句位于return前面");
return;
System.out.println("这条输出语句将不会执行,因为这条语句位于return后面");
}
}
一般来说,使用return
的方法终止的时候要配合if
语句使用,因为需要判断在什么情况下需要终止方法。
无返回值方法
在定义无返回值方法的时候需要在返回类型的地方写void
,可以不写return
:
public class function {
public static void print(){
System.out.println("我是一个无返回值方法");
// 因为没有返回,所以我不需要写void,当然也可以使用return提前终止方法
}
}
方法使用
静态方法使用
- 使用类名直接调用:可以直接使用类名调用静态方法,不需要创建类的实例。例如:
ClassName.staticMethod(args);
- 使用对象引用调用:虽然不推荐,但在某些情况下也可以使用对象引用调用静态方法。例如:
objectReference.staticMethod(args);
。然而,这种方式会导致代码不易理解,应该尽量避免。
public class MathUtils {
public static int sum(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int result = MathUtils.sum(5, 3);
System.out.println(result); // 输出:8
}
}
在上面的示例中,sum
方法是一个静态方法,可以通过类名直接调用。在 main
方法中,我们使用 MathUtils.sum(5, 3)
来调用静态方法,将返回的结果赋值给 result
变量,并将其输出。
实体方法使用
- 使用对象引用调用:实体(非静态)方法是与对象关联的,必须通过对象引用来调用。首先需要创建类的实例,然后使用对象引用调用方法。例如:
objectReference.instanceMethod(args);
需要注意的是,静态方法只能访问静态成员(静态变量和静态方法),而非静态方法可以访问静态成员和实例成员(实例变量和实例方法)。
public class Circle {
private double radius; // 定义了一个私有的double类型的变量
public Circle(double radius) { //这是一个构造器,可以简单的看成是一个与类名相同的一个方法,这里用来初始化radius变量
this.radius = radius;
}
public double calculateArea() {
return Math.PI * radius * radius; //将计算圆的面积作为返回值
}
public static void main(String[] args) {
Circle circle = new Circle(5.0);
double area = circle.calculateArea();
System.out.println(area); // 输出:78.53981633974483
}
}
在上面的示例中,Circle
类有一个非静态方法 calculateArea()
,它计算圆的面积。在 main
方法中,我们创建了一个 Circle
对象,并通过对象引用 circle
调用了非静态方法 calculateArea()
。方法返回计算得到的面积,我们将其赋值给 area
变量,并将其输出。
总结来说,静态方法可以直接使用类名进行调用,而非静态方法需要先创建类的实例,然后通过对象引用进行调用。