package com.itheima.methoddemo;
public class MethodDemo1 {
public static void main(String[] args) {
//目标:掌握最简单的方法定义和调用的格式
//调用方法
playGame();
}
//定义一个方法
public static void playGame(){
System.out.println("选人物");
System.out.println("准备开局");
System.out.println("对线");
System.out.println("崩盘");
System.out.println("骂队友");
System.out.println("送人头");
System.out.println("GG");
}
}
(运行结果截图)
练习:展示女朋友的信息
需求: 定义一个方法,在方法内部打印你女朋友的所有信息
(源代码)
java复制代码
package com.itheima.methoddemo;
public class MethodDemo2 {
public static void main(String[] args) {
//目标:利用方法最简单的格式完成当前练习
//调用方法
printGFInfo();
}
//定义方法
public static void printGFInfo(){
System.out.println("小惠惠");
System.out.println("萌妹子");
System.out.println("18岁");
}
}
(运行结果截图)
练习:看代码说结果1
**目标:**能说出方法调用时的执行过程
两个核心:
1.看到方法进入方法
2.执行完毕回到调用处
练习:看代码说结果2
**目标:**能说出方法调用时的执行过程
练习:人肉计算器
**需求:**定义一个方法,在方法内部定义两个变量,求出他们的和并进行打印.
(源代码)
java复制代码
package com.itheima.methoddemo;
public class MethodDemo3 {
public static void main(String[] args) {
//目标:利用方法最简单的格式完成当前练习
//需求:定义一个方法,在方法内部定义两个变量,求出他们的和并进行打印.
getSum();
}
public static void getSum(){
int num1 = 10;
int num2 = 20;
int result = num1 + num2;
System.out.println(result);
}
}
(运行结果截图)
带参数的方法定义和调用
带参数方法定义
单个参数定义
格式:
public static void 方法名(参数){... ...}
范例:
public static void method(int number){... ...}
多个参数定义
格式:
public static void 方法名(参数1,参数2,... ...){... ...}
范例:
public static void method(int number1,int number2){... ...}
package com.itheima.methoddemo;
public class MethodDemo4 {
public static void main(String[] args) {
//目标:掌握带参数方法定义的格式和调用的格式
getSum(10,20);
}
public static void getSum(int num1,int num2){
int result = num1 + num2;
System.out.println(result);
}
}
(运行结果截图)
形参和实参
形参: 全称形式参数,是指方法定义中的参数
实参: 全称实际参数,是指方法调用中的参数
**注意:**方法调用时,形参和实参必须一一对应,否则程序将报错.
方法定义的小技巧
1.我要干什么? 方法体
2.我干这件事情需要什么才能完成? 形参
(定义无参的方法)
(定义带参的方法)
练习:人肉计算机1
**需求:**定义一个方法,求长方形的周长,将结果在方法中进行打印.
(源代码)
java复制代码
package test;
public class Test1 {
public static void main(String[] args) {
//需求:定义一个方法,求长方形的周长,将结果在方法中进行打印.
getLength(5.2,1.3);
}
public static void getLength(double len,double width) {
double result = (len + width) * 2;
System.out.println(result);
}
}
(运行结果截图)
练习:人肉计算机2
**需求:**定义一个方法,求圆的面积,将结果在方法中进行打印.
(源代码)
java复制代码
package test;
public class Test2 {
public static void main(String[] args) {
//需求:定义一个方法,求圆的面积,将结果在方法中进行打印.
getArea(1.5);
}
public static void getArea(double radius) {
double area = 3.14 * radius * radius;
System.out.println(area);
}
}
(运行结果截图)
带返回值方法的定义和调用
为什么要有带返回值的方法呢?
调用处拿到方法的结果之后,才能根据结果进行下一步操作
.
方法的返回值其实就是方法运行的最终结果.
-如果在调用处要根据方法的结果,去编写另一段代码逻辑
-为了在调用处拿到方法的结果,就需要定义带有返回值的方法
什么时候用到带返回值的方法?
在调用处要根据方法的结果,去编写另一段代码逻辑
带返回值方法定义
格式:
public static 返回值类型 方法名(参数){
方法体;
return 返回值;
}
范例:
public static int getSum(int a,int b){
int c = a + b;
return c;
}
带返回值方法的调用
1.直接调用
方法名(实参);
2.赋值调用
整数类型 变量名 = 方法名(实参);
3.输出调用
System.out.println(方法名(实参));
练习:人肉计算机
**需求:**定义一个方法,求一家商场每个季度的营业额.根据方法结果再计算出全年营业额.
(源代码)
java复制代码
package com.itheima.methoddemo;
public class MethodDemo5 {
public static void main(String[] args) {
//需求:定义一个方法,求一家商场每个季度的营业额.根据方法结果再计算出全年营业额.
//先计算第一个季度的营业额
int sum1 = getSum(10, 20, 30);
//再计算第二个季度的营业额
int sum2 = getSum(20, 30, 40);
//再计算第三个季度的营业额
int sum3 = getSum(20, 30, 40);
//再计算第四个季度的营业额
int sum4 = getSum(20, 30, 40);
//计算全年营业额
int sum = sum1 + sum2 + sum3 + sum4;
System.out.println(sum);
}
public static int getSum(int num1, int num2, int num3) {
int result = num1 + num2 + num3;
return result;//将结果返回给调用处
}
}
package test;
public class Test5 {
public static void main(String[] args) {
//1.定义数组
int[] arr = {11,22,33,44,55};
//2.调用方法
printArr(arr);
}
public static void printArr(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + ",");
}
}
System.out.println("]");
}
}
(运行结果截图)
练习:数组最大值
**需求:**设计一个方法求数组的最大值,并将最大值返回
(源代码)
java复制代码
package test;
public class Test6 {
public static void main(String[] args) {
int[] arr = {1,5,7,3,8,10};
int max = printArr(arr);
System.out.println(max);
}
public static int printArr(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
}
(运行结果截图)
练习:判断是否存在
**需求:**定义一个方法,判断数组中的某一个数是否存在,将结果返回给调用处
java复制代码
package test;
public class Test7 {
public static void main(String[] args) {
int[] arr = {1,5,8,12,56,89,34,67};
boolean contains = contains(arr, 89);
System.out.println(contains);
}
public static boolean contains(int[] arr, int number) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == number) {
return true;
}
}
return false;
}
}
package test;
public class Test8 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9};
int[] copyArr = copyOfRange(arr, 3, 7);
for(int i = 0;i < copyArr.length;i++)
{
System.out.print(copyArr[i] + " ");
}
}
public static int[] copyOfRange(int[] arr,int from,int to)
{
int[] newArr = new int[to - from];
int index = 0;
for(int i = from;i < to;i++)
{
newArr[index] = arr[i];
index++;
}
return newArr;
}
}
(运行结果截图)
方法的基本内存原理
方法调用的基本内存原理
例1:
**第一步:**方法被调用之后就会进栈执行
**第二步:**方法中所有代码执行完之后就要出栈
例2:
第一步
第二步
第三步
第四步
第五步
第六步
第七步
基本数据类型和引用数据类型
基本数据类型
-整数类型
-浮点数类型
-布尔类型
-字符类型
变量中存储的是真实的数据
引用数据类型
变量中存储的是地址值
引用:使用了其他空间中的数据
从内存的角度解释
**基本数据类型:**数据值是存储在自己的空间中.
**特点:**赋值给其他变量,也是赋的真实的值.
**引用数据类型:**数据值是存储在其他空间中,自己空间中存储的是地址值.
**特点:**赋值给其他变量,赋的是地址值.
方法传递基本数据类型的内存原理
传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值.
第一步
第二步
第三步
第四步
思考:如何使调用change方法后的值为200?
(源代码)
java复制代码
package test;
public class Test9 {
public static void main(String[] args) {
int number = 100;
System.out.println("调用change方法前:" + number);//100
number = change(number);
System.out.println("调用change方法后:" + number);//200
}
public static int change(int number) {
number = 200;
return number;
}
}
(运行结果截图)
方法传递引用数据类型的内存原理
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值
第一步
第二步
第三步
[代码实现]
(源代码)
java复制代码
package test;
public class Test10 {
public static void main(String[] args) {
int[] arr = {10,20,30};
System.out.println("调用change方法前:" + arr[1]);
change(arr);
System.out.println("调用change方法后:" + arr[1]);
}
public static void change(int[] arr) {
arr[1] = 200;
}
}