Java 方法
1. 引入
举例
System.out.println()
- println() 是一个方法
- System 是系统类
- out 是标准输出对象
意思是调用系统类 System 中的标准输出对象 out 中的方法 println()。
2. 方法定义
语法
访问修饰符 返回值类型 方法名(参数列表){ 方法体 }
方法名命名规范,参见:Java 基本语法:3.Java 标识符。
如果方法的返回类型为 void ,则方法中不能使用 return 返回值。
方法也分为实例方法和类方法,加上关键字 static 的就是类方法。需要注意的是,构造方法是特殊的方法,不能用 static 修饰。而且类方法只能对类变量进行操作,也只能调用类中的类方法。当创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,则不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。
示例
public class TestMax { /** 主方法 */ public static void main(String[] args) { int i = 5; int j = 2; int k = max(i, j); System.out.println( i + " 和 " + j + " 比较,最大值是:" + k); } /** 返回两个整数变量较大的值 */ public static int max(int num1, int num2) { int result; if (num1 > num2) result = num1; else result = num2; return result; } }
这个程序包含 main 方法和 max 方法。main 方法是被 JVM 调用的,除此之外,main 方法和其它方法没什么区别。main 方法的头部是不变的,如例子所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表明参数是字符串数组。
Java的参数传递为值传递。也就是说,当我们传递一个参数时,方法将获得该参数的一个拷贝。实际上,我们传递的参数,一个是基本类型的变量,另一个为对象的引用。基本类型变量的值传递,意味着变量本身被复制,并传递给Java方法。Java方法对变量的修改不会影响到原变量。引用的值传递,意味着对象的地址被复制,并传递给Java方法。Java方法根据该引用的访问将会影响对象。
3. 方法重载
方法重载是多态性的一种,在进行方法重载的时候需要遵循以下的规则:
- 在使用方法重载的时候,必须通过方法中不同的参数列表来实现方法的重载。
- 不能通过访问权限,返回值类型和抛出的异常来实现重载。
- 重载的方法中允许抛出不同的异常。
- 可以有不同的返回值类型,可以有不同的访问修饰符,只要方法的参数列表不同即可。
4. 命令行参数
有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给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]); } } }
运行结果:
- 程序名并没有存储在args数组中,与C++不同,参见计算器第二步。
5. 可变参数
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.5
The max value is 3.0
感觉像接收一个数组。
6. finalize() 方法
Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。
finalize() 一般格式是:
protected void finalize() { // 在这里终结代码 }
关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用。当然,Java 的内存回收可以由 JVM 来自动完成。如果你手动使用,则可以使用上面的方法。
参考链接
- 菜鸟教程:Java 教程
- 实验楼:Java编程语言(新版)
- Java2实用教程 (第三版)_ 耿祥义,张跃平