方法就是对象所具有的动态功能。java 类中方法的声明采用以下格式:
访问修饰符 修饰符 返回值类型 方法名称 (参数列表) throws 异常列表 {方法体}
访问修饰符 : 可以使用四种不同的访问修饰符中的一种,包括public、 protected、无修饰符和 private。public 访问修饰符表示方法可以从任何其它代码调用。private表示方法只可以由该类中的其它方法来调用。protected 将在以后的课程中讨论。
修饰符:是对方法特性的描述,例如后面会学习到的:static、final、abstract、synchronized 等等。
返回值类型:表示方法返回值的类型。如果方法不返回任何值,它必须声明为 void(空)。
Java 技术对返回值是很严格的,例如,如果声明某方法返回一个int值,那么方法必须从所有可能的返回路径中返回一个int值(只能在等待返回该 int 值的上下文中被调用。)
方法名称:可以是任何合法标识符,并带有用已经使用的名称为基础的某些限制条件。
参数列表:允许将参数值传递到方法中。列举的元素由逗号分开,而每一个元素包含一个类型和一个标识符。在下面的方法中只有一个形式参数,用 int 类型和标识符 days 来声明:
public void test(int days){}
throws 异常列表:子句导致一个运行时错误(异常)被报告到调用的方法中,以便以合适的方式处理它。异常在后面的课程中介绍。
花括号内是方法体,即方法的具体语句序列。
示例
比如现在有一个“车”的类——Car,“车”具有一些基本的属性,比如四个轮子,一个方向盘,车的品牌等等。当然,车也具有自己的功能,也就是方法,比如车能够“开动”——run。要想车子能够开动,需要给车子添加汽油,也就是说,需要为run方法传递一些参数“油”进去。车子就可以跑起来,这些油可以供行驶多少公里?就需要run方法具有返回值“行驶里程数”。
package cn.Javadriver.javatest;
public class Car {// 车这个类
private String make;// 一个车的品牌
private int tyre;// 一个车具有轮胎的个数
private int wheel;// 一个车具有方向盘的个数
public Car() {
// 初始化属性
make = "BMW";// 车的品牌是宝马
tyre = 4;// 一个车具有4个轮胎
wheel = 1;// 一个车具有一个方向盘
}
/**
* 车这个对象所具有的功能,能够开动
*
* @param oil 为车辆加汽油的数量
* @return 车辆行驶的公里数
*/
public double run(int oil) {
// 进行具体的功能处理
return 100*oil/8;
}
public static void main(String[] args){
Car c=new Car();
double mileage=c.run(100);
System.out.println("行驶了 "+mileage+" 公里");
}
}
main方法是一个特殊的方法,如果按照public static void main(String[] args)的格式写,它就是一个类的入口方法,也叫主函数。当这个类被java指令执行的时候,首先执行的是main方法,如果一个类没有入口方法,就不能使用java指令执行它,但可以通过其他的方法调用它。
形参和实参
形参:就是形式参数的意思。是在定义方法名的时候使用的参数,用来标识方法接收的参数类型,在调用该方法时传入。
实参:就是实际参数的意思。是在调用方法时传递给该方法的实际参数。
比如:上面的例子中“int oil”就是个形式参数,这里只是表示需要加入汽油,这个方法才能正常运行,但具体加入多少,要到真正使用的时候,也就是调用这个方法的时候才具体确定,加入调用的时候传入“100”,这就是个实际参数。
形参和实参有如下基本规则:
1、形参和实参的类型必须要一致,或者要符合隐含转换规则
2、形参类型不是引用类型时,在调用该方法时,是按值传递的。在该方法运行时, 形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的值复制一份,在该方法运行结束的时候形参被释放,而实参内容不会改变。
3、形参类型是引用类型时,在调用该方法时,是按引用传递的。运行时,传给方法的是实参的地址,在方法体内部使用的也是实参的地址,即使用的就是实参本身对应的内存空间。所以在函数体内部可以改变实参的值。
参数可变的方法
从 JDk5.0 开始,提供了参数可变的方法。
当不能确定一个方法的入口参数的个数时,5.0 以前版本的 Java 中,通常的做法是将多个参数放在一个数组或者对象集合中作为参数来传递,5.0 版本以前的写法是:
Int sum(Integer[] numbers){…}
//在另一个方法中调用该方法
sum(new Integer[] {12,13,20});
而在 5.0 版本中可以写为:
//注意:方法定义中是三个点
int sum(Integer... numbers){
//方法内的操作
}
//调用该方法
sum(12,13,20);//正确
sum(10,11); //正确
也就是说,传入参数的个数并不确定。但请注意:传入参数的类型必须是一致的,究其本质就是一个数组。
显然,JDK5.0版本的写法更为简易,也更为直观,尤其是方法的调用语句,不仅简化很多,而且更符合通常的思维方式,更易于理解
¥498.00
¥399.00
¥29.00
¥299.00