Java中的内存分配以及栈和堆的区别

本文深入探讨Java中的内存分配机制,详细解析栈、堆、方法区等内存区域的功能与特性。同时,介绍了数组的静态初始化方式及内存图示,讨论了数组操作中的常见问题,如越界和空指针异常,并通过案例演示Java参数传递的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Java中的内存分配以及栈和堆的区别

    • (1)栈: 存放的是局部变量
      局部变量:在方法定义中或者方法声明上的变量都是局部变量。

    • (2)堆: 存放的是所有new出来的东西
      特点:
      a: 每一个new出来的东西都会为其分配一个地制值。
      b: 每一个变量都有一个默认的值

        	byte,short,int,long  -- 0
        	float,double 		       -- 0.0
        	char 				      -- '\u0000'
        	boolean 				-- false
        	引用数据类型	 -- null		
      

      c: 使用完毕就变成了垃圾,等待垃圾回收器对其回收

    • (3)方法区:(面向对象部分讲解)

    • (4)本地方法区:(和系统相关)

    • (5)寄存器:(cpu使用)

  • 数组的初始化静态初始化及内存图

    (1)静态初始化的格式:
    格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
    举例: int[] arr = new int[]{1,2,3};
    简化格式:
    数据类型[] 数组名 = {元素1,元素2,…};
    举例: int[] arr = {1,2,3};
    (2)画图演示
    a:定义一个数组,输出数组名称和数组中的元素值

  • 数组操作的两个常见小问题越界和空指针

    a:ArrayIndexOutOfBoundsException:数组索引越界异常
    原因:你访问了不存在的索引。
    b:NullPointerException:空指针异常
    原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

  • Java中的参数传递问题及图解

    A:案例演示

          public static void main(String[] args) {
      	int a = 10;
      	int b = 20;
      	System.out.println("a: " + a + ",b: " + b);
      	change(a,b);
      	System.out.println("a: " + a + ",b: " + b);
          
          int[] arr = {1,2,3,4,5};
      	change(arr);
      	System.out.println(arr[1]);
      }
    
      public static void change(int a,int b)  {
    
      	System.out.println("a: " + a + ",b: " + b);
      	a = b;
      	b = a + b;
      	System.out.println("a: " + a + ",b: " + b);
      }
    
      public static void change(int[] arr){
      	for(int x = 0 ; x < arr.length ; x++){
      		if(arr[x]%2 == 0){
      			arr[x] *= 2;
      		}
      	}
      }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值