java基础之内存

1 内存划分

栈(stack):局部变量、对象声明的引用

堆(heep):new出来的类或数组的实例(含成员变量)

静态域:静态变量(用static修饰的变量)

常量池:字符串常量(用final修饰的)


2 内存图

Person类:
public class Person{
	private String name;
	private int age;
	private static int legs = 2;
	public void setName(String n){
	this.name = n;
}
}
main方法的代码:
public static void main(String[] args){
	Person p1 = new Person();
	p1.setName(“zhangsan”);
	p1.setAge(20);
	System.out.println(p1);
}

第一行代码:Personp1 = new Person();

Person p1:对象声明的引用,存放在栈内存。

new Person() new出来的实例,在堆内存中。调用Person类的无参构造函数。name初始值为null,age初始值为0


第二行代码:p1.setName(“zhangsan”);

调用类方法:

private void setName(String n){

         this.name= n;

}

n为局部变量,存放于栈内存。setName方法执行完后,n出栈

name类型为String类型的常量,存放于常量池


第三行代码:p1.setAge(20);

调用类方法:

private void setAge(int a){

         this.age= a;

}

a为局部变量,存放于栈内存。setAge方法执行完后,a出栈

a为基本数据类型,进行值传递


3 练习

class Value{
	int i = 15;
}
class Test{
	public static void main(String[] args){
		Test t = new Test();
		t.first();
	}
	public void first(){
		int i=5;
		Value v = new Value();
		v.i = 25;
		second(v,i);
		System.out.println(v.i);
	}
	public void second(Value v, int i){
		i = 0;
		v.i = 20;
		Value val = new Value();
		v = val;
		System.out.println(v.i + " " + i);
	}
}

Test t = new Test();


t.first()

public void first(){

        int i=5;

        Value v = new Value();

        v.i = 25;

        second(v,i);

        System.out.println(v.i);

    }


second(v,i);

    public void second(Value v, int i){

        i = 0;

        v.i = 20;

        Value val = new Value();

        v = val;

        System.out.println(v.i +" " + i);

    }


System.out.println(v.i + " " + i);  //15 0

System.out.println(v.i);    // 20



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值