Java05基础 数组

news2024/9/21 20:35:50

Java05数组

一、数组

数组指的是一种容器,可以用来存储同种数据类型的多个值。

1、数组的静态初始化

初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

1.1 数组定义格式

//格式一
数据类型[] 数组名
    
//格式二(C中用的多,Java用的少)
数据类型 数组名[]

注意:定义数组只是定义了数组类型的变量而已,内存中并没有正真将数组容器创建出来,还需要初始化内存才会为数组容器开辟空间。

1.2 静态初始化
  • 完整格式

数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3,...};

int[] array = new int[]{11,22,33};
double[] array2 = new double[]{11.1,22.2,33.3};
  • 简化格式(常用)

简化格式只是简化了代码书写,运行还是会按照完整格式运行
数据类型[] 数组名 = {元素1,元素2,元素3,...};
 

int[] array = {11,22,33};
double[] array2 = {11.1,22.2,33.3};
1.3 注意事项
public class ArrayDemo1 {
    public static void main(String[] args) {
        int[] arr1 = new int[]{11,22,33};
        double arr2[] = {11.1,22.2,33.3};
​
        System.out.println(arr1);
        System.out.println(arr2);
    }
}

打印数组名,会看到数组在内存中的十六进制地址值

2、数组元素访问

格式:数组名[索引]

索引:是数组容器中空间的编号,编号从0开始,逐个+1增长;

public class ArrayDemo1 {
    public static void main(String[] args) {
        //char类型的a取值范围小,int类型取值范围大,可以这样存,但没必要
        int[] arr1 = new int[]{11,22,33,'a'};
        int num = arr[0];
        System.out.println(num)
    }
}
​
//运行结果为11

3、数组遍历操作

3.1 遍历

将数组中所有的内容取出来,取出来之后可以(打印、求和、判断...)

public class ArrayDemo3 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
​
        //arr.length动态获取数组长度
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

快捷键:数组名.fori 回车

3.2 综合案例(求和最大最小值)
public class ArrayTest2 {
    public static void main(String[] args) {
        int[] arr = {33,11,55,44,22};
        int max = arr[0];  //定义记录最大值的变量,初始值为数组的第一个元素
        int min = arr[0];   //定义记录最小值的变量,初始值也为数组第一个元素
        int sum = 0;     //定义求和变量
​
        for (int i = 0; i < arr.length; i++) {
            //数组元素大于最大值
            if(arr[i]>max){
                //更新最大值
                max=arr[i];
            }
            //数组元素小于最小值
            if(min>arr[i]){
                //更新最小值
                min = arr[i];
            }
            //累加数组变量
            sum+=arr[i];
        }
        //循环结束,打印结果
        System.out.println("最大值为:"+max);
        System.out.println("最小值为:"+min);
        System.out.println("数组元素和为:"+sum);
    }
}

4、数组动态初始化

初始化时只指定数组长度,由系统为数组分配初始值

4.1 格式

数据类型[] 数组名 = new 数据类型[数组长度];

int[] arr = new int[3];
4.2 默认初始值
数据类型默认初始值
整数(基本类型)0
小数(基本类型)0.0
字符(基本类型)'\u0000' 常见体现为空白字符
布尔(基本类型)false
类、接口、数组(引用类型)null
4.3 ⭐两种初始化的区别
动态初始化静态初始化
手动指定数组长度手动指定数组元素
系统给出默认初始化值系统会根据元素个数计算数组长度

Q如何选择?(使用场景)

  • 需求中已经明确给出要操作的数据时,直接静态初始化

  • 只明确元素个数,不明确具体数值时,使用动态初始化

5、数组内存图

5.1 Java内存分配介绍
  • 方法运行时所进入的内存,方法运行结束要弹栈

  • new出来的东西会在这块内存中开辟空间并产生地址值

  • 方法区

    字节码文件加载时进入的该内存

  • 本地方法栈

    属于栈内存的一部分,负责加载一些特殊的方法(native修饰的方法,底层是调用C++代码,我们是无法看到方法内部的实现逻辑)

  • 寄存器

    CPU使用

5.2 两个数组指向相同 内存图

5.3 相关面试题

  • 总结

    方法的参数传递:
         1、基本数据类型:数据值
         2、引用数据类型:地址值
    
    Q:Java是值传递,还是地址传递?
    A:分情况,基本数据类型传递数据值,引用数据类型传递地址值
        
    詹姆斯高斯林:值传递,地址值也是值

6、数组常见问题

6.1 索引越界异常

ArrayIndexOutOfBoundsException:当访问了数组中不存在的索引,就会引发索引越界异常

public class ArrayIndexOutOfBoundsExceptionDemo {
    public static void main(String[] args) {
        int[] arr = {11,22,33};

        System.out.println(arr[3]);
    }
}
6.2 空指针异常

当引用数据类型变量被赋值为null之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常

public class NullPointerException {
    public static void main(String[] args) {
        int[] arr = {11,22,33};
        arr= null;
        System.out.println(arr[0]);
    }
}

二、二维数组

一种用于存储一维数组的容器

使用思路:要操作的多组数据,又属于同一组数据,就使用二维数组进行维护

1、静态初始化

  • 完整格式

数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2},{元素1,元素2}};
int[][] arr = new int[][]{{11,22},{33,44}};
  • 简化格式

数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}};
int[][] arr = {{11,22},{33,44}};

2、元素访问

格式:数组名[索引] [索引];

public class ArrayDemo1 {
    /*
             元素访问:数组名[m][n]
                   m:  访问哪个一维数组
                   n:  访问一维数组的哪个元素
     */
    public static void main(String[] args) {
        int[][] arr = {
                {11,22,33},
                {44,55,66}
        };

        //打印二维数组名,会出现它所记录的一维数组的地址
        System.out.println(arr);
        //访问元素33
        System.out.println(arr[0][2]);
    }
}

3、二维数组遍历

思路:使用嵌套循环,先拿到二维数组里每个一维数组的地址,再通过遍历每个一维数组访问其中的元素,嵌套起来,就可以遍历到整个二维数的所有元素了

public class ArrayDemo2 {
    /*
       二维数组遍历
            需求: 求二维数组中偶数元素的和
     */
    public static void main(String[] args) {
        int[][] arr={
                {11,22,33},
                {44,55,66}
        };

        //定义求和变量
        int sum = 0;

        //遍历二维数组,获取每一个一维数组
        for (int i = 0; i < arr.length; i++) {
            //arr[i]代表每一个数组
            //继续遍历一维数组,取出元素
            for (int j = 0; j < arr[i].length; j++) {
                if(arr[i][j]%2 == 0){
                    //累加求和
                    sum+=arr[i][j];
                }
            }
        }
        System.out.println(sum);
    }
}

4、动态初始化

  • 格式

数据类型[][] 数组名 = new 数据类型[m][n];
    m表示这个二维数组,可以存放多少个一维数组
    n表示每一个一维数组,可以存放多少个元素
int[][] arr = new int[2][3];
  • 默认初始值

    二维数组存放的是一维数组的地址值,而一维数组是引用数据类型,所以默认值为null

    数据类型默认初试值
    一维数组null

5、初始化内存图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最新互联网公司工作时长排行榜出炉!

“工作时长”&#xff0c;是选择公司的一个非常重要的参考指标。 我们在选择一个公司的时候&#xff0c;除了需要关注总收入package 以外&#xff0c;还需要考虑这家公司的加班时长是否人性化。 我们的工作时长是周工作小时数。法定工作时间是40小时(955)。大小周通常折算为周…

高质量新闻数据集OpenNewsArchive:880万篇主流新闻报道,国产大模型开源数据又添猛料

在构建国产大语言模型的道路上&#xff0c;高质量新闻是不可或缺的重要语料之一。这类语料集准确性、逻辑性、时效性于一体&#xff0c;同时包含丰富的事实知识&#xff0c;可以大幅提升模型的文本生成质量、词汇表达能力、事件理解分析能力以及时序内容的适应性和预测能力&…

UE4_环境_局部雾化效果

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff01;祝愿大家生活越来越好&#xff01; 本文重点介绍下材质节点SphereMask节点在体积雾中的使用方法。 一、球体遮罩SphereMask材质节点介绍&#xff1a; 球体蒙版&#xff08;SphereMask&#xff09; 表达式根据距…

云端储存的笔记软件, 效率翻倍的办公小助手

在繁忙的办公环境中&#xff0c;文件堆积如山&#xff0c;电脑屏幕上贴满了各色便签&#xff0c;电话铃声、邮件提示声此起彼伏。你努力地在这些混乱中寻找一丝头绪&#xff0c;试图把握住工作的节奏。 然而&#xff0c;传统的方法似乎已经无法满足现代高效工作的需求。想象一…

特斯拉全自动驾驶(FSD)系统发展与解析

引言 自动驾驶技术在近年来迅猛发展&#xff0c;多家科技巨头和汽车制造商纷纷投入巨资研发&#xff0c;试图领跑这一未来出行的革命。在众多企业中&#xff0c;特斯拉的全自动驾驶&#xff08;Full Self-Driving, FSD&#xff09;系统以其独特的“纯视觉”策略脱颖而出&#…

webpack优化构建体积示例-并行压缩:

uglifyjs-webpack-plugin和terser-webpack-plugin都可以开启多进程并进行压缩来减小构件体积大小。 当在 Webpack 配置中启用 minimize: true 时&#xff0c;构建时间通常会增加&#xff0c;这是因为 Webpack 会在构建过程中添加一个额外的步骤&#xff1a;代码压缩。代码压缩是…

深度学习设计模式之工厂方法模式

文章目录 前言一、工厂方法模式介绍二、详细分析1.核心组成2.实现步骤3.示例代码4.优缺点优点缺点 5.应用场景 总结 前言 本篇文章主要学习工厂方法模式&#xff0c;工厂方法模式是对简单工厂模式进一步的抽象&#xff0c;由子类去决定实例化哪个类。 一、工厂方法模式介绍 工…

摆脱手工录入烦恼,OCR技术大幅提高增值税发票处理效率

最近&#xff0c;我邂逅了一位得力助手——OCR技术&#xff0c;它犹如一位神通广大的魔法师&#xff0c;为增值税发票处理带来了翻天覆地的变革&#xff01; 曾几何时&#xff0c;处理增值税发票如同走进了一片迷雾重重的森林&#xff0c;每一步都小心翼翼&#xff0c;生怕出错…

深化市场布局与产业链整合,三清互联以创新为公司发展赋能

近年来&#xff0c;我国大力发展现代化电力体系&#xff0c;并不断推进智能电网的发展&#xff0c;电力物联网作为支撑电力行业数字化发展的关键基础设施&#xff0c;迎来了快速发展黄金时期。作为电力物联网领域领先企业之一&#xff0c;三清互联凭借敏锐的市场洞察力和技术创…

Canal解决select count(*)执行慢的问题

前言 count 的常用方式&#xff0c;使用 count(*)来统计数据条数&#xff0c;但是 innodb 没有存储数据总数&#xff0c;所以执行起来就会很慢。 可以使用 expalin sql 来返回预估行数&#xff0c;expalin select count(*)....., 通过预估的方式,统计数据条数。可以使用 redi…

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 数三角

//枚举顶点。 //不存在等边三角形 #include<bits/stdc.h> using namespace std; #define int long long const int n2e311; int a,b,c,l[n],r[n]; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a;for(int i1;i<a;i){cin>>…

好烦啊,我真的不想写增删改查了!

大家好&#xff0c;我是程序员鱼皮。 很想吐槽&#xff1a;我真的不想写增删改查这种重复代码了&#xff01; 大学刚做项目的时候&#xff0c;就在写增删改查&#xff0c;万万没想到 7 年后&#xff0c;还在和增删改查打交道。因为增删改查是任何项目的基础功能&#xff0c;每…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100&#xff05; 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bo…

Leecode热题100---11:盛最多水的容器

题目&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾…

Markdown 高级表格控制 ∈ Markdown 使用笔记

文章目录 Part.I IntroductionPart.II 表格样式控制Chap.I 对齐方式Chap.II 表格中文本控制Chap.III 单元格合并Chap.IV 颜色控制 Part.III 实用技巧Chap.I Excel 转 HTML Reference Part.I Introduction 本文是 Markdown 使用笔记 的子博客&#xff0c;将介绍如何优雅地使用 …

【Android踩坑】重写onClick方法时,显示Method does not override method from its supperclass

问题 重写onClick方法时&#xff0c;显示Method does not override method from its supperclass 解决 在类上加implements View.OnClickListener

webpack优化构建速度示例-externals:

externals 配置项主要用于防止将某些 import 的包&#xff08;package&#xff09;打包到 bundle 中&#xff0c;而是在运行时&#xff08;runtime&#xff09;再从外部获取这些扩展依赖&#xff08;external dependencies&#xff09;。这样做的主要目的是为了解决打包文件过大…

使用JasperReport工具,生成报表模版,及通过JavaBean传参,常见问题及建议

1.下载JasperReport工具 下载地址:社区版 - Jaspersoft 社区 邮箱:lorettepatri.ckoa5434gmail.com 密码:Zx123456. 2.工具使用方法注意 1.一次参数需要在左下角Parameters中新建,直接拖转右上角的TextField不会自动新建参数,到头来还是要在Parameters中新建 2.循环参数需…

深度解析 Spring 源码:解密AOP切点和通知的实现机制

文章目录 深度解析 Spring 源码&#xff1a;解密AOP切点和通知的实现机制一、Spring AOP的基础知识1.1 AOP的核心概念&#xff1a;切点、通知、切面等1.2 Spring AOP与传统AOP的区别和优势 二、深入分析切点和通知的实现2.1 研究 Pointcut 接口及其实现类2.1.1 Pointcut 接口2.…

提升用户体验:Xinstall免邀请码功能详解

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;传统的App推广方式往往需要用户填写繁琐的邀请码&#xff0c;这不仅降低了用户体验&#xff0c;还影响了推广效果。幸运的是&#xff0c;Xinstall作为国内专业的App全渠道统计服务商&#xff0c;推出…