虽然我们写过很多很多的方法,但是**** 什么是方法**** 呢?
在Java中,方法是语句的集合,它们在一起执行一个功能。是解决一类问题的步骤的有序组合,包含于类或对象中,在程序中被创建,在其他地方被引用。
为什么要写方法呢?自然是有*** 它的优点***。
- 使程序变得更简短而清晰。
- 有利于程序维护。
- 可以提高程序开发的效率。
- 提高了代码的重用性。
**** 方法的命名规则****
- 必须以字母、'_'或'$'开头。
- 可以包括数字,但不能以它开头。
public static int funcName(int a, int b) {
// body
}
其中:
1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用
2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为**** void ****;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用**** return ****语句返回值
3、 方法名:定义的方法的名字,必须使用合法的标识符
4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开
**** 方法的调用****
要想使用一个方法,该方法必须要被调用。方法调用有两种方式,一种是有返回值的,一种是没有返回值的。
调用方法很简单,当程序需要调用一个方法时,控制程序转移到被调用的方法,方法将会返回两个条件给调用者:
- 返回一条执行语句
- 执行到方法结束
将返回void的方法作为一个调用语句,例如:
System.out.println("你好,明天!");```
该方法的返回值可以通过下面的例子被理解:
int result = sum(6, 9);```
****Java 中无参无返回值方法的使用****
public class Demo9 {
public static void main(String[] args) {
Demo9 hello = new Demo9();
hello.show();
}
public void show() {
System.out.println("加油!");
}
}
****Java 中无参带返回值方法的使用****
public class Demo9 {
public static void main(String[] args) {
//创建对象,对象名叫hello
Demo9 hello=new Demo9();
//调用方法并接收方法的返回值,保存在变量sum中
int sum=hello.calNum();
System.out.println("两数之和:"+sum);
}
// 定义无参数返回值的方法
public int calNum() {
int a = 5;
int b = 10;
int sum = a + b;
return sum;
}
}
**** Java 中带参无返回值方法的使用****
public class Demo10 {
public static void main(String[] args) {
Demo10 hello=new Demo10();
hello.calcAvg(50, 51);
}
// 定义带参数返回值的方法
public void calcAvg(int a,int b){
double avg=(a+b)/2.0;
System.out.println("平均分: "+avg);
}
}
**** Java 中带参带返回值方法的使用****
public class Demo11 {
public static void main(String[] args) {
Demo11 hello=new Demo11();
int []scores={79,52,80,99};
//调用方法,传入成绩数组,并取得成绩的个数
int count=hello.sort(scores);
}
public int sort(int []scores) {
Arrays.sort(scores);
System.out.println(Arrays.toString(scores));
return scores.length;
}
}
**** 构造方法 ****
当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
不管你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个默认构造方法,它把所有成员初始化为0。
一旦你定义了自己的构造方法,默认构造方法就会失效。
例如:
// 一个简单的构造函数
class MyClass {
int x;
// 以下是构造函数
MyClass() {
x = 10;
}
}
**** 方法重写与方法重载的区别****
在面向对象程序设计的思想中,类的继承和多态性主要就是体现在子类重写父类的方法。而构造方法的重载作为方法重载的一个典型特例,可以通过重载构造方法来表达对象的多种初始化行为。
参考博客: 方法重写与方法重载
**** finalize() 方法****
Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,用来清除回收对象。例如,你可以使用 finalize() 来确保一个对象打开的文件被关闭了。
在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。
finalize()方法一般是如下形似:
protected void finalize( )
{
// 在这里终结代码
}
关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用。
当然,Java 的内存回收可以由 JVM 来自动完成。如果手动使用,则可以使用上面的方法。例子:
public class Demo12 {
public static void main(String[] args) {
Cake c1 = new Cake(1);
Cake c2 = new Cake(2);
Cake c3 = new Cake(3);
c2 = c3 = null;
System.gc(); // 调用Java垃圾收集器
}
}
class Cake extends Object {
private int id;
public Cake(int id) {
this.id = id;
System.out.println("Cake Object " + id + "is created");
}
protected void finalize() throws java.lang.Throwable {
super.finalize();
System.out.println("Cake Object " + id + "is disposed");
}
}
运行结果如下:
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed
关于方法的事,就讲这么多了。如有不对的地方,请指正。谢谢~