Java全栈第三篇-方法初探
一、定义方法的基本格式
修饰符 返回值类型 方法名(参数列表){
方法体;
return 结果;
}
1、 修饰符: public static 固定写法 (初期仅当记忆)
2、返回值类型: 表示方法运行的结果的数据类型 (即return后的返回值所属的类型),方法执行后将结果返回到调用处 (通常为main所调用的位置)
3、 参数列表:方法在运算过程中的未知数据,由参数类型和参数名称两部分组成(即创建方法中括号中的数据,只定义不赋值,参数如果有多个,使用逗号进行分隔),调用处调用方法时传递(调用处在调用方法时,会往括号中赋值)
4、return:将方法执行后的结果带给调处,方法执行到return ,整体方法运行结束(在没有返回值数据时可以省略不写)
//要求:调用方法打印一个五行十列的星形矩阵
public class JuZhen {
public static void main(String[] args) {
method1();
}
public static void method1() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
//测试结果:
**********
**********
**********
**********
**********
二、定义方法两个明确及注意事项
1、两个明确:
(1)明确返回值类型:知道自己调用方法需要返回的结果是什么类型。(通过计算的值的类型可以推出返回值类型)
(2)明确参数列表:调用方法计算时参与计算的值的数据类型和数据个数。
2、方法调用的流程图解:
3、定义方法的注意事项:
(1)方法定义的先后顺序无所谓。
(2)方法定义必须是挨着的,不能在一个方法的内部定义另外一个方法。
(3)方法定义之后,自己不会执行的;如果希望执行,一定要进行方法的调用。
三、三种调用方法格式
1、单独调用:方法名称(参数);
2、打印调用:System.out.println(方法名称(参数));
3、赋值调用:数据类型 变量名称 = 方法名称(参数);
4、注意事项:若返回值类型为void,这种方法只能单独调用,不能进行打印调用和赋值调用。
public class Method2 {
public static void main(String[] args) {
// 单独调用
sum(15, 25);//40
// 打印调用
System.out.println(sum(15, 25)); // 40
// 赋值调用
int number = sum(15, 25);
number =number+100;
System.out.println("变量的值:" + number); // 140
}
public static int sum(int a, int b) {
return (a+b);
}
}
四、有参数和无参数方法的比较
1、含参数方法:一个方法需要数据进行对比、运算时,通常采用含参数的方法(即小括号内参数列表内含有参数)。
2、不含参数方法:一个方法不需要数据进行对比、运算时,通常采用不含参数的方法(即小括号内参数列表内不含有参数)。
源代码:
public class MethodCan {
public static void main(String[] args) {
System.out.println("两个数大小是否相等" + method1(3, 4));
method2();
}
//定义一个方法能够对两个数的大小是否相等
public static boolean method1(int a, int b) {
return (a == b);
}
//定义一个方法能够连续输出十次I am a bird
public static void method2() {
for (int i = 0; i < 10; i++) {
System.out.println("I am a bird" + (i + 1));
}
}
}
运行结果:
两个数大小是否相等false
I am a bird1
I am a bird2
I am a bird3
I am a bird4
I am a bird5
I am a bird6
I am a bird7
I am a bird8
I am a bird9
I am a bird10
五、有返回值和无返回值的比较
1、有返回值:通过一系列的运算或者判断得到的结果,调用处需要调用它的值,此时需要采用(return + 返回值)向调用处发送返回值。
2、无返回值:通过一系列的运算或者判断得到的结果,调用处不需要调用它的值,此时返回值类型采用void且不需要(return+返回值)向调用处发送返回值。(通常表现为直接采用输出语句输出数据)
3、注意事项:
(1)对于有返回值的方法,可以使用单独调用、打印调用或者赋值调用。但是对于无返回值的方法,只能使用单独调用,不能使用打印调用或者赋值调用。
(2)返回值与参数无关,有参数可能有返回值,也可能没有返回值。
(3)对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
(4)一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。(如if-else语句中针对不同情况可能使用不同的return)
源代码(同上,仅加上分析):
public class MethodCan {
public static void main(String[] args) {
System.out.println("两个数大小是否相等" + method1(3, 4));
method2();
}
//定义一个方法能够对两个数的大小是否相等,需要返回一个boolean值
public static boolean method1(int a, int b) {
return (a == b);
}
//定义一个方法能够连续输出十次I am a bird,不需要返回值,只需要输出即可
public static void method2() {
for (int i = 0; i < 10; i++) {
System.out.println("I am a bird" + (i + 1));
}
}
}
运行结果:
两个数大小是否相等false
I am a bird1
I am a bird2
I am a bird3
I am a bird4
I am a bird5
I am a bird6
I am a bird7
I am a bird8
I am a bird9
I am a bird10
六、关于定义方法的三个小练习
1、题目:定义一个方法,用来判断两个数字是否相同。
源代码:
public class MethodTest1 {
public static void main(String[] args) {
System.out.println("这两个数字是否相等:"+mathod1(25,25));
}
public static boolean mathod1(int a,int b){
boolean result = (a==b);
return result;
}
}
运行结果:
这两个数字是否相等:true
2、题目:求出1到100之间的所有的和
源代码:
public class MethodTest2 {
public static void main(String[] args) {
System.out.println("结果是:"+getSum());
}
public static int getSum(){
int sum= 0;
for (int i = 1; i <= 100; i++) {
sum=sum+i;
}
return sum;
}
}
运行结果:
结果是:5050
3、题目:实现不定次数打印
源代码:
public class MethodTest3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
getNumber(sc.nextInt());
}
public static void getNumber(int num){
for (int i = 0; i < num; i++) {
System.out.println("Hello World!"+(i+1));
}
}
}
测试数据:8
运行结果:
Hello World!1
Hello World!2
Hello World!3
Hello World!4
Hello World!5
Hello World!6
Hello World!7
Hello World!8
七、方法的重载(Overload)
1、背景:为什么会想到采用重载
答:重复的进行相同形式的运算时,会用到很多的方法名称,而这一系列方法的作用又近乎相同,所以采用方法的重载。
2、定义:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。(只需要记住唯一一个方法名称,就可以实现类似的多个功能。)
3、因素:
(1)相关因素:参数列表:个数不同,数据类型不同,多类型顺序不同。
(2)无关因素:与参数名称无关,与方法返回值类型无关
4、重载方法的调用:根据参数列表中参数的个数、类型、多类型顺序的不同,调用不同的方法。
源代码:
public class MethodTest4 {
public static void main(String[] args) {
System.out.println("结果是:" + method(3));
System.out.println("结果是:" + method(3, 4));
System.out.println("结果是:" + method(3, 4, 5));
}
//定义一个只有一个参数的method方法
public static int method(int a) {
return a;
}
//定义一个有两个参数的method方法
public static int method(int a, int b) {
return (a + b);
}
//定义一个有三个参数的method方法
public static int method(int a, int b, int c) {
return (a + b + c);
}
}
运行结果:
结果是:3
结果是:7
结果是:12
八、方法的重载两个练习
1、题目:比较两个数据是否相等,参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试。
源代码:
public class MethodSum {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
System.out.println(isSame(a, b));
System.out.println(isSame((short) 20, (short) 20));
System.out.println(isSame(11, 12));
System.out.println(isSame(10L, 10L));
}
public static boolean same(byte a, byte b) {
boolean same;
if (a == b) {
same = true;
} else {
same = false;
}
return same;
}
public static boolean same(short a, short b) {
boolean same = a == b ? true : false;
return same;
}
public static boolean same(int a, int b) {
return a == b;
}
public static boolean same(long a, long b) {
if (a == b) {
return true;
} else {
return false;
}
}
}
运行结果:
false
true
false
true
2、题目:模拟输出语句中的println方法效果,传递什么类型的数据就输出什么类型的数据,只允许定义一个方法名println。
源代码:
public class MethodTest5 {
public static void main(String[] args) {
println(10);
}
public static void println(byte a) {
System.out.println(a);
}
public static void println(short a) {
System.out.println(a);
}
public static void println(int a) {
System.out.println(a);
}
public static void println(long a) {
System.out.println(a);
}
public static void println(float a) {
System.out.println(a);
}
public static void println(double a) {
System.out.println(a);
}
public static void println(char a) {
System.out.println(a);
}
public static void println(boolean a) {
System.out.println(a);
}
}
运行结果:
10