1.什么是方法?
方法是程序中最小的执行单元
2.实际开发中,什么时候用到方法?
重复的代码、具有独立功能的代码可以抽取到方法中。
3.实际开发在,方法有什么好处?
- 提高代码的复用性
- 提高代码的可维护性
4.方法不调用就不执行
5.方法与方法之间是平级关系(编写顺序和执行顺序无关),不能互相嵌套定义
6.方法的返回值为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写。
如果要编写return,后面不能跟具体的数据
7.return下面的代码无效会报错
方法的格式
方法定义:把一些代码打包在一起的过程
方法调用:手动调用方法
最简单的方法定义格式:
//方法定义格式
public static void 方法名(){
方法体(就是打包起来的代码);
}
//方法定义范例
public static void playGame(){
七个打印语句;
}
//方法调用格式
方法名();
//方法调用范例
playGame();
方法必须先定义再调用,否则会报错
public class KV{
public static void main(String args[]){
//目标:掌握最简单的方法定义和调用的格式
//调用方法
playGame();
playGame();
}
//定义一个方法
public static void playGame(){
System.out.println("rushA");
System.out.println("rushB");
}
}
带参数的方法:
public class KV{
public static void main(String args[]){
System.out.println("5");
getSum(10,20);
System.out.println("30");
}
public static void getSum(int num1, int num2){
int result=num1+num2;
System.out.println(result);
}
}
形参:形式参数,是指放啊定义中的参数
实参:实际参数,方法调用中的参数
public class KV{
public static void main(String args[]){
getArea(10);
}
public static void getArea(double radium){
double result=radium*radium*3.14;
System.out.println(result);
}
}
带返回值方法的定义和调用:
调用出拿到方法的结果之后,才能根据结果进行下一步操作。
方法的返回值其实就是方法运行的最终结果。
- 如果在调用出要根据方法的结果,去编写另外一段代码逻辑
- 为了在调用处拿到方法产生的结果,就需要定义带有返回值的方法。
//带返回值方法定义格式
public static 返回值类型 方法名(参数){
方法体;
}
//带返回值方法定义范例
public static int getSum(int a, int b){
int c = a + b;
return c;
}
//带返回值方法调用格式
//1.赋值调用
整数类型 变量名= 方法名(实参);
//2.输出调用
System.out.println(方法名(实参));
示例1:
public class KV{
public static void main(String[] args){
int sum = getSum(10, 20, 30);
System.out.println(sum);
System.out.println(getSum(10, 20, 30));
}
public static int getSum(int num1, int num2, int num3){
int result = num1 + num2 +num3;
return result;
}
}
示例2:
public class KV{
public static void main(String[] args){
int sum1 = getSum(10, 20, 30);
int sum2 = getSum(40, 20, 30);
int sum3 = getSum(50, 20, 30);
int sum4 = getSum(10, 60, 30);
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;
}
}
练习:比较两个长方形的面积
public class KV{
public static void main(String[] args){
double area1 = getArea(10,49);
double area2 = getArea(40, 20);
if(area1>area2){
System.out.println("第一个长方形面积更大");
}else{
System.out.println("第二个长方形面积更大");
}
}
public static double getArea(double len, double width){
double area = len*width;
return area;
}
}
方法的重载
- 在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能。
- 每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系
简单来说就是:同一个类中,方法名相同,参数不同的方法就叫重载。与返回值无关。
参数不同:个数不同、类型不同、顺序不同。
练习:
需求:使用方法重载的思想,设计比较两个整数是否相同的方法
要求:兼容全整数类型(byte,short,int,long)
public class KV{
public static void main(String[] args){
compare(10,20);
compare((byte)10,(byte)20);
byte b1 = 10;
byte b2 = 20;
compare(b1,b2);
}
public static void compare(byte b1, byte b2){
System.out.println("byte");
System.out.println(b1==b2);
}
public static void compare(short s1, short s2){
System.out.println("short");
System.out.println(s1==s2);
}
public static void compare(int i1, int i2){
System.out.println("int");
System.out.println(i1==i2);
}
public static void compare(long n1, long n2){
System.out.println("long");
System.out.println(n1==n2);
}
}
练习1:数组遍历
需求:设计一个方法,用于数组遍历,要求遍历的结果是在一行上的,例如:[11,22,33,44,55]
练习2:
练习3:
练习4:
方法的内存
方法调用的基本内存原理
1.Java内存分配
- 栈:方法运行时使用的内存,方法进栈运行,运行完毕就出栈
- 堆:new出来的,都在堆内存中开辟了一个小空间
- 方法区:存储可以运行的class文件
- 本地方法栈:JVM在使用操作系统功能的时候使用,与开发无关
- 寄存器:给CPU使用,与开发无关
public class KV{
public static void main(String[] args){
eat();
}
public static void eat(){
study();
System.out.println("吃饭");
sleep();
}
public static void sleep(){
System.out.println("睡觉");
}
public static void study(){
System.out.println("学习");
}
}
方法:study sout(”学习“); | 方法:sleep sout(”睡觉“); | ||||
方法:eat study(); | 方法:eat study(); sout(”吃饭“); | 方法:eat study(); sout(”吃饭“); sleep(); | 方法:eat study(); sout(”吃饭“); sleep(); | ||
方法:main eat(); | 方法:main eat(); | 方法:main eat(); | 方法:main eat(); | 方法:main eat(); |
2.方法传递基本数据类型的内存原理
基本数据类型:变量存储的是真实的数据,数据值是存储在自己的空间中
- 整数类型
- 浮点数类型
- 布尔类型
- 字符类型
引用数据类型(new出来的):变量中存储的是地址值,数据值是存储在其他空间中
引用:使用了其他空间中的数据
3.方法传递引用数据类型的内存原理