Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 与框架

Java 类参考

Java 有用资源

Java - 方法



Java 方法

Java 方法是语句的集合,这些语句组合在一起以执行操作。例如,当您调用 System.out.println() 方法时,系统实际上会执行几个语句才能在控制台上显示消息。

在本教程中,我们将学习如何在有或没有返回值的情况下创建自己的方法,如何在有或没有参数的情况下调用方法,以及如何在程序设计中应用方法抽象。

创建 Java 方法

要创建 Java 方法,应该有一个 访问修饰符 后跟返回类型、方法名称和参数列表。

创建 Java 方法的语法

考虑以下示例来解释方法的语法 -

modifier returnType nameOfMethod (Parameter List) {
   // method body
}

上面显示的语法包括 -

  • 修饰符 - 它定义了方法的访问类型,使用它是可选的。

  • 返回类型 - 方法可能返回一个值。

  • 方法名 - 这是方法名称。方法签名由方法名称和参数列表组成。

  • 参数列表 - 参数列表,它是方法的参数类型、顺序和数量。这些是可选的,方法可能包含零个参数。

  • 方法体 - 方法体使用语句定义方法的作用。

创建 Java 方法的示例

这是上面定义的名为 minFunction() 的方法的源代码。此方法接受两个参数 n1n2,并返回两者之间的最小值 -

/** the snippet returns the minimum between two numbers */

public static int minFunction(int n1, int n2) {
   int min;
   if (n1 > n2)
      min = n2;
   else
      min = n1;

   return min; 
}

调用 Java 方法

要使用方法,应调用它。调用方法有两种方式,即方法返回值或不返回值(无返回值)。

方法调用的过程很简单。当程序调用一个方法时,程序控制权会转移到被调用的方法。然后,此被调用的方法在两种情况下将控制权返回给调用方,当 -

  • 执行 return 语句。
  • 它到达方法结束的闭合大括号。

返回 void 的方法被认为是对语句的调用。让我们考虑一个例子 -

System.out.println("This is tutorialspoint.com!");

返回值的方法可以通过以下示例理解 -

int result = sum(6, 9);

示例:定义和调用 Java 方法

以下示例演示了如何定义方法以及如何调用它 -

public class ExampleMinNumber {
   
   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      int c = minFunction(a, b);
      System.out.println("Minimum Value = " + c);
   }

   /** returns the minimum of two numbers */
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

输出

Minimum value = 6

Java 方法中的 void 关键字

void 关键字允许我们创建不返回值的方法。这里,在下面的示例中,我们正在考虑一个 void 方法 methodRankPoints。此方法是一个 void 方法,它不返回任何值。对 void 方法的调用必须是一个语句,即 methodRankPoints(255.7);。它是一个 Java 语句,以分号结尾,如下面的示例所示。

示例:在方法中使用 void 关键字

public class ExampleVoid {

   public static void main(String[] args) {
      methodRankPoints(255.7);
   }

   public static void methodRankPoints(double points) {
      if (points >= 202.5) {
         System.out.println("Rank:A1");
      }else if (points >= 122.4) {
         System.out.println("Rank:A2");
      }else {
         System.out.println("Rank:A3");
      }
   }
}

输出

Rank:A1

在 Java 方法中按值传递参数

在调用过程中,需要传递参数。这些参数的顺序应与其在方法规范中相应参数的顺序相同。参数可以按值传递或按引用传递。

按值传递参数意味着用参数调用方法。通过这种方式,参数值将传递给参数。

示例:按值传递参数

以下程序显示了一个按值传递参数的示例。即使在方法调用之后,参数的值也保持不变。

public class swappingExample {

   public static void main(String[] args) {
      int a = 30;
      int b = 45;
      System.out.println("Before swapping, a = " + a + " and b = " + b);

      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("\n**Now, Before and After swapping values will be same here**:");
      System.out.println("After swapping, a = " + a + " and b is " + b);
   }

   public static void swapFunction(int a, int b) {
      System.out.println("Before swapping(Inside), a = " + a + " b = " + b);
      
      // Swap n1 with n2
      int c = a;
      a = b;
      b = c;
      System.out.println("After swapping(Inside), a = " + a + " b = " + b);
   }
}

输出

Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30

**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45

Java 方法重载

当一个类有两个或多个同名但参数不同的方法时,称为方法重载。它不同于覆盖。在覆盖中,方法具有相同的方法名称、类型、参数数量等。

让我们考虑前面讨论的查找整数类型最小数字的示例。如果,假设我们要查找双精度类型的最小数字。然后将引入重载的概念来创建两个或多个具有相同名称但参数不同的方法。

以下示例说明了这一点 -

示例:Java 中的方法重载

public class ExampleOverloading {

   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      double c = 7.3;
      double d = 9.4;
      int result1 = minFunction(a, b);
      
      // same function name with different parameters
      double result2 = minFunction(c, d);
      System.out.println("Minimum Value = " + result1);
      System.out.println("Minimum Value = " + result2);
   }

   // for integer
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
   
   // for double
   public static double minFunction(double n1, double n2) {
     double min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

输出

Minimum Value = 6
Minimum Value = 7.3

重载方法使程序更易读。这里,给出了两个同名但参数不同的方法。结果是整数和双精度类型中的最小值。

使用命令行参数

有时您希望在运行程序时将一些信息传递给程序。这是通过向 main( ) 传递命令行参数来实现的。

命令行参数是在执行程序时,在命令行上紧跟在程序名称后面的信息。在 Java 程序内部访问命令行参数非常容易。它们作为字符串存储在传递给 main( ) 的 String 数组中。

示例

以下程序显示它被调用的所有命令行参数 -

public class CommandLine {

   public static void main(String args[]) { 
      for(int i = 0; i<args.length; i++) {
         System.out.println("args[" + i + "]: " +  args[i]);
      }
   }
}

尝试按如下所示执行此程序 -

$java CommandLine this is a command line 200 -100

输出

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

Java 方法内部的 this 关键字

this 是 Java 中的一个关键字,在实例方法或构造函数中用作对当前类对象的引用。使用this,您可以引用类的成员,例如构造函数、变量方法

注意 - this 关键字仅在实例方法或构造函数中使用

This

通常,this 关键字用于 -

  • 在构造函数或方法中,如果实例变量和局部变量具有相同的名称,则区分它们。

class Student {
   int age;   
   Student(int age) {
      this.age = age;	
   }
}
  • 在一个类中从另一个构造函数(参数化构造函数或默认构造函数)调用一种类型的构造函数。这被称为显式构造函数调用。

class Student {
   int age
   Student() {
      this(20);
   }
   
   Student(int age) {
      this.age = age;	
   }
}

示例:在 Java 方法中使用 this 关键字

这是一个使用this关键字访问类成员的示例。将以下程序复制并粘贴到名为This_Example.java的文件中。

public class This_Example {
   // Instance variable num
   int num = 10;
	
   This_Example() {
      System.out.println("This is an example program on keyword this");	
   }

   This_Example(int num) {
      // Invoking the default constructor
      this();
      
      // Assigning the local variable <i>num</i> to the instance variable <i>num</i>
      this.num = num;	   
   }
   
   public void greet() {
      System.out.println("Hi Welcome to Tutorialspoint");
   }
      
   public void print() {
      // Local variable num
      int num = 20;
      
      // Printing the local variable
      System.out.println("value of local variable num is : "+num);
      
      // Printing the instance variable
      System.out.println("value of instance variable num is : "+this.num);
      
      // Invoking the greet method of a class
      this.greet();     
   }
   
   public static void main(String[] args) {
      // Instantiating the class
      This_Example obj1 = new This_Example();
      
      // Invoking the print method
      obj1.print();
	  
      // Passing a new value to the num variable through parametrized constructor
      This_Example obj2 = new This_Example(30);
      
      // Invoking the print method again
      obj2.print(); 
   }
}

输出

This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 10
Hi Welcome to Tutorialspoint
This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 30
Hi Welcome to Tutorialspoint

Java 方法可变参数 (var-args)

JDK 1.5 使您能够将相同类型的可变数量的参数传递给方法。方法中的参数声明如下 -

typeName... parameterName

在方法声明中,您指定类型后跟省略号 (...)。在一个方法中只能指定一个可变长度参数,并且此参数必须是最后一个参数。任何常规参数都必须位于它之前。

示例:使用可变参数 (var-args)

public class VarargsDemo {

   public static void main(String args[]) {
      // Call method with variable args  
	  printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
      if (numbers.length == 0) {
         System.out.println("No argument passed");
         return;
      }

      double result = numbers[0];

      for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("The max value is " + result);
   }
}

输出

The max value is 56.5
The max value is 3.0

finalize( ) 方法

可以定义一个方法,该方法将在垃圾回收器最终销毁对象之前被调用。此方法称为finalize( ),可用于确保对象干净地终止。

例如,您可以使用 finalize( ) 来确保关闭该对象拥有的打开文件。

要向类添加终结器,只需定义 finalize( ) 方法即可。Java 运行时在即将回收该类的对象时会调用该方法。

在 finalize( ) 方法中,您将指定在对象销毁之前必须执行的操作。

finalize( ) 方法具有以下通用形式 -

protected void finalize( ) {
   // finalization code here
}

这里,关键字 protected 是一个说明符,它阻止类外部定义的代码访问 finalize( )。

这意味着您无法知道何时甚至是否会执行 finalize( )。例如,如果您的程序在垃圾回收发生之前结束,则不会执行 finalize( )。

广告