Java - 方法
Java 方法是一组语句,它们组合在一起以执行操作。当您调用 System.out.println() 方法,例如,系统实际上执行了几条语句,以便在控制台上显示一条消息。
现在您将学习如何创建自己的带或不带返回值的方法,调用带或不带参数的方法,以及在程序设计中应用方法抽象。
制作方法
考虑以下示例来解释方法的语法 -
语法
public static int methodName(int a, int b) { // body }
在这里,
-
公共静态 − 修饰符
-
int − 返回类型
-
方法名 − 方法名称
-
a,b − 形参
-
int a,int b − 参数列表
方法定义由方法头和方法体组成。以下语法中显示了相同的内容 -
语法
modifier returnType nameOfMethod (Parameter List) { // method body }
上面显示的语法包括 -
-
修饰符 − 定义方法的访问类型,可选用。
-
返回类型 − 方法可能返回一个值。
-
方法名称 − 这是方法名称。方法签名由方法名和参数列表组成。
-
参数列表 − 参数列表,它是方法的参数类型、顺序和数量。这些是可选的,方法可能包含零个参数。
-
方法体 − 方法体定义了方法对语句的作用。
示例
这是上面定义的方法的源代码 min() .该方法接受两个参数 num1 和 num2 并返回两者之间的最大值 -
/** 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; }
方法调用
为了使用一个方法,它应该被调用。调用方法有两种方式,即方法返回值或不返回值(无返回值)。
方法调用的过程很简单。当程序调用方法时,程序控制权转移到被调用方法。这个被调用的方法然后在两种情况下将控制权返回给调用者,当 -
- return 语句被执行。
- 它到达结束右括号的方法。
返回 void 的方法被视为对语句的调用。让我们考虑一个例子 -
System.out.println("This is tutorialspoint.com!");
方法返回值可以通过下面的例子来理解 -
int result = sum(6, 9);
以下是演示如何定义方法以及如何调用它的示例 -
示例
现场演示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
void 关键字
void 关键字允许我们创建不返回值的方法。在这里,在下面的示例中,我们正在考虑一个 void 方法 methodRankPoints .该方法是一个 void 方法,它不返回任何值。调用 void 方法必须是语句,即 methodRankPoints(255.7); .它是一个以分号结尾的 Java 语句,如下例所示。
示例
现场演示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
按值传递参数
在调用进程下工作时,要传递参数。这些应该与方法规范中它们各自的参数的顺序相同。参数可以传值也可以传引用。
按值传递参数意味着调用带有参数的方法。通过这个,参数值被传递给参数。
示例
以下程序显示了按值传递参数的示例。即使在方法调用之后,参数的值也保持不变。
现场演示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
方法重载
当一个类有两个或多个同名但参数不同的方法时,称为方法重载。它与覆盖不同。在覆盖中,一个方法具有相同的方法名、类型、参数个数等。
让我们考虑前面讨论的用于查找最小整数类型的示例。如果,假设我们要找到 double 类型的最小数量。然后会引入重载的概念,创建两个或多个同名但参数不同的方法。
以下示例解释相同 -
示例
现场演示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
this关键字
这个 是 Java 中的一个关键字,用作对当前类的对象的引用,在实例方法或构造函数中。使用 这个 您可以引用类的成员,例如构造函数、变量和方法。
注意 − 关键字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; } }
示例
这是一个使用 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 num to the instance variable num 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
变量参数(var-args)
JDK 1.5 使您能够将可变数量的相同类型的参数传递给方法。方法中的参数声明如下 -
typeName... parameterName
在方法声明中,您指定类型,后跟省略号 (...)。一个方法中只能指定一个变长参数,该参数必须是最后一个参数。任何常规参数都必须在它之前。
示例
现场演示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() 将不会执行。
java