java学习(3)
方法
方法是一段具有独立功能的代码块,不调用就不执行
方法的调用过程
- 方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储
- 方法被调用的时候,需要进入到栈内存中运行
栈内存 先进后出
方法调用为如下所示
- 首先方法区内会给每一个类划分一块区域用来存放方法名,
- 程序开始运行,首先main方法被压入,main中调用eat方法,
- 因为被调用,紧接着eat方法被压入
- 开始出栈,首先eat弹出,执行吃饭,
- 然后main方法被弹出,结束程序
由此可以看出 main 永远是最后一个执行的方法
形参与实参
package hzj;
import javax.swing.*;
import java.util.Random;
import java.util.Scanner;
public class DemoScanner {
public static void main(String[] args) {
Random r = new Random();
int n = r.nextInt(10); // 0-9
int n2 = r.nextInt(10);
int res = MAX(n,n2); // 这里n1 n2是实参
System.out.println(res);
}
// 这里 a b 是形参
public static int MAX(int a,int b){
return a>b?a:b;
}
}
方法参数传递(引用类型)
package hzj;
import javax.swing.*;
import java.util.Random;
import java.util.Scanner;
public class DemoScanner {
public static void main(String[] args) {
int[] arr = new int[3]; // [I@4dc63996
arr[0]=2;
cal(arr); // 这里传递过去的是数组的地址值,会直接修改
System.out.println(arr[0]);
}
public static void cal(int[] arr1){
arr1[0] = 1;
}
}
数组
数据arrary是一种容器,用来存储同种数据类型的多个值
格式
数据类型[] 变量名
int[] arrary
数组的动态初始化
动态初始化,初始化时只指定数组的长度,由系统为数组分配初始值
数据类型[] 变量名 = new 数据类型[数组长度]
int[] arr = new int[3]
打印数组变量的时候,会打印出数组的内存地址,当你低啊用变量的时候,变量会根据内存地址找到对应的数组值
public class DemoScanner {
public static void main(String[] args) {
int[] arr = new int[3]; // [I@4dc63996 // [ 表示当前的空间是一个数组类型 | 表示当前数组容器的数据类型
System.out.println(arr);
float[] arr1 = new float[3]; // [F@d716361 // F
System.out.println(arr1);
}
}
数组的静态初始化
初始化的时候,指定数组要存储的元素,系统会自动计算出数组的长度
数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,...}
int[] arr = new int[]{1,2,3}
java中内存分配
java程序在运行时,需要在内存中分配空间
为了提高运算效率,就对空间进行不同区域的划分
每一片区域都有特定的处理数据方式和内存管理方式
java中内存分配的主要几个地方
- 栈内存 方法运行时,进入的内存,局部变量都存放于这块内存当中
- 堆内存 new出来的内容都会进入堆内存,并且会存在地址值
- 方法区 字节码文件(.class文件)加载进入的内存
- 本地方法栈 调用操作系统相关资源
- 寄存器 交给CPU去使用
数组复制的时候,只是复制了arr1的指针
arr1 = arr2;