java内存分析

1.Java中内存划分

  • 栈:存放局部变量和栈帧.效率最高.
  • 堆:存放New出来东西.(数组和对象及成员变量)效率比栈低一点.
  • 方法区:存放.class字节码文件,静态变量及常量池.效率最低.

2.一个对象内存分析

在这里插入图片描述

	eg:public static void main(String[] args) {
		//创建对象
		Student stu1=new Student();
		//用对象调用属性并赋值
		stu1.stuName="刘梦龙";
		stu1.stuAge=47;
		//用对象调用属性并输出
		System.out.println("姓名:"+stu1.stuName+",年龄为:"+stu1.stuAge);
	}

3.多个对象内存分析

在这里插入图片描述

	eg:public static void main(String[] args) {
		//创建对象
		Student stu1=new Student();
		//用对象调用属性并赋值
		stu1.stuName="刘梦龙";
		stu1.stuAge=47;
		//用对象调用属性并输出
		System.out.println("姓名:"+stu1.stuName+",年龄为:"+stu1.stuAge);
		
		Student stu2=new Student();
		stu2.stuName="迪丽热巴";
		stu2.stuAge=18;
		System.out.println("姓名:"+stu2.stuName+",年龄为:"+stu2.stuAge);
	}

4.值传递

  • 方法的形参是基本数据类型叫值传递.值传递将变量的值复制一份传递方法的形参,
  • 在方法中对形参作了更改,形参的值确实改变,方法执行完后,原来的变量的值是不变的.
  • 在这里插入图片描述
		eg:public static void main(String[] args) {
		//声明两个变量
		int a=8;
		int b=10;
		System.out.println("互换前:a="+a+",b="+b);
		//创建对象
		NumberManager nm=new NumberManager();
		//用对象调用方法实现两个数互换
		nm.changeNum(a, b);
		System.out.println("互换后:a="+a+",b="+b);
	}

5.引用传递

  • 方法的形参是引用数据类型叫引用传递.引用传递传的变量的内存地址,所以在方法中对这个内存地址中值作了更改,在方法中值改变.方法执行完后,原变量的内存中值也改变了.
    在这里插入图片描述
		public static void main(String[] args) {
		//创建对象
		Rabbit b1=new Rabbit();
		//用对象调用属性并赋值
		b1.nickName="小红";
		b1.sex='雌';
		System.out.println("改变前:兔子昵称:"+b1.nickName+",兔子的性别:"+b1.sex);
		//创建对象
		NumberManager nm=new NumberManager();
		//用对象调用方法改变对象的属性值
		nm.changeRabbit(b1);
		System.out.println("改变后:兔子昵称:"+b1.nickName+",兔子的性别:"+b1.sex);
	}

6.二维数组内存分析

在这里插入图片描述

eg:public static void main(String[] args) {
		//声明一个一维数组
		int[] nums1= {11,33,22};
		
		int[] nums2=new int[2];
		nums2[0]=18;
		nums2[1]=28;
		
		//准备二维数组
		int[][] nums3= {{5,2},{7,9}};
		
		int[][] nums4=new int[3][2];
		nums4[0][0]=11;
		nums4[0][1]=12;
		nums4[1][0]=21;
		nums4[1][1]=22;
		nums4[2][0]=31;
		nums4[2][1]=32;
	}

7.(扩展)对象数组

  • 本质还是一维数组,只是数组的每个空间存的是对象地址.
  • 特点:对象数组整体遵循数组的使用原则;数组每个空间遵循对象的使用原则(先创建对象,才能用对象调用属性)
    在这里插入图片描述
	eg:public static void main(String[] args) {
		//创建一个一维数组
		int[] nums1=new int[3];
		//给数组的每个空间赋值
		nums1[0]=11;
		nums1[1]=12;
		nums1[2]=13;
		
		//创建一个二维数组
		int[][] nums2=new int[2][];
		//给二维数组的每个空间赋值(即给一维数组分配空间)
		nums2[0]=new int[2];
		nums2[1]=new int[3];
		//给二维数组的每个空间一维数组的每个空间赋值
		nums2[0][0]=21;
		nums2[0][1]=22;
		
		nums2[1][0]=31;
		nums2[1][1]=32;
		nums2[1][2]=33;
		
		//创建对象数据:本质还是一维数组,只是数组的每个空间是一个对象
		People[] peoples3=new People[2];
		//给对象数组的每个空间赋值,注意对象数组每个空间是对象,对象要先创建,才能用属性存值
		//注意:对象数组名[索引]相当于对象名
		peoples3[0]=new People();
		//用对象调用属性存值
		peoples3[0].pname="刘梦龙";
		peoples3[0].page=18;
		peoples3[0].psex='女';
		peoples3[0].saveMoney=100;
		
		peoples3[1]=new People();
		//用对象调用属性存值
		peoples3[1].pname="彭于郾";
		peoples3[1].page=38;
		peoples3[1].psex='男';
		peoples3[1].saveMoney=1000000;
		
		//遍历一维数组
		for (int n1 : nums1) {
			System.out.println(n1);
		}
		System.out.println("------------------------------");
		
		//遍历二维数组
		for (int[] n2 : nums2) {
			//System.out.println(n2);
			System.out.println(Arrays.toString(n2));
		}
		System.out.println("**********************************");
		
		//遍历对象数组
		for (People p3 : peoples3) {
			//遍历的每个元素是一个对象,对象可以调用属性输出
			System.out.println(p3.pname+","+p3.page);
		}
	}

1.java中内存划分
2.一个对象内存分析
3.多个对象内存分析
4.值传递
5.引用传递
6.二维数组内存分析
7.(扩展)对象数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值