01 方法的概述
1、方法是什么?
方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用
2、使用方法的好处是?
提高了代码的复用性
让程序的逻辑更清晰
package com.itheima.type;
public class TypeDemo1 {
public static void main(String[] args) {
int c1 = sum(10,30);
System.out.println(c1);
int c2 = sum(10,50);
System.out.println(c2);
}
public static int sum(int a, int b) {
int c = a + b;
return c;
}
}
02 方法定义格式、常见问题
1、方法的完整格式是什么样的?
2、方法要执行必须怎么办,如何进行?
必须进行调用;调用格式:方法名称(…)
package com.itheima.type;
public class TypeDemo1 {
public static void main(String[] args) {
//学习方法的完整定义格式,并理解其调用和执行流程
int rs = add(100,200);
System.out.println("和是:" + rs);
}
public static int add(int a, int b){
int c = a + b;
return c;
}
}
3、如果方法不需要返回结果,不需要接收参数,应该怎么办,要注意什么?
- 方法不需要返回结果,则申明返回值类型为void
- 方法不需要参数,则形参列表可以不写
- 方法没有申明返回值类型,内部不能使用return返回数据
- 方法如果没有形参列表,调用的时候则不能传入参数值,否则报错
package com.itheima.type;
public class TypeDemo1 {
public static void main(String[] args) {
print();
System.out.println("---------");
print();
}
public static void print(){
for (int i = 0; i < 3; i++) {
System.out.println("HelloWord");
}
}
}
4、方法常见问题
- 方法的编写顺序无所谓
- 方法与方法之间是平级关系,不能嵌套定义
- 方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据
- return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
- 方法不调用就不执行, 调用时必须严格匹配方法的参数情况
- 有返回值的方法调用时可以选择定义变量接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用
03 方法案例:求和、判断奇偶数、求最值
1、计算1-n的和返回
package com.itheima.type;
public class TypeDemo1 {
public static void main(String[] args) {
System.out.println("1-5的和是:" + sum(5));
System.out.println("----------------");
System.out.println("1-5的和是:" + sum(100));
}
public static int sum(int n){
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
}
2、判断整数是奇数还是偶数
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
System.out.print("请输入您的数据:");
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
check(data);
}
public static void check(int number){
if(number % 2 == 0){
System.out.println("该数是偶数");
}else{
System.out.println("该数是奇数");
}
}
}
3、数组求最值改方法实现
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
System.out.print("请输入数组的长度:");
Scanner rs = new Scanner(System.in);
int length = rs.nextInt();
int[] arr = new int[length];
System.out.print("请输入该数组的数据:");
for (int i = 0; i < arr.length; i++) {
arr[i] = rs.nextInt();
}
int max = getArrayMaxData(arr);
System.out.println("最大的数据是:" + max);
}
public static int getArrayMaxData(int[] arr){
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if(arr[i] > max) max = arr[i];
}
return max;
}
}
04 方法的内存原理
1、方法的运行区域在哪里?
栈内存
05 方法参数传递机制:值传递
1、形参和实参各指什么?
形参:以方法为例,就是方法定义时的变量
实参:在方法内部定义的变量
2. Java的参数传递机制是什么样的?
值传递,传输的是实参存储的值
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
int a = 10;
change(a);
System.out.println(a); //10
}
public static void change(int a){
System.out.println(a); //10
a = 20;
System.out.println(a); //20
}
}
3、基本类型和引用类型的参数在传递的时候有什么不同?
都是值传递
基本类型的参数传输存储的数据值
引用类型的参数传输存储的地址值
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
int[] arrs = new int[]{10, 20, 30};
change(arrs);
System.out.println(arrs[1]); //222
}
public static void change(int[] arrs){
System.out.println("方法内部2:" + arrs[1]); //20
arrs[1] = 222;
System.out.println("方法内部2:" + arrs[1]); //222
}
}
06 方法参数传递的案例
1、打印整型数组内容
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
int[] arrs1 = {10, 20, 30};
printArray(arrs1);
System.out.println("---------------");
int[] arrs2 = {30, 40, 50};
printArray(arrs2);
System.out.println("---------------");
int[] numbers = {};
printArray(numbers);
}
public static void printArray(int[] arr){
System.out.print("[");
if(arr.length > 0 && arr != null){
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
}
}
System.out.println("]");
}
}
2、从数组中查询指定元素的索引
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
int[] arrs1 = {11, 22, 33, 44, 55};
Scanner rc = new Scanner(System.in);
System.out.print("请输入您的数据:");
int number = rc.nextInt();
int res = findArrayIndex(arrs1, number);
if(res != -1) System.out.println("您要查询的数组索引是:" + res);
else System.out.println("没有该元素!");
}
public static int findArrayIndex(int[] arr, int n){
for (int i = 0; i < arr.length; i++) {
if(arr[i] == n) return i;
}
return -1;
}
}
3、比较2个数组是否一样
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
int[] arrs1 = {10, 220, 30};
int[] arrs2 = {10, 20, 30};
System.out.println(compare(arrs1, arrs2));
}
public static boolean compare(int[] arr1, int[] arr2){
if(arr1.length == arr2.length){
for (int i = 0; i < arr1.length; i++) {
if(arr1[i] != arr2[i]) return false;
}
return true;
}else{
return false;
}
}
}
07 方法重载、return关键字
1、方法重载是什么样的?
同一个类中,多个方法的名称相同,形参列表不同
2、使用方法重载的好处 ?
对于相似功能的业务场景:可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
fire();
fire("岛国");
fire("岛国", 1000);
}
public static void fire(){
fire("米国");
}
public static void fire(String location){
fire(location, 1);
}
public static void fire(String location, int number){
System.out.println("默认发送" + number + "枚武器给" + location +"~~~");
}
}
3、方法重载的识别技巧
- 只要是同一个类中,方法名称相同、形参列表不同,那么他们就是重载的方法,其他都不管!(如:修饰符,返回值类型都无所谓)
- 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
//新方法
public static void open(){}
//重载方法
public static void open(int a, int b){}
//重载方法
public static void open(double a, int b){}
//重载方法
public static void open(int a, double b){}
//重复方法
// public static void open(int i, double d){}
//新方法
public static void OPEN(){}
}
4、如果要直接结束当前方法的执行,怎么解决?
- return; 跳出并立即结束所在方法的执行
- break; 跳出并结束当前所在循环的执行
- continue; 结束当前所在循环的当次继续,进入下一次执行
package com.itheima.type;
import java.util.Scanner;
public class TypeDemo1 {
public static void main(String[] args) {
System.out.println("main开始。。");
chu(10, 0);
System.out.println("main结束。。");
chu(10, 2);
}
public static void chu(int a, int b){
if(b == 0){
System.out.println("您输入的数据有误,除数不能是0!");
return;
}
int c = a / b;
System.out.println("结果是:" + c);
}
}