Java--- 内存分析简述

    这里简单说一下,一家之言。

    在内存区域存在一个堆区和一个栈区(后进先出规则),用于存放不同的信息。

        栈 --->连续的空间,自动分配,存放局部变量,通过new关键字实例化的对象放在这里面;

       堆 --->不连续的空间,我理解大概分为两个部分,一个部分叫方法区,存放1.类信息 2.static变量(类变量) 3.常量池(Final常量,String字符串常量);另一部分放按照类信息建立的对象(以类的形式组织代码,以对象的形式封装数据),栈里面的局部变量通过操作堆里面对象地址(4个位,如2233aabb)来操作这些对象。

    举个例子

/**
 * 内存分析示例
 * @author Administrator
 *
 */
public class Student1 {
	//一般属性
	private int id;
	private String name;
	
	//静态属性
	private static int age;
	
	//常量
	private final int MAX_AGE = 15; 
	
	//一般方法
	public void speak(String name){
		this.name = name;
		System.out.println(name+"say hello");
	}
	
	//静态方法
	public static void run(){
		System.out.println("run");
	}
	public static void main(String[] args) {
		//建立局部变量stu,并初始化
		Student1 stu = new Student1();
		//调用一般方法
		stu.speak("小明");
		//调用静态方法
		run();
		System.out.println(stu.id);
		System.out.println(stu.MAX_AGE);
	}
}

还有一些其他的问题,以后再补充

    1)为什么String类要被放在常量池

        String被final修饰,是不可变字符序列,对String重新赋值实际上是创建一个新的对象,原对象保持不变,所以放在常量池,因为对应这个地址的值是不变的

猜你喜欢

转载自blog.csdn.net/qq_30007589/article/details/80867050