Java入门(四)——方法
目录
方法
可以完成特定的功能,并能重复调用【在C语言中称为函数,具体作用相似】
- 基础语言
- JVM内存分配
- 重载机制overload
- 递归调用
基础语言
定义
[修饰符列表] 返回值类型 方法名 (形式参数列表){
方法体;
}
* 修饰符列表:
- 可选项,不是必须的。
- 目前统一写成:public static
- 方法名的修饰列表中有static关键字的话,调用方法: 类名.方法名(实际参数);
* 返回值:
- 指完成特定功能之后,需要返回的最终结果,可以是准确的数据,也可以不是。
- 返回值类型:指返回一个具体存在的数据的数据类型。任意一种类型都可以
- 如果方法结束后需要返回任何数据,则采用"void"关键字。void类型之后如需用return,只能写成"return;",不能添加值。
- 若不是void类型的话,则必须添加"return 值;",而且值的类型需要和返回值类型一致。
* 方法名:
- 见Java入门(二)——数据类型中的标识符
* 形式参数列表:(形参)
- 形参是局部变量,只在方法中调用。可以无限个,用","隔开
- 方法定义在类中,方法中不能在定义方法,有java语构成,自上而下执行。
- return :表示方法执行结束。
- 编译器会识别是否能到达return值,如果不能则编译报错
JVM内存分配:
方法只定义,不调用的时候,JVM中也不会给该方法分配“运行所属”的内存空间
* 主要的内存空间:
- 方法区内存:存放需要调用的类文件,e.g:String.class / System.class(类似C语言的源文件),以及自己编写的Java的class文件。即临时存放的方法的存放点。
- 堆内存
- 栈内存:(原理是数据结果的栈知识点)先执行主方法,随后看是需要调用其他方法,使其他方法依次进入栈中运行,运行完后按栈的原理退出。
重载机制overload:
条件:
- 在同一类中
- 方法名相同
* 参数列表不同:
- 数量不同
- 顺序不同
- 类型不同
- 功能相似,但不一样。
方法重载机制和方法名+参数列表有关,与返回值类型、修饰符列表无关
递归调用
自身方法调用 【与数据结构的递归一致】
递归调用:
a(){
a();
}
- 递归很消耗栈内存,如果可以不用尽量少用
- 若出现栈内存溢出,即死循环没有结果或过深的递归,则会导致JVM停止工作。出现java.lang.StackOverFlowError
范例代码
public class Method {
public static void main(String[] args) {//主方法
java.util.Scanner s =new java.util.Scanner(System.in);
System.out.print("请输入数字:");
int num = s.nextInt();
Method.eg1(num);//方法的调用
System.out.println("---------------------。");
sum(4 , 6);//重载机制
sum(4.0 , 6.0);
sum(4 , 6.0);
System.out.println("---------------------。");
int a=sum1(9);
System.out.println(a);//递归调用
}
public static void eg1(int num1) {//方法
int resultNum=0;
for(int i=2 ; i<num1 ; i++) {
resultNum = num1 % i;
if(resultNum == 0) {
System.out.println("这个数字不是素数。");
break;
}
}
if(resultNum != 0)
System.out.println("这个数为素数。");
return;
}
public static void sum(int a,int b){
int sum;
sum=a+b;
System.out.println("sum1="+sum);
}
public static void sum(double a,double b){
double sum;
sum=a+b;
System.out.println("sum2="+sum);
}
public static void sum(int a,double b){
double sum;
sum=a+b;
System.out.println("sum3="+sum);
}
public static int sum1(int n) {
int sum=0;
if(n>0)
sum=n+sum1(n-1);
return sum;
}
}