Java方法
1、方法概述
在我看来Java中的方法可以类比为C/C++中的函数,通过参数和语句实现开发者想要完成的功能模块(即"恶毒"的甲方的一些“奇奇怪怪”的要求)。
2、Java方法实现
下面是两个int型数据的大小比较功能实现的代码:
public class Demo {
//main方法
public static void main(String[] args) {
System.out.println(getAns());//输出从定义的getAns()方法中得到的值
//因为方法getAns()定义的返回值为int型,所以得到的值也为int型 结果为 300
}
//实现两个int型数据的大小判断方法
public static int getAns() {
// int a = 300;
// int b = 200;
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();//输入值为 300
int b = sc.nextInt();//输入值为 200
if(a > b){
return a;
}else
return b;
}
}
//从上面的代码可以看出一个Java的自定义方法组成为:
// 修饰符(public static) 返回值类型(数据类型) 方法名(参数列表(可以没有)){
// 实现功能的Java语句
// return "值"; 返回前面定义的返回值类型,方法至此结束,同时方法内定义的参数内存被释放
// 因此在不同的方法中定义的参数名一样也不会影响到各个方法正常执行,并完成开发者所期待的功能
//}
当然上述的Java方法是不需要通过从其他方法中获得参数的,下面是一个从main方法中传递参数的Java代码,其实在之前说过和C/C++这定义的函数传参差不多
public class Demo_Second {
public static void main(String[] args) {
int num1 = 100;
int num2 = 200;
// Scanner sc = new Scanner(System.in);
// int num1 = sc.nextInt();
// int num2 = sc.nextInt();
System.out.println(getAns(num1,num2));
}
public static int getAns(int num1,int num2){
if(num1 > num2){
return num1;
}else {
return num2;
}
}
}
当然在C/C++中我们实现的函数功能也不仅仅是对于一两个单一数据来处理的函数,Java的方法也是这样(毕竟甲方不会这么容易就放过我们和我们的头发),它是对于一类数据处理公式或者是一类问题的解决方案,也可以说具有一定的普适性
3、关于方法在计算机中的实现
这就不得不提JVM(java虚拟机的一种),在这里因为我还是一枚菜鸟无法深入展开的对JVM进行叙述,因此就Java方法在计算机也就是在JVM上实现的过程分析(来自本人一枚菜鸟的理解)~~~
//Java方法在JVM上运行时需要进行一些操作
//被开发者编写的xxx.java源文件通过操作在编译器上生成对应的xxx.class文件
//也就是说在JVM上运行的是计算机能读懂的以二进制形式呈现的.class文件
//JVM上存储这一.class文件的存储空间可以分为三部分:栈内存空间,堆内存空间,方法区内存空间,从内存空间的名字也能知晓其作用和特性,接下来鄙人会提到栈内存空间(详)和方法区内存空间(略)
//栈内存空间,顾名思义,一种具有栈特性的内存空间
//栈 stack 一种数据结构 存储数据类型时可以理解为垂直叠放整齐的书本,在取书时只能自上而下,也就是说在利用这一数据结构存储数据时后面进入栈中的空间,位于之前存储数据的“上方”,即后来居上,因此在取用时也是后进先出,先进后出
方法的.class文件在JVM的概念图(没找到合适的画图软件,用win10自带的画图凑合一下)
空间分配概念图:
下面通过一段Java递归代码和概念图说明Java方法在JVM虚拟机上运行时在内存空间上的实现原理
简单的递归函数
import java.util.Scanner;
public class Recursion {
public static void main(String[] args) {
System.out.println("main方法");
// Scanner sc = new Scanner(System.in);
// int x = sc.nextInt();
// int z = sc.nextInt();
int x = 3;
int y = 1;
int z = 2;
System.out.println(getRes(x,y,z));
}
public static int getRes(int x,int y,int z){
System.out.println("getRes方法");
if(x != z){
x = x - y;
return getRes(x,y,z);
}
return 666;
}
}
未完待续