什么是方法
方法是Java中的一个核心的概念,是在学习Java路上所要一直使用的东西,方法的作用就是去封装一段能够完成一个或一些特定功能的代码块,从而让这个功能能够随时被使用,减轻代码的冗余,大大提升码代码的效率。(代码在其他语言中也被称为函数)
方法的格式
方法声明格式:
[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){
Java语句;
}
这里修饰符可以省略不写,无返回值则填写void
方法的调用方式:
对象名.方法名(实参列表)
方法的详细说明:
形式参数:在方法声明时用于接收外界传入的数据。
实参:调用方法时实际传给方法的数据。
返回值:方法在执行完毕后返还给调用它的环境的数据。
返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。
一些注意事项:
- 实参的数目、数据类型和次序必须和所调用的方法声明的形式参数列表匹配。
- return 语句终止方法的运行并指定要返回的数据。
- Java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本):
3.1 基本类型传递的是该数据值的copy值。
3.2 引用类型传递的是该对象引用的copy值,但指向的是同一个对象。
方法的重载(Overload)
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法。重载就是对于不同的情况写不同的方法。 比如,同一个类中,写不同的构造函数用于初始化不同的参数。
构成方法重载的条件:
不同的含义:形参类型、形参个数、形参顺序不同
只有返回值不同不构成方法的重载
如:int a(String str){}与 void a(String str){}不构成方法重载
只有形参的名称不同,不构成方法的重载
如:int a(String str){}与int a(String s){}不构成方法重载
方法的重写(Override)
override是重写(覆盖)了一个方法,以实现不同的功能,一般是用于子类在继承父类时,重写(重新实现)父类中的方法
注意事项:
- 重写方法的参数列表必须完全与被重写的方法的相同。
- 重写方法的访问修饰符一定要大于被重写方法的访问修饰符 (public>protected>default>private)。
- 重写的方法的返回值必须和被重写的方法的返回一致。
- 重写的方法所抛出的异常类型必须和被重写方法的所抛出的异常一致,或者是小于这种类型;
- 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
- 静态方法不能被重写为非静态的方法(会报错)。
Overload和Override之间的区别
Override是子类继承父类时根据自己的需要来改写继承的来的方法,改写后调用子类时父类的方法就不再运行,只运行改写的方法。
Overload是在同一个类中定义若干个名称相同但参数不同的方法,当使用是根据输入的参数变量来决定使用的具体方法。
构造方法(构造器,constructor)
构造方法是一种比较特殊的方法,它用于对象的初始化。构造方法是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造方法的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例。
声明格式:
[修饰符] 类名(形参列表){
//n条语句
}
构造方法4个要点:
- 构造方法通过new关键字调用!!
- 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
- 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加!
- 构造器的方法名必须和类名一致!
注意:
构造方法是创建Java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类对象,但这个对象并不是完全由构造器负责创建的。创建一个对象分为如下四步:
- 分配对象空间,并将对象成员变量初始化为0或空
- 执行属性值的显示初始化
- 执行构造方法
- 返回对象的地址给相关的变量