Java学习 day6
方法:将特定功能的代码块封装起来
语法规则
访问修饰符 static 返回值类型 方法名(参数列表){ …代码块… } public static void main(){ …代码块… } public static int add(){ …代码块… } public static int add(int a; int b){ …代码块… }
上面的代码中分别是三种方法: 无返回值无参数 有返回值无参数 有返回值有参数 各种方法之间可以相互调用。 接下来介绍下方法的重载 方法重载是指在一个类中,多个方法有相同的名字,但是有不同的形参. 例如:
public static int getMax(int a, int b){
}
public static int getMax(int a, int b, int c){
}
public static int getMax(double a, double b){
}
public static int getMax(double a, double b, double c){
}
public static void method(int i,String str){
}
public static void method(String str,int i){
}
上述展现了几个重载方法,当调用getMax()方法时候,JVM会根据实参的数据类型与个数匹配到相应的方法。
递归算法
含义:方法调用它自身 当我们调用方法时,JVM会在栈内存中开辟一个空间,用于暂时存储方法的局部变量,当递归算法出现死循环时,栈内存会满载最终溢出导致程序崩溃。 递归算法的用法:当我们在解决某个问题,最后的结果与前一个或者前几个计算结果有关时我们会使用递归算法。 例如: 计算5!
5! = 5 * 4!; 4! = 4 * 3!; 3! = 3 * 2!; 2! = 2 * 1; 1! = 1;
类似上述的问题我们可以使用递归算法。
public static void main(String[] args){
int sum = method(5);
public static int method(int num){
if(num != 1){
return method(num - 1)*num
}else{
return 1;
}
}
}
类似的问题还有很多,比如不死神兔、汉诺塔问题。
一维数组
数组是一组数据的容器,数组一旦初始化,长度不可改变(意味着数组不能添加或删除) 数组的声明与静态初始化
String[] names = {“11”, “djgf”, “合约”,“weee333”}
上述就是数组的声明与初始化。
遍历数组:
String[] names = new String[]{"1", "2", "3"};
for(String name : names){
System.out.println(name);
}
数组的内存占用:
Java虚拟机存在几个内存区:栈、堆、方法区、常量池等等。 在上面的程序中,存在方法:String[].class、String.class;存在字面值常量"1", “2”, “3”。 JVM将字面值常量放在常量池中,将方法放在方法区中,在堆中放入new String[],并在堆内存中连续存储下常量池中字面值常量的内存地址,在栈内存中存储下String[] names,可以引用堆内存中new的数组。 看图:
|