Java基础学习笔记 - Day04 - 第二章 方法
Java基础学习笔记 - Day04 - 第二章 方法
系统:Win10
JDK:1.8.0_121
IDE:IntelliJ IDEA 2017.3.7
2.1 回顾 —— 方法的定义和调用
前面的课程中,使用过嵌套循环输出矩形,控制台就可以了,因此将方法定义为 void,没有返回值。在主方法 main 中直接调用
public static void main(String[] args) {
printRectangle();
}
public static void printRectangle() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 20; j++) {
System.out.print("*");
}
System.out.println();
}
}
printRectangle 方法被 main 方法调用后直接输出结果,而 main 方法并不需要 printTangle 方法的执行结果,所以被定义为 void
2.2 定义方法的格式详解
修饰符 返回值类型 方法名(参数类型 参数名称, ...) {
方法体
return 返回值;
}
- 修饰符:现阶段固定写法 public static
- 返回值类型:也就是方法最终产生的数据结果是什么类型
- 方法名称:方法的名字,规则和变量一样,小驼峰
- 参数类型:进入方法的数据是什么类型
- 参数名称:进入方法的数据对应的变量名称
- ps:参数如果有多个,需要用逗号隔开
- 方法体:方法需要做的事情,若干行代码
- return:两个作用,第一 停止当前方法,第二 将后面的返回值还给调用处
- 返回值:方法执行后最终产生的数据结果
- ps:return后面的 “返回值”,必须和方法名称前面的 “返回值类型” 一致
2.3 定义方法的明确
- 需求:顶一个方法实现两个整数的求和计算
- 明确返回值类型:方法计算的是整数的求和,结果也必然是个整数,返回值类型定义为int类型
- 明确参数列表:计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义为两个int类型的变量,由调用者调用方法时传递
public class MethodDemo02 {
public static void main(String[] args) {
// 调用方法getSum,传递两个参数,这里传递的实际数据又称为实际参数、
// 接收方法计算后的结果,输出返回值
int sum = getSum(5, 6);
System.out.println(sum);
}
/*
定义计算两个整数求和的方法
返回值类型,计算结果是int
参数:不确定数据求和,定义int参数,参数又称形式参数
*/
public static int getSum (int a, int b) {
int c = a + b
return c;
}
}
程序执行后,主方法 main 调用 getSum 方法,传递了实际数据 5和6,两个变量 a和b 接收到的就是实际参数,并将计算后的结果返回,主方法 main 和变量 sum 接收的方法就是方法的返回值
2.4 调用方法图解
2.5 调用方法的三种形式
- 直接调用:直接写方法名调用
public static void main(String[] args) {
print();
}
public static void print() {
System.out.println("直接调用!");
}
- 打印调用:在输出语句中调用方法,System.out.println(方法名())
public static void main(String[] args) {
System.out.println(getSum(3,4));
}
public static int getSum(int a, int b) {
return a + b;
}
- 不能打印调用 void 类型方法。因为方法执行后没有结果,也就打印不出任何内容
public static void main(String[] args) {
// System.out.println(print()); // 错误调用,不能 输出语句调用void类型方法
}
public static void print() {
System.out.println("直接调用!");
}
- 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
public static void main(String[] args) {
int sum = getSum(3,4);
System.out.println(sum);
}
public static int getSum(int a, int b) {
return a + b;
}
2.6 定义方法的注意事项
- 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套
- 方法定义的前后顺序无所谓
- 方法定义之后不会执行,如果要执行,则需要调用:直接调用、打印调用、打印调用
- 如果方法有返回值,那么必须写上 “return 返回值;”,不能没有
- return后面的返回值数据,必须和方法的返回值类型,对应起来
- 对于一个void没有返回值的方法,不能写“return 返回值;”,不过可以直接写“return ;”
- 对于void方法当中最后一行的return可以省略不写
- 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到
2.7 定义实现方法
练习一 比较两个整数是否相等
- 分析:定义方法实现功能,需要有两个明确值,即 返回值 和 参数列表
- 明确返回值:比较整数,比较的结果只有两种可能,相同或不同,因此结果四布尔类型,比较的结果相同为true
- 明确参数类型:比较的两个整数不确定,所以默认定义为两个int类型的参数
public static void main(String[] args) {
// 调用方法cmpare,传递两个参数
// 接收方法计算后的结果,并打印出来
boolean result = compare(3, 4);
System.out.println(result);
}
/*
定义比较整数是否相同的方法
返回值类型,比较的结果是布尔型
参数:不确定参与比较的两个整数
*/
public static boolean compare(int a, int b) {
if (a == b) {
return true;
}else {
return false;
}
}
练习二 求出1+2+3+…+100的和
- 分析:定义方法实现功能,需要有两个明确,即 返回值 和 参数
- 明确返回值:1~100的求和,计算后必然还是整数,返回值类型是int
- 明确参数:需求中已知计算的数据,没有未知的数据,不定义参数
public static void main(String[] args) {
// 调用方法 getSum 并打印返回值
System.out.println(getSum());
}
/*
定义计算1~100的求和方法
返回值类型:计算结果为整数int
参数:没有不确定数据
*/
public static int getSum() {
// 定义变量保存求和
int sum = 0;
// 从1开始循环,到100结束
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
练习三 实现不定次数打印
- 分析:定义方法实现功能,需要有两个明确,即 返回值 和 参数
- 明确返回值:方法中打印出 Hello World! 即可,没有计算结果,返回值类型为 void
- 明确参数:打印次数不清楚,参数定义一个整形参数
public static void main(String[] args) {
// 调用方法 print,传递整数
print(9);
}
/*
定义打印 Hello World! 方法
返回值类型:计算没有结果 void
参数:不确定打印几次
*/
public static void print(int n) {
for (int i = 0; i < n; i++) {
System.out.println("Hello World!" + i);
}
}
2.8 方法重载
- 方法重载:指在同一类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回类型 无关
- 参数列表:个数不同,数据类型不同,参数的多类型顺序不同
- 重载方法调用:JVM通过方法的参数列表,调用不同的方法
2.9 方法重载练习
练习一
比较两个数据是否相等,参数类型分别为两个 byte 类型,两个 short 类型,两个 long 类型,并在 main 方法中进行测试
public class MethodDemo06 {
public static void main(String[] args) {
// 定义不同数据类型的变量
byte a = 10;
byte b = 20;
short c = 30;
short d = 30;
int e = 40;
int f = 50;
long g = 60L;
long h = 60L;
// 调用
System.out.println(compare(a, b));
System.out.println(compare(c, d));
System.out.println(compare(e, f));
System.out.println(compare(g, h));
}
// 两个byte类型的
public static boolean compare(byte a, byte b) {
System.out.println("compare byte");
return a == b;
}
// 两个short类型的
public static boolean compare(short a, short b) {
System.out.println("compare short");
return a == b;
}
// 两个int类型的
public static boolean compare(int a, int b) {
System.out.println("compare int");
return a == b;
}
// 两个long类型的
public static boolean compare(long a, long b) {
System.out.println("compare long");
return a == b;
}
}
练习二
判断哪些方法是重载关系
public static void open(){} // 属于重载
public static void open(int a){} // 属于重载
static void open(int a,int b){} // 不属于重载,与 8 冲突
public static void open(double a,int b){} // 属于重载
public static void open(int a,double b){} // 不属于重载,与 6 冲突
public void open(int i,double d){} // 不属于重载,与 5 冲突
public static void OPEN(){} // 运行无错,不过不属于重载,名称不同
public static void open(int i,int j){} // 不属于重载,与 3 冲突
练习三
模拟输出语句中的 println 方法效果,传递什么类型的数据就输出什么类型的数据,只允许定义一个方法名 println
public class MethodDemo07 {
public static void main(String[] args) {
byte a = 1;
short b = 2;
int c = 3;
long d = 4L;
float e = 5.0F;
double f = 6.0;
char g = 'A';
boolean h = true;
String str = "Last";
myPrint(a);
myPrint(b);
myPrint(c);
myPrint(d);
myPrint(e);
myPrint(f);
myPrint(g);
myPrint(h);
myPrint(str);
}
// byte
public static void myPrint(byte a) {
System.out.println("byte数据:" + a);
}
// short
public static void myPrint(short a) {
System.out.println("short数据:" + a);
}
// int
public static void myPrint(int a) {
System.out.println("int数据:" + a);
}
// long
public static void myPrint(long a) {
System.out.println("long数据:" + a);
}
// float
public static void myPrint(float a) {
System.out.println("float数据:" + a);
}
// double
public static void myPrint(double a) {
System.out.println("double数据:" + a);
}
// char
public static void myPrint(char a) {
System.out.println("char数据:" + a);
}
// boolean
public static void myPrint(boolean a) {
System.out.println("boolean数据:" + a);
}
// String
public static void myPrint(String a) {
System.out.println("String数据:" + a);
}
}