package cn.temptation; public class Sample01 {
public static void main(String[] args) {
// 方法/函数 Method/Function // 为什么会出现方法?
// 原因1、在程序中多处出现相同的语句内容
// 原因2、会发生变化 // 【只有变化是不变的】
// 回顾一下变量,为了应对变化,提出的新的机制
// 需要对变化进行封装处理,在这里就是要对一系列的语句进行封装,得到方法的概念
// 【方法的封装性】 // 方法的格式:
// 访问修饰符 返回类型 方法名(参数类型1 参数名1, 参数类型2 参数名2, ..., 参数类型n 参数名n) {
// 方法体内各种执行语句;
// return 返回值; // return语句用于有返回类型的场合
// } // 1、访问修饰符:public static(公开的静态的)
// 2、返回类型:① 无返回的 void;② 有返回的
// 3、方法名:方法的名称,在方法被调用时使用
// 4、方法名后的括号里可以有参数列表(有参),也可以没有参数列表(无参)
// 5、参数列表:参数类型1 参数名1, 参数类型2 参数名2, ..., 参数类型n 参数名n // 【方法的使用原则:不调用,不执行】 // 方法的调用形式:方法名(参数列表); // 做输出的事情
// System.out.println("天气不太好");
//// System.out.println("网络不太好");
// System.out.println("网络现在太好");
// 把对语句的使用,替换为对方法的调用
show(); // 做了一些其他的事情
// ... // 做输出的事情
// System.out.println("天气不太好");
//// System.out.println("网络不太好");
// System.out.println("网络现在太好");
// 把对语句的使用,替换为对方法的调用
show(); // 做了一些其他的事情
// ... // 做输出的事情
// System.out.println("天气不太好");
//// System.out.println("网络不太好");
// System.out.println("网络现在太好");
// 把对语句的使用,替换为对方法的调用
show();
} // 在和主函数main同级的位置,制作方法
public static void show() {
// 做输出的事情
System.out.println("天气不太好");
// 当语句发生变化时,使用方法后,不需要对方法的调用发生修改,只需要修改一下方法中的语句即可
// System.out.println("网络不太好");
System.out.println("网络现在太好"); // void无返回的方法中,写上return语句也可以,但是return无任何类型的返回值
// return;
// 语法错误:Void methods cannot return a value,不能返回一个具体数据类型的结果
// return true;
}
}
package cn.temptation; public class Sample02 {
public static void main(String[] args) {
// 1、方法在某一个类的内部的
// 2、在称呼上,方法 和 函数 其实是一个意思
// 3、做事情时,不要强求在一个方法内全部做完,不同的方法做不同的事情 // 方法对内封装语句,体现了它的【封装性】
// 方法对外到处被调用,体现了它的【复用性】
} /**
* 方法名:显示方法的名称
* 方法用途:用于显示方法的用途
* 方法返回值:无
* 方法参数名:无
* 方法创建人:张三
* 方法创建时间:YYYY.MM.DD
* 方法修改人:李四
* 方法修改时间:YYYY.MM.DD
* 方法修改内容:.....
*/
public static void show() { }
} // 语法错误:Syntax error on token "}", delete this token
// 语法错误:Syntax error, insert "}" to complete ClassBody
//public static void showOther() {
//
//}
package cn.temptation; public class Sample03 {
public static void main(String[] args) {
// 注意:
// 1、方法是不能嵌套方法的,方法和方法之间是平级的
// 2、方法名及参数列表均相同的方法是不能被定义的 // 语法错误:Illegal modifier for parameter show; only final is permitted
// public static void show() {
//
// }
} public static void show() { } // 语法错误:Duplicate method show() in type
// public static void show() {
//
// }
}
package cn.temptation; public class Sample04 {
public static void main(String[] args) {
// 调用无返回值的方法
// add(); // 调用有返回值的方法
// 注意:返回值是什么数据类型的值,在调用并接收的地方就要声明什么数据类型的变量来进行接收
// 定义局部变量result,在方法中定义的局部变量只能在该方法中使用,超出该方法无法访问。
// 所以主函数中定义的局部变量 和 同级方法中定义的局部变量,虽然同名同类型,但是互相不受影响
int result = add();
// 打印出结果
System.out.println(result);
} // 需求:制作一个无返回值的方法,计算两个数的和
// public static void add() {
// int i = 2;
// int j = 3;
//
// int result = i + j;
//
// // 直接打印出结果
// System.out.println(result);
// } // 需求:制作一个有返回值的方法,计算两个数的和(考虑到计算归计算,打印归打印)
public static int add() {
int i = 2;
int j = 3; // 定义局部变量result,在方法中定义的局部变量只能在该方法中使用,超出该方法无法访问
int result = i + j; // 如果没有写return语句,会产生语法错误:This method must return a result of type int
return result;
}
}
package cn.temptation; public class Sample05 {
public static void main(String[] args) {
// 有参方法的调用 // 方法的参数:根据方法是被定义还是被调用,将方法的参数分为两种
// 1、形参:形式参数,用于方法定义时,起站位表明参数类型的作用
// 2、实参:实际参数,用于方法调用时,不用加上参数类型 // 注意:形参和实参的数据类型要一致 int result = add(2, 3);
// 实参不需要加上数据类型,加上会有语法错误
// int result = add(int 2, int 3);
System.out.println(result);
} // 定义方法
public static int add(int i, int j) {
// 方法内部就可以使用形参来做加法的操作
int result = i + j; return result;
}
}
package cn.temptation; public class Sample06 {
public static void main(String[] args) {
// 使用方法时需要注意的问题:
// 1、方法的定义
// ① 方法的返回值类型(输出)
// ② 方法的参数列表(输入)
// 2、方法的调用 // 方法的调用形式
// 1、直接调用:一般用于无返回值的方法
// 2、赋值调用:在调用方法的地方,声明一个和方法返回值类型相同的变量,用以接收方法的返回值(一般用于有返回值的方法)
// 3、输出调用:本质上就是拿着方法的返回值作为输出语句的方法的实参使用 // 直接调用
test1(); // 赋值调用
int result = test2();
System.out.println(result); // 输出调用
System.out.println(test2());
} public static void test1() {
System.out.println("直接调用的方法");
} public static int test2() {
System.out.println("有返回值的方法");
return 123;
}
}
package cn.temptation; import java.util.Scanner; public class Sample07 {
public static void main(String[] args) {
// 需求:制作方法,接收用户键盘录入,判断输入的两个数字哪个大? // 制作方法时,关注点在方法的返回值类型 和 参数列表上
// 好的方法都不是一蹴而就的,是不断提炼出来的 Scanner input = new Scanner(System.in);
System.out.println("输入一个数字:");
int i = input.nextInt();
System.out.println("再输入一个数字:");
int j = input.nextInt();
input.close(); // 调用方法,传递实参
int result = max(i, j);
System.out.println("两个数:" + i + "和" + j + "中较大的数为:" + result);
} // 根据输入的数进行比较
public static int max(int i, int j) {
// 定义一个变量
int max = 0; if (i > j) {
max = i;
} else {
max = j;
} return max;
}
}
package cn.temptation; import java.util.Scanner; public class Sample08 {
public static void main(String[] args) {
// 需求:制作一个方法,判断输入的两个数是否相等
Scanner input = new Scanner(System.in);
System.out.println("输入一个数字:");
int i = input.nextInt();
System.out.println("再输入一个数字:");
int j = input.nextInt();
input.close(); // 调用方法
if (compare(i, j)) {
System.out.println("两数相等");
} else {
System.out.println("两数不等");
}
} // 制作方法,比较两个数是否相同
public static boolean compare(int i, int j) {
// 定义一个是否相同的标识
// boolean flag = true; // 写法1
// if (i - j == 0) {
// flag = true;
// } else {
// flag = false;
// } // 写法2
// if (i == j) {
// flag = true;
// } else {
// flag = false;
// } // 写法3
// if (i - j != 0) {
// flag = false;
// } // 写法4
// if (i != j) {
// flag = false;
// }
//
// return flag; // 写法5
// flag = (i == j) ? true : false;
// return flag; // 写法6
return i == j;
}
}
package cn.temptation; import java.util.Scanner; public class Sample09 {
public static void main(String[] args) {
// 需求:制作方法,获取三个数中最大的一个
Scanner input = new Scanner(System.in);
System.out.println("输入第一个数字:");
int i = input.nextInt();
System.out.println("输入第二个数字:");
int j = input.nextInt();
System.out.println("输入第三个数字:");
int k = input.nextInt();
input.close(); // 调用方法
int result = max(i, j, k);
System.out.println("最大的数为:" + result);
} // 比较三个数中最大的一个
public static int max(int i, int j, int k) {
// 定义一个变量max
int max = 0; // 写法1
// if (i > j) {
// if (i > k) {
// max = i;
// } else {
// max = k;
// }
// } else {
// if (j > k) {
// max = j;
// } else {
// max = k;
// }
// } // 写法2
int tempMax = (i > j) ? i : j;
max = (tempMax > k) ? tempMax : k; return max;
}
}
package cn.temptation; public class Sample10 {
public static void main(String[] args) {
// 方法的重载(英文:Overload)
// 定义:方法名相同、参数列表不同的一系列方法称为方法的重载
System.out.println(add(2, 3));
System.out.println(add(4, 5, 6));
} // 需求:制作一个方法,操作两个数相加
public static int add1(int i, int j) {
int result = i + j;
return result;
} // 需求:制作一个方法,操作三个数相加
public static int add2(int i, int j, int k) {
int result = i + j + k;
return result;
} // 需求:制作一个方法,操作四个数相加... // 既然这些方法做的都是数字相加的事情,考虑使用相同的方法名add // 需求:制作一个方法,操作两个数相加
public static int add(int i, int j) {
int result = i + j;
return result;
} // 需求:制作一个方法,操作三个数相加
public static int add(int i, int j, int k) {
int result = i + j + k;
return result;
}
}
package cn.temptation; public class Sample11 {
public static void main(String[] args) {
// 方法重载的注意点:
// 1、方法名需要相同
// 2、方法的参数列表必须不同,包括参数的类型或个数,以此区分不同的方法
// ① 如果参数个数不同,不用考虑参数类型
// ②如果参数个数相同,需要考虑参数的类型 或 参数的顺序必须不同
// 3、方法的返回值类型、访问修饰符可以相同,也可以不相同
} public static void show(int i, int j) { } public static void show(int i, double j) { } // 参数个数相同,参数类型相同,但是参数名不同的方法不是重载方法
// 语法错误:Duplicate method show(int, int) in type
// public static void show(int a, int b) {
//
// } public static void show(int i, int j, int k) { } // 和第二个方法参数个数相同、类型相同,但是顺序不同,也是重载方法
public static void show(double j, int i) { } // 和第一个方法参数列表相同,但是无法区分参数顺序是否不同,所以产生语法错误
// 语法错误:Duplicate method show(int, int) in type
// public static void show(int j, int i) {
//
// } // 虽然返回值类型和其他重载方法不同,但是并不影响是重载方法
public static boolean show(int i) {
return true;
} // 和第一个方法参数列表相同,但是返回值类型不同,这也无法区分,有语法错误
// 语法错误:Duplicate method show(int, int) in type
// public static boolean show(int i, int j) {
// return false;
// }
}
package cn.temptation; public class Sample12 {
public static void main(String[] args) {
// 方法调用时,匹配参数的数据类型,优先选择参数类型完全匹配的重载方法
System.out.println(test(3, 4));
// System.out.println(test(3.4, 4.5)); // 注释掉重载方法1、5,保留重载方法2、3、4时有语法错误
// The method test(double, double) is ambiguous for the type // 注释掉重载方法1、2、5,保留重载方法3、4时有语法错误
// The method test(int, double) is ambiguous for the type // 注释掉重载方法1、2、3、4,保留重载方法5时有语法错误
// The method test() in the type Sample12 is not applicable for the arguments (int, int) // 调用方法重载时,参数匹配规则:
// 1、如果有参数类型完全匹配的重载方法,会自动选择该重载方法
// 2、如果没有参数类型完全匹配的重载方法,首先会去匹配部分匹配的重载方法
// 注意:如果有多个部分匹配程度一致的重载方法,会ambiguous for the type语法错误,因为无法选择
// 3、如果只有一个参数类型不匹配的方法,这时也就不用谈什么重载了,观察形参的数据类型和实参的数据类型,如果形参的数据类型可以包含实参的数据类型就不会出错
} // 重载方法1
public static int test(int i, int j) {
return 1;
} // 重载方法2
// public static int test(double i, double j) {
// return 2;
// } // 重载方法3
// public static int test(int i, double j) {
// return 3;
// } // 重载方法4
// public static int test(double i, int j) {
// return 4;
// } // 重载方法5
// public static int test() {
// return 5;
// } // 重载方法6
public static int test(long a, long b) {
return 6;
}
}