方法-修饰符-返回类型-参数列表-异常列表

方法-修饰符-返回类型-参数列表-异常列表

【摘要】方法、修饰符、返回类型、参数列表、异常列表

前言

start!

方法[method name]

定义

方法[method]是类的成员之一,[因为在java中,方法不能单独定义,它必须在类之中]。

1
2
3
修饰符 返回类型 方法名()[throws 异常类型]{
//方法体
}

方法名字:只要是一个合法的名字就可以,尽可能有意义。
如:getName,nextInt…

调用

当被调用的方法使用static修饰符修饰时:

  • 通过类名来调用,也就是:ClassName.methodName();
    如:
    1
    2
    double d = Math.sqrt(4.5);
    String istr = Integer.toBinaryString(8);

当被调用的方法没有使用static修饰符修饰时:

  • 通过对象来调用,也就是:obj.methodName();
    如:
    1
    2
    3
    Scanner sc = new Scanner(System.in);
    //此处的sc就是对象[变量]
    int i = sc.nextInt();
    :在Java中,方法之间是没有顺序的。

/*
this 当前对象
same class
context 上下文
一个静态方法不能直接调用非静态方法。所以要先创建对象。
*/

重载

在一个类中,具有相同方法名称但不同参数的方法就构成了方法的重载。
什么叫方法的重载?

  • 参数个数不同
  • 参数类型不同
  • 参数顺序不同
    如:
    1
    2
    3
    4
    5
    6
    public class Demo{
    public int add(int a,int b){return a+b;}
    public double add(double a,double b){return a+b;}
    public double add(int a,double b){return a+b;}
    public double add(double a,int b){return a+b;}
    }
    当调用重载方法时,JVM是根据参数列表来判断出准确的方法的。

递归[recursive]

递归就是指方法直接或间接地调用自己。
利用递归可以用简单的程序来解决一些复杂的问题,比如:斐波那契数列的计算、汉诺塔问题、快排等问题。
递归结构包括两个部分:

  1. 定义递归头。解答:什么时候不调用自身方法。如果没有头,讲陷入死循环,也就是递归的结束条件。
  2. 递归体。解答:什么时候需要调用自身方法。

如:求一个整数的阶乘。
5! = 54!; 4! = 43!; 3! = 32!; 2! = 21!; 1! = 1;
使用数学公式就可以表达为:f(n) = n*f(n-1);
所以,递归要有2个条件,也就是上面说的递归结构的两个部分。
一要有规律,二要有退出时机。

:使用递归时方法的效率不是很高,它对栈的容量有较大的要求,因为每一次的调用都是利用栈来保存中间的计算结果,直到最后一次递归返回结果。
如果栈不够的话,则JVM会抛出StackOverflowException

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* 求阶乘方法 */
public static long factorial(int n){
if(n==1){//递归头
return 1L;
}else{//递归体
return factorial(n-1);//n! = n * (n-1)!
}
}

/* 所有用递归可以实现的方法都可以使用非递归实现。 */
/* 非递归求阶乘方法 */
public static long factorialLoop(int n){
long result = 1;
while(n > 1){
result *= n * (n-1);
n -= 2;
}
return result;
}

/* 求整数的二进制字符串形式 */
public String toBinary(int n){
if(n==0){//退出条件
return "";
}
return toBinary(n/2)+n%2;
}

/* 汉诺塔问题 */
public void move(char a, char b, char c, int n) {
//
if(n == 1){
System.out.println(a+" -> "+c);
}
//调用自己
move(a, c, b, n-1);
System.out.println(a + " -> "+c);
//再调用自己
move(b, a, c, n-1);
}

修饰符[modifier]

访问控制修饰符piblic ,prootected,默认,private
其他修饰符 static,abstract,final,syschronized,native,volatile
注:修饰符之间是不没有顺序的。
在java中,针对类的成员访问限权有四种,分别对应四种修饰符。

全局 子类 同包 本身
public Y Y Y Y
protected N Y Y Y
默认 N N Y Y
private N N N Y

返回类型[return type]

1.所有合法的数据类型【包含基本数据类型和自定义对象】 表示这个方法有返回值,则在代码体中必须有return语句,并返回与表示这个方法有一致类型的。
2.void
表示这个方法没用返回值,则在代码体中可以不写return语句,如果一定要写,只能写空返回,如:return;

参数列表[parameters]

参数列表就是局部变量【Local variable】,它的语法与变量一样,只是不能初始化。
如有多个参数,则每个参数之间使用逗号隔开。

如:

1
2
3
public int add(int a,int b){
//...
}

当这个参数被调用[invoke]之时,它的参数才会有值【传递进来】。

所以,对于参数,有两种叫法:
形参,是在方法的定义时所叫,它只有类型,暂时无值。
实参,实在方法的调用时所叫,它既有类型又有值。

异常列表

暂时省略

练习题

design 设计
implements 实现
从以下业务中设计出相关的方法【不考虑实现】。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A.判断一个整数是否是质数
public static int isprime(int num){
//...
}
B.求两个浮点数之和
public static float add(float a,float b){
//...
}
C.获取给定整数的二进制字符串表示形式
public static String getNumberBinary(int num){
//...
}
D.打印输出指定上限范围内的所以质数
public static void printprime(int max){
//...
}

刚刚开始接触一个新的知识,拿几个简单的例题联系几次也就知道这是个什么玩意了,当我们搞完上面几个题目就会理解Java方法这个东西了。
点击进入答案解析

  1. 求两个整数的最大公约数[可以利用递归]

结束语

over!

评论