1.Java内存分配:
1.1:栈:存放局部变量,栈帧。使用效率最高。
1.2:堆:New出来的东西。使用效率比栈低点。
1.3:方法区:存放Class文件,静态区,常量池。使用效率最低。
2.一个对象的内存分配
eg:public static void main(String[] args) {
//创建一个对象
Student1 stu1=new Student1();
//用对象调用方法
stu1.setSname("Lucy");
stu1.setSage(70);
System.out.println("姓名:"+stu1.getSname()+",年龄:"+stu1.getSage());
}
3.多个对象的内存分配图:
eg:public static void main(String[] args) {
Student1 stu1=new Student1();
stu1.setSname("Jack");
stu1.setSage(17);
Student1 stu2=new Student1();
stu2.setSname("Tom");
stu2.setSage(18);
System.out.println("姓名:"+stu1.getSname()+",年龄:"+stu1.getSage());
System.out.println("姓名:"+stu2.getSname()+",年龄:"+stu2.getSage());
}
4.值传递:
方法的参数是基本数据类型,叫值传递。值传递传的是变量的值,方法中对值进行改变,方法执行完了后,传递的变量的值是不变。
eg:/**
* 交换两个数方法
*/
public void chageNum(int num1,int num2) {//num1=8,num2=10
int temp=num1;
num1=num2;
num2=temp;
}
public static void main(String[] args) {
int a=8;
int b=10;
System.out.println("a="+a+",b="+b);//a=8,b=10
//创建一个对象
Student2 stu1=new Student2();
//用对象调用交换两个数的方法
stu1.chageNum(a, b);
System.out.println("a="+a+",b="+b);//a=8,b=10
}
5.引用传递:
方法的参数是引用数据类型,叫引用传递。引用传递传的内存地址,在方法中对值改 变,方法执行完后,值也改变。
eg:/**
* 引用传递:改变学生对象的属性方法
*/
public void changeStu(Student2 stu) {//stu=stu2=0x01
stu.setSname("张三");
stu.setSage(88);
}
public static void main(String[] args) {
Student2 stu2=new Student2("aa", 11);
System.out.println("姓名:"+stu2.getSname()+",年龄:"+stu2.getSage());//aa,11
//用对象调用方法改变对象属性
stu2.changeStu(stu2);
System.out.println("姓名:"+stu2.getSname()+",年龄:"+stu2.getSage());//张三,88
}
6.数据的内存分析
6.1:基本类型的数组:
eg:public static void main(String[] args) {
int[] ages=new int[5];
ages[0]=19;
ages[1]=22;
ages[2]=23;
ages[3]=28;
ages[4]=35;
for (int i = 0; i < ages.length; i++) {
System.out.println(ages[i]);
}
}
6.2:对象数组内存分配
eg:public static void main(String[] args) {
Student3[] stus=new Student3[3];
stus[0]=new Student3();
stus[0].setSname("a1");
stus[0].setSage(19);
stus[1]=new Student3();
stus[1].setSname("a2");
stus[1].setSage(20);
stus[2]=new Student3();
stus[2].setSname("a3");
stus[2].setSage(21);
for (int i = 0; i < stus.length; i++) {
//System.out.println(stus[i]);
System.out.println(stus[i].getSname()+"\t"+stus[i].getSage());
}
}