介绍Java中的方法,方法如何定义、使用、重载
一、方法是什么
Java方法是语句的集合,它们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合。
- 方法包含于类或对象中。
- 方法在程序中被创建,在其他地方被引用。
二、方法的优点
- 程序更加简短清晰。
- 利于进行程序的维护。
- 可以提高程序开发的效率。
- 提高代码的重用性。
三、方法如何使用
1、命名
- 命名采取小驼峰形式命名,如
sumNumber 。第一个单词首字母小写,后面的单词首字母大写,不使用连字符。 - 下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:
test<MethodUnderTest>_<state> ,例如 testPop_emptyStack 。
2、定义
修饰符 返回值类型 方法名(参数类型 参数名){
···
方法体
···
return 返回值;
}
示例: 比较两个整型数字大小的方法
public static int maxNum(int a,int b) {
if (a > b)
return a;
else
return b;
}
public static void main(String[] args) {
System.out.println( maxNum(10,5));
}
注:
- 方法定义时不能嵌套。
- 方法定义时的参数是“形参”,方法调用时的参数是“实参”。
- 方法必须定义在类中,位置在调用位置的上方或下方都可以。
- 方法只有在调用的时候才会执行方法体中的代码。
2.1 形参与实参
形参是定义方法时使用的一个变量,用来接收调用方法时传递的值。形参的值是实参值得一份拷贝。用下面的例子来进行说明。
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("实参: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("形参: x = " + x + " y = " + y);
}
可以看到,形参的值发生了交换但实参并没有交换。因为这个调用过程是传值调用,可以使用数组解决这个问题,数组是引用类型。
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
3、方法的重载
一个类中的两个方法拥有相同的名字,但是有不同的参数列表,编译器通过方法的签名判断应该调用哪个方法。 示例: 对比大小方法进行重载,使其能够比较不同类型的数据的大小。
public static int maxNum(int a,int b) {
if (a > b)
return a;
else
return b;
}
public static double maxNum(double a,double b) {
if (a > b)
return a;
else
return b;
}
public static float maxNum(float a,float b) {
if (a > b)
return a;
else
return b;
}
public static double maxNum(double a,double b,double c) {
if(maxNum(a,b)>c)
return maxNum(a,b);
else
return c;
}
public static float maxNum(float a,float b,double c) {
if(maxNum(a,b)>c)
return maxNum(a,b);
else
return c;
}
3.1 方法签名
那么编译器是如何区分这些重载的方法呢? 编译器看到的是方法签名:经过编译器修改过的方法名称。格式:全路径+参数列表+返回值类型
public static int maxNum(int a,int b) {
if (a > b)
return a;
else
return b;
}
public static double maxNum(double a,double b) {
if (a > b)
return a;
else
return b;
}
public static float maxNum(float a,float b) {
if (a > b)
return a;
else
return b;
}
public static void main(String[] args) {
maxNum(10,20);
maxNum(12.5f,23.1f);
maxNum(12.3,21.2);
}
编译运行过后查看该代码的字节码文件,便能看到他们的方法签名
特殊字符 | 数据类型 |
---|
V | void | Z | boolean | B | byte | C | char | S | short | I | int | J | long | F | float | D | double | [ | 数组(其后加上其它特殊字符,表示对应数据类型的数组,“ [ ”数量表示几维数组) | L | 引用类型,L开头,“ ; ”结尾,中间为引用类型的全类名 |
4、构造方法
- 当对象被创建时,构造方法用来初始化该对象。构造方法与类名相同,但是没有返回值。
- Java中自动提供默认的构造方法,默认构造方法和类的访问修饰符相同。
- 当定义了自己的构造方法,默认构造方法就会失效。
示例:
class MyClass {
int x;
MyClass() {
x = 10;
}
}
使用构造方法初始化对象:
public class Test {
public static void main(String args[]) {
MyClass t1 = new MyClass();
MyClass t2 = new MyClass();
System.out.println(t1.x + " " + t2.x);
}
}
5、可变参数
可以应用在不确定某一参数的个数的情况之下。
- 在方法声明中,在指定参数类型后加一个省略号(…) 。
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
- 语法格式:
typeName... parameterName
示例:
public class TestMethod {
public static void main(String args[]) {
sumNum(1.5, 2.5, 3.5, 4.5, 5.5);
sumNum(1, 2, 3);
}
public static void sumNum( double... numbers) {
double sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("数字和为:"+sum);
}
}
|