zoukankan      html  css  js  c++  java
  • java数组详解

                                               Java数组详解

    本文讲解顺序

    1数组的概念

    2数组的定义

      2.1动态初始化

      2.2静态初始化

    3数组中的内存划分

    4两个数组指向一个地址

    5两个常见问题

    +++++++++++++++++++++++++++++++++++++++++++++++++++++

                      正文

    +++++++++++++++++++++++++++++++++++++++++++++++++++++

                  1数组的概念

    数组是用来存储固定大小的同类型元素。

                  2数组的定义

    2.1动态初始化

    
    
    1 public class Test {
    2     public static void main(String[] args) {
    3         int[] arr=new int[100];
    4     }
    5 }
    arr是数组名称  100是数组的大小
    2.2 静态初始化
    public class Test {
        public static void main(String[] args) {
            int[] arr=new int[] {1,2};
        }
    }
    
    

    该数组大小即为2

                      3数组中的内存划分
    首先简单等等介绍一下java中的内存划分
    Java内存主要划分为五部分
    1栈(stack):存放的都是方法中的局部变量,方法的运行一定要在栈中运行,
    局部变量:方法的参数,或者是方法{}内部的变量
    作用域:一旦超出作用域,立刻从内存中消失
    2堆(Heap):凡是new 出来的东西都在堆里
    堆中的东西都有地址值:地址值为16进制 0x开头
    堆中的数据都有默认值,规则:
    如果是整数 0
    如果是布尔 false
    如果是浮点数 0.0

    如果是引用数据类型 null
    如果是字符 "u000"

     3方法区(Method Area):存储.class相关的信息,包含方法信息

     4本地方法栈(Natice Method Stack):与操作系统相关

     5 寄存器(pc Register): 与cpu相关

    下面用一张图来讲解 java中new一个数组的步骤

    
    
    1 public class Test {
    2     public static void main(String[] args) {
    3         int[] arr=new int[3] ;
    4         arr[0]=10;
    5         arr[1]=20;
    6         System.out.println(arr[0]);
    7         System.out.println(arr[1]);
    8     }
    9 }
    
    

    第一步 int[ ] arr=new int[2];

     数组名称相当于一个存储地址值的变量,指向存储在堆中的int [3]

     第二步 arr[0]=10

               arr[1]=20

    首先通过地址值去堆中找到该数组

    在通过下标来判断这是第几个

    第三步输出

     第三步与第二步同理这里就不继续叙述

                                   4 两个数组指向一个变量

    两个数组指向同一个变量,即栈中两个变量存储的值相同

    1 public class Test {
    2     public static void main(String[] args) {
    3         int[] arr=new int[2] ;
    4         int[] arr2=arr;
    5         System.out.println(arr);
    6         System.out.println(arr2);
    7     }
    8 }

    运行结果

     内存图解

                                                            5两个常见问题

    5.1数组索引越界

    public class Test {
        public static void main(String[] args) {
            int[] arr=new int[2] ;
            System.out.println(arr[3]);
        }
    }

    抛出异常

     为了防止越界我们可以引用length方法来解决一些问题方法

    public class Test {
        public static void main(String[] args) {
            int[] arr=new int[2] ;
            System.out.println(arr.length);
        }
    }

    运行结果

     5.2 空指针异常

    所有的引用类型变量都可以可以赋值为null,这就会导致空指针异常

    1 public class Test {
    2     public static void main(String[] args) {
    3         int[] arr=null ;
    4         System.out.println(arr[0]);
    5 
    6     }
    7 }

    异常抛出

    以上就是java数组的一些基础知识及我的个人理解,如果有错误还请各位批评指正。

    博客地址:https://www.cnblogs.com/pjhaymy/

  • 相关阅读:
    时间线 | timeline | 简易GitHub部署
    名词解释 | Lead SNPs | credible SNPs | Polygenicity | Discoverability
    Phenome-wide association studies | PheWAS
    孟德尔随机化 | Mendelian randomization
    探索性因子分析法 | exploratory factor analysis | EFA | Genomic Structural Equation Modelling | SEM
    漫画 | 到底是什么让IT人如此苦逼???
    国产Java代码补全神器,aiXcoder 2.0实测
    Dubbo学习(一) Dubbo原理浅析【转】
    Dubbo架构与底层实现【转】
    HAproxy 默认短连接,特殊域名开启长连接的配置方法【转】
  • 原文地址:https://www.cnblogs.com/pjhaymy/p/13246014.html
Copyright © 2011-2022 走看看