一个方法包含以下语法:
修饰符 返回值类型 方法名 (参数类型 参数名){
...
方法体
...
return 返回值;
}
修饰符:
可选的,定义了该方法的访问类型。
返回值类型:
方法可能会返回值。没有返回值时,关键字是void。
方法名:
是方法的实际名称。方法名和参数表共同构成方法签名。
参数类型:
当方法被调用时传递值给参数。参数是可选的,方法可以不包含任何参数。
方法体:
方法体包含具体的语句,定义该方法的功能。
代码实例:
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
代码实例:
public class Main {
// 主方法,调用者
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println(k);
}
// 子方法,被调用者
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
}
-----------------------------------------------------------------
输出结果如下:
5
代码实例:
public class Main {
// 主方法,调用者
public static void main(String[] args) {
printGrade(78.5);
}
// void类型方法,它不返回值
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 {
System.out.println('D');
}
}
}
-----------------------------------------------------------------
输出结果如下:
C
一个类的两个方法拥有相同的名字,但是必须有不同的参数列表,不能仅仅依据修饰符或者返回类型的不同来重载方法。
代码实例:
public class Main {
// 主方法,调用者
public static void main(String[] args) {
// int
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println(k); // 输出5
//double
double a = 5.5;
double b = 2.2;
double c = max(a, b);
System.out.println(c); // 输出5.5
}
// int子方法,被调用者
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
//都是max方法,这就是方法的重载
// double子方法,被调用者
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
}
-----------------------------------------------------------------
输出结果如下:
5
5.5
语法规则:
1、方法名必须与类名相同。
2、无返回值类型,也不能用void修饰(有任何返回值类型的方法都不是构造方法)。
3、可以指定参数,也可以不指定参数;分为有参构造方法和无参构造方法。
构造方法的特点:
1、当没有指定构造方法时,系统会自动添加无参的构造方法。
2、构造方法可以重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法。
3、构造方法是不被继承的。
4、当我们手动的指定了构造方法时,无论是有参的还是无参的,系统都将不会再添加无参的构造方法。
5、构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值。
6、构造方法不能被static、final、synchronized、abstract和native修饰。
代码实例:
public class Main {
public static void main(String[] args) {
// 既可以调用带参数的构造方法
Person p1 = new Person("XiaoMing", 15);
// 也可以调用无参数构造方法
Person p2 = new Person();
}
}
// 和类名相同
// 无返回值类型,也没有void修饰
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
-----------------------------------------------------------------
输出结果如下:
[空]
它用来清除回收对象。
1、关键字protected是一个限定符,它确保finalize()方法不会被该类以外的代码调用。
2、Java的内存回收可以由JVM来自动完成。如果手动使用,则就是finalize()方法。
代码实例:
public class Main {
public static void main(String[] args) {
Cake c1 = new Cake(1);
Cake c2 = new Cake(2);
Cake c3 = new Cake(3);
c2 = c3 = null;
// 调用Java垃圾收集器
System.gc();
}
}
class Cake extends Object {
private int id;
public Cake(int id) {
this.id = id;
System.out.println("创建" + id);
}
// finalize()方法
protected void finalize() throws java.lang.Throwable {
super.finalize();
System.out.println("删除" + id);
}
}
-----------------------------------------------------------------
输出结果如下:
创建1
创建2
创建3
删除3
删除2