Java方法是组合在一起来执行操作语句的集合,用来完成某种功能。如前面使用的:println(),nextInt()等都是方法。Java中的方法也就是C,C++语言中的函数。
一、Java方法的定义
- Java的方法特点
- Java的方法必须定义在类中
- Java方法如果有返回类型时,那么函数体中必须有return语句
- Java方法的返回类型为null时,函数体中可以不写return语句,要写return的话只能写return null;
- Java方法有三种修饰符
- final修饰的java方法,那么此方法不能被重定义(也就是重写)
- static修饰的java方法,那么此方法可以通过类名进行调用
- public修饰的java方法,访问权限最大,在项目的任何地方都可以访问
- private修饰的java方法,访问权限最小,只能在本类中访问
- protected,访问权限稍比public小,最多只能访问到不同包的子类
- 默认的修饰java方法,访问权限比privete稍大,最多能访问到同一包的子类。
- Java方法的定义格式,如下:
修饰符 返回值类型 方法名称 (参数列表) {
........
// 方法体
return 返回值;
}
- 修饰符:这个是可以选择是否填写,主要用于告诉编译器如何调用该方法。而且定义了该方法的访问权限
- 返回值类型:方法可能会返回的值
- 方法名称:是方法的实际名称,方法名和参数列表共同构成方法的签名
- 参数列表:参数像是一个占位符,当方法被调用时,传递值给参数。这个值被称为实参。参数列表是指方法的参数类型,顺序和参数的个数。参数是可选的,方法可以不包含任何的参数。
- 方法体:包含该方法的语句块,定义该方法的功能。
- 示例:
public void funcName(int i)
public static int funcName(int i, int j)
void funcName()
二、Java方法的参数
程序设计中的方法的参数主要是为了将参数的值传递给方法进行运算,完成特定的功能。而方法的参数一般分为两种类型:一种是传值调用,一种是传引用调用。下面分别介绍两种参数:
- 传值调用
- 方法接收的是一个变量的值
- 这种方式进行传值操作,效率不高
- 这种方式传的值,在运算的过程中是不会该实参的值的。
- 图解:
假设方法为:
public static void add(int c, int d){
c = c + 10;
d= d + 20;
}
假设调用方式为:
int a = 3;
int b = 4;
add(a, b);
- 传引用调用
- 该方式表示传的是调用者提供的地址
- 这种方式,如果对传的值操作,将会导致传的值发生变化,因为传的是地址
- 这种方式的效率高,因为没有和传值一样进行实参值的拷贝和赋值操作,因此在时间和空间上,都比传值的效率高
- 图解:
假设方法为:
public static void addAge(Student stu){
stu.age = stu.age + 1;
}
假设调用者为:
Student stu = new Student(20);
Student.addAge(stu);
- 可变参数
可变参数是指当在不确定方法会有多少个参数的时候进行使用,格式和源码见下示例:
- 格式:funcName(dataType c, dataType.... valueName)
- 当参数列表中,除开可变参数外还有其他的参数,那么可变参数必须放在其他非可变参数的后面,如上格式。
- 可变参数的本质其实是一个一维数组,因为可变参数的底层实现就是以一维数组进行实现的。
- 可变参数的使用示例(Code):
public class Test1 {
public static void main(String[] args) {
//调用可变参数方法
add("这是一个可变参数示例:", 1,2,3,4,5,6,7,8,9,12,3,4232);
}
//可变参数方法
public static void add(String str, int... element) {
System.out.println(str);
int sum = 0;
for (int i = 0; i < element.length; i++) {
sum += element[i];
}
System.out.println("sum: " + sum);
}
}
三、Java方法的重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。因为参数类型和参数的个数是方法重载识别的标签。
- 具体规定
- 方法名一定要相同
- 方法的参数列表的参数类型和参数个数必须要有一项不同
- 方法的返回值,修饰符可以相同,也可以不同
- 代码展示:
public class Test2 {
public static void main(String[] args) {
方法重载(5, 6);
方法重载('c', 5);
方法重载('c');
}
public static void 方法重载(int a, int b) {
System.out.println("方法重载...");
}
public void 方法重载(int b) {
System.out.println("方法重载...");
}
private static void 方法重载(char a, int b) {
System.out.println("方法重载...");
}
private static void 方法重载(char ch) {
System.out.println("方法重载...");
}
}
四、Java的几个特殊的方法
- main方法:这是程序的入口,被jvm调用,它的书写格式是固定的,不能被改变,而且main方法的String参数是通过控制台向java程序提供参数。
- 构造方法:对于每一个类,如果在没有定义构造方法的时候,会有一个默认的构造方法,当自己创建了构造方法,那么默认构造消失,构造方法的主要作用有如下三个方面:
- 创建类的对象,对类实例化
- 可以对类的数据进行初始化
- 在某些情况下,可以使用构造方法进行参数的传递(当此类无getXxx和setXxx方法的时候)
- finalize方法:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。底层调用的是gz()方法