介绍
Java方法是语句的集合、是语句的捆绑/统一,它们在一起只为执行一个功能、完成一个目的。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
目录
a. 方法的命名规范
- 方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。
- 下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test_<state(状态)>,例如:testPop_emptyStack。
b. 方法的定义
修饰符 返回符 方法名(参数列表) {//方法头
...
//方法体
return 返回值;//如果是 void 返回符,则可以省略 return 项
}
//返回符又叫返回数据类型
c. 方法的调用
void 返回符的方法 | 非 void 返回符的方法 | |
---|---|---|
调用方法时的程序控制权 | 仍然在程序手中 | 交给了被调用的方法手里,当结束调用后再返还给程序 |
等同性质 | 一条语句 | 通常被当作一个值 |
方法内定义的和参数列表里的参数就属于形参,方法外定义的和非参数列表里的参数就属于实参。
我认为它们俩本质的区别在于作用域的大小:形参 < 实参。比方说我是“湖南彭于晏”,而真正的彭于晏是“国服彭于晏”,我们俩各在自己的天地生活,只不过他的天地比我大罢了。
形参的作用域:方法里 实参的作用域:类里
方法的重载 Overload(看方法头)
直接上代码!同名的方法只根据参数类型、数量的不同来选择具体的调用。(不过跟参数名本身无关)
public class compareNum {
public static void main(String[] args) {
compareNum.min(10, 20);//整数默认 int
compareNum.min(1.3, 2.3);//小数默认 double
}
public static int min(int a, int b) {
if (a > b) {
return b;
}else
return a;
}
public static double min(double a, double b) {
if (a > b) {
return b;
}else
return a;
}
}
方法的重写 Override(看方法体)
同名的方法只根据其使用对象类型(运行类型/实例类型)的不同来选择具体的调用。
public class WatchTikTok {
public static void main(String[] args) {
Object o = new Son();//传入的是 Son 实例
o.watchVideo();
}
}
class Father {
public void watchVideo() {
System.out.println("看一笑倾城中...");
}
}
class Son extands Father {
public void watchVideo() {
System.out.println("看井川鲤鱼中...");
}
}
Overload | Override | |
---|---|---|
重载(Overload) 重写(Override) 与类关系 | 针对于一个类而言 (同类之中) | 存在于父类和子类之间 (不同类间) |
无关要素 | 方法的异常类型及其数目 | private 方法(充其量是子类中新定义了一个方法,并没有进行重写) |
不允许的情况 |
|
|
递归方法
简单来说,递归就是方法自己调用自己,每次调用时传入不同的变量,“用方法做个while循环”(像榨汁机把自己榨出来的果汁,再放入自己身体里面再榨一遍!)。递归有助于编程者解决复杂问题,同时可以让代码变得简洁。(但是比较消耗资源,容易爆栈)
好了废话少说,直接上代码!以下是递归的例子:
public class Recursion_Test {
public static void main(String[] args) {
Cursion cursion1 = new Cursion();
cursion1.test(5);
System.out.println("递归方法执行了"+cursion1.count+"次");
}
}
class Cursion{
int count;
public void test(int n){
if (n > 2){
test(n - 1);
count++;
}
System.out.println("n = "+n);
/*每次递归都会执行一次完整的方法:
当遇到调用方法时则会压入一个新栈帧,
直到递归操作完毕时就会依次出栈并且执行后面的语句(如果有的话)*/
//打比方:“先入后出”的羽毛球之筒!
}
}