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

  • 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;
      		}
      	}
      }
    

猜你喜欢

转载自blog.csdn.net/qq_43141904/article/details/82990319