【卓越教程】Java 方法(2)
示例
public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } public static void printGrade(double score) { if (score >= 90.0) { System.out.println('A'); } else if (score >= 80.0) { System.out.println('B'); } else if (score >= 70.0) { System.out.println('C'); } else if (score >= 60.0) { System.out.println('D'); } else { System.out.println('F'); } }}
以上实例编译运行结果如下: C 这里printGrade方法是一个void类型方法,它不返回值。 一个void方法的调用一定是一个语句。 所以,它被在main方法第三行以语句形式调用。就像任何以分号结束的语句一样。 通过值传递参数 调用一个方法时候需要提供参数,你必须按照参数列表指定的顺序提供。 例如,下面的方法连续n次打印一个消息:
public static void nPrintln(String message, int n) { for (int i = 0; i < n; i++) System.out.println(message); }
示例 下面的例子演示按值传递的效果。 该程序创建一个方法,该方法用于交换两个变量。
public class TestPassByValue { public static void main(String[] args) { int num1 = 1; int num2 = 2; System.out.println("Before swap method, num1 is " + num1 + " and num2 is " + num2); // 调用swap方法 swap(num1, num2); System.out.println("After swap method, num1 is " + num1 + " and num2 is " + num2); } /** 交换两个变量的方法 */ public static void swap(int n1, int n2) { System.out.println("\tInside the swap method"); System.out.println("\t\tBefore swapping n1 is " + n1 + " n2 is " + n2); // 交换 n1 与 n2的值 int temp = n1; n1 = n2; n2 = temp; System.out.println("\t\tAfter swapping n1 is " + n1 + " n2 is " + n2); }}
以上实例编译运行结果如下:
Before swap method, num1 is 1 and num2 is 2 Inside the swap method Before swapping n1 is 1 n2 is 2 After swapping n1 is 2 n2 is 1After swap method, num1 is 1 and num2 is 2
传递两个参数调用swap方法。有趣的是,方法被调用后,实参的值并没有改变。 方法的重载 上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢 解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:
public static double max(double num1, double num2) { if (num1 > num2) return num1; else return num2;}
如果你调用max方法时传递的是int型参数,则 int型参数的max方法就会被调用; 如果传递的事double型参数,则double类型的max方法体会被调用,这叫做方法重载; 就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表。 Java编译器根据方法签名判断哪个方法应该被调用。 方法重载可以让程序更清晰易读。执行密切相关任务的方法应该使用相同的名字。 重载的方法必须拥有不同的参数列表。你不能仅仅依据修饰符或者返回类型的不同来重载方法。
变量作用域变量的范围是程序中该变量可以被引用的部分。 方法内定义的变量被称为局部变量。 局部变量的作用范围从声明开始,直到包含它的块结束。 局部变量必须声明才可以使用。 方法的参数范围涵盖整个方法。参数实际上是一个局部变量。 for循环的初始化部分声明的变量,其作用范围在整个循环。 但循环体内声明的变量其适用范围是从它声明到循环体结束。它包含如下所示的变量声明: 你可以在一个方法里,不同的非嵌套块中多次声明一个具有相同的名称局部变量,但你不能在嵌套块内两次声明局部变量。命令行参数的使用 有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。 命令行参数是在执行程序时候紧跟在程序名字后面的信息。
实例 下面的程序打印所有的命令行参数:
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]: thisargs[1]: isargs[2]: a args[3]: command args[4]: line args[5]: 200args[6]: -100
实例
下面是一个使用构造方法的例子:
// 一个简单的构造函数class MyClass { int x; // 以下是构造函数 MyClass() { x = 10; }}
你可以像下面这样调用构造方法来初始化一个对象:
public class ConsDemo { public static void main(String args[]) { MyClass t1 = new MyClass(); MyClass t2 = new MyClass(); System.out.println(t1.x + " " + t2.x); } }
大多时候需要一个有参数的构造方法。
实例 下面是一个使用构造方法的例子:
// 一个简单的构造函数 class MyClass { int x; // 以下是构造函数 MyClass(int i ) { x = i; } }
你可以像下面这样调用构造方法来初始化一个对象:
public class ConsDemo { public static void main(String args[]) { MyClass t1 = new MyClass( 10 ); MyClass t2 = new MyClass( 20 ); System.out.println(t1.x + " " + t2.x); }}
运行结果如下: 10 20
可变参数
JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。 方法的可变参数的声明如下所示: typeName... parameterName 在方法声明中,在指定参数类型后加一个省略号(...) 。 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
实例
public class VarargsDemo { public static void main(String 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.5The max value is 3.0
finalize() 方法Java允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做finalize( ),它用来清除回收对象。 例如,你可以使用finalize()来确保一个对象打开的文件被关闭了。 在finalize()方法里,你必须指定在对象销毁时候要执行的操作。 finalize()一般格式是: protected void finalize(){ // 在这里终结代码} 关键字protected是一个限定符,它确保finalize() 方法不会被该类以外的代码调用。 当然,Java的内存回收可以由JVM来自动完成。如果你手动使用,则可以使用上面的方法
实例
public class FinalizationDemo { public static void main(String[] args) { Cake c1 = new Cake(1); Cake c2 = new Cake(2); Cake c3 = new Cake(3); c2 = c3 = null; System.gc(); //调用Java垃圾收集器 } } class Cake extends Object { private int id; public Cake(int id) { this.id = id; System.out.println("Cake Object " + id + "is created"); } protected void finalize() throws java.lang.Throwable { super.finalize(); System.out.println("Cake Object " + id + "is disposed"); } }
运行以上代码,输出结果如下:
C:\1>java FinalizationDemo Cake Object 1is created Cake Object 2is created Cake Object 3is created Cake Object 3is disposed Cake Object 2is disposed
以上就是【卓越教程】Java 方法(2)的内容,更多相关内容请关注PHP中文网(www.php.cn)!
推荐阅读
-
AIX 6.1 安装 Oracle 11g R2 报Java错误解决方法
-
使用PHP操作DB2 Express C的五种方法(1)_PHP教程
-
windows中PHP5.2.14以及apache2.2.16安装配置方法第1/2页_PHP教程
-
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法,yii2datepicker_PHP教程
-
Symfony2实现在doctrine中内置数据的方法,symfony2doctrine_PHP教程
-
第2本书·Java入門教程
-
php过滤或替换textarea换行回车rn的2种方法_PHP教程
-
java中hashCode、equals的使用方法教程
-
java中加密的实现方法(MD5,MD2,SHA)
-
java 判断一个数是否为2的整数次幂方法