java面试题24 关于Java中的数组,

java面试题24 关于Java中的数组,下面的一些描述,哪些描述是准确的:(        )

A 数组是一个对象,不同类型的数组具有不同的类
B 数组长度是可以动态调整的
C 数组是一个连续的存储结构
D:一个固定长度的数组可类似这样定义: int array[100]
E:两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
F可以二维数组,且可以有多维数组,都是在Java中合法的

懵逼树上懵逼果,懵逼树前你和我

 

数组的基本概念

如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下:

int i1, i2, i3, ... i100;

但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次。

其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配,而数组的定义语法有如下两类。

    数组动态初始化:
        声明并开辟数组:
            数据类型 [] 数组名称 = new 数据类型[长度];
            数据类型 [] 数组名称 = new 数据类型[长度];
        分布进行数组空间开辟(实例化)
        | Tables | Are |
        | ------------- |:-------------?
        | 声明数组: | 数组类型 数组名称[] = null; | | | 数组类型 [] 数组名称 =null; | | 开辟数组空间: | 数组名称 =new` 数组类型[长度]; |

那么当数组开辟空间之后,就可以采用如下的方式的操作:

    数组的访问通过索引完成,即:“数组名称[索引]”,但是需要注意的是,数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException 异常信息;
    当我们数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值;
    数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一个有限的数据集合,所以应该使用 for 循环。
    在 Java 中提供有一种动态取得数组长度的方式:数组名称.length;

范例: 定义一个int型数组

public class ArrayDemo {public static void main(String args[]) {int data[] = new int[3]; /*开辟了一个长度为3的数组*/data[0] = 10; // 第一个元素data[1] = 20; // 第二个元素data[2] = 30; // 第三个元素for(int x = 0; x < data.length; x++) {System.out.println(data[x]); //通过循环控制索引}}
}

数组本身除了声明并开辟空间之外还有另外一种开辟模式。

范例: 采用分步的模式开辟数组空间

public class ArrayDemo {public static void main(String args[]) {int data[] = null;data = new int[3]; /*开辟了一个长度为3的数组*/data[0] = 10; // 第一个元素data[1] = 20; // 第二个元素data[2] = 30; // 第三个元素for(int x = 0; x < data.length; x++) {System.out.println(data[x]); //通过循环控制索引}}
}

但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现 NullPointerException 异常信息:

public class ArrayDemo {public static void main(String args[]) {int data[] = null;System.out.println(data[x]);}
}

这一原则和之前讲解的对象是完全相同的。

数组在开发之中一定会使用,但是像上面的操作很少。在以后的实际开发之中,会更多的使用数组概念,而直接使用,99%情况下都只是做一个 for 循环输出。
数组引用传递

既然数组属于引用数据类型,那么也一定可以发生引用传递。在这之前首先来研究一下数组的空间开辟。

范例: 观察一道程序

public class ArrayDemo {public static void main(String args[]) {int data[] = null;data = new int[3]; //开辟一个长度为3的数组data[0] = 10;data[1] = 20;data[2] = 30;}
}

  

新建数组变量

那么既然说到了引用数据类型了,就一定可以发生引用传递,而现在的引用传递的本质也一定是:同一块堆内存空间可以被不同的栈内存所指向。

范例: 定义一个程序

public class ArrayDemo {public static void main(String args[]) {int data[] = null;data = new int[3]; //开辟一个长度为3的数组int temp[] = null; //声明对象data[0] = 10;data[1] = 20;data[2] = 30;temp = data;  //int temp[] = data;temp[0] = 99;for(int i = 0; i < temp.length; i++) {System.out.println(data[i]);}}
}

引用传递分析都是一个套路。同一块堆内存被不同的栈内存所指向。
数组静态初始化

在之前所进行的数组定义都有一个明显特点:数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。

数组的静态初始化一共分为以下两种类型:
Tables     Are
简化格式:     数据类型 数组名称 = {值, 值,…}
完整格式:     数据类型 数组名称 = new 数据类型[] {值, 值,…}

范例: 采用静态初始化定义数组

public class ArrayDemo {public static void main(String args[]) {int data[] = {1, 2, 4, 545, 11, 32, 13131, 4444};for(int i = 0; i < data.length; i++) {System.out.println(data[i]);}}
}

在开发之中,对于静态数组的初始化强烈建议使用完整语法模式,这样可以轻松地使用匿名数组这一概念。

public class ArrayDemo {public static void main(String args[]) {System.out.println(new int[] {1, 2, 4, 545, 11, 32, 13131, 4444}.length);}
}

以后使用静态方式定义数组的时候一定要写上完整格式。

数组最大的缺陷:长度固定。
二维数组

在之前所使用的数组发现只需要一个索引就可以进行访问,那么这样的数组实际上非常像一个数据行的概念。

现在痛过一个索引就可以取得唯一的一个记录。所以这样的数组可以简单理解为一维数组,而二维数组本质上指的是行列集合,也如果要确定某一个数据需要行索引和列索引来进行定位。

如果要想确定一个数据则数据使用的结构是“数组名称[行索引][列索引]”,所以这样的结构就是一个表的结构。

那么对二维数组的定义有两种声明形式:

    数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];
    数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};

数组的数组就是二维数组。

范例: 定义一个二维数组

public class ArrayDemo {public static void main(String args[]) {//此时的数组并不是一个等列数组int data[][] = new int[][] {{1, 2, 3}, {4, 5}, {6, 7, 8, 9}};//如果在进行输出的时候一定要使用双重循环,//外部的循环控制输出的行数,而内部的循环控制输出列数for(int i = 0; i < data.length; i++) {for(int j = 0; j < data[i].length; j++) {System.out.print("data[" + i + "][" + j + "]=" + data[i][j] + "、");}System.out.println();}}
}

由于输出麻烦,所以可以忽略了,在进行开发之中,出现二位数组的几率并不高。

同样的,我们看看别人的解析,答案最后是

正确答案: A C F

我是歌谣,喜欢敲代码,无聊刷刷题。不多说了,我先去敲代码去。有什么不合理之处,欢迎吐槽。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

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

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

相关文章

[开发技巧3]不显示报表直接打印

水晶报表9.2VB6 使用Application可以进行打印 在将数据赋给报表模板后&#xff0c;调用PrintOut方法 赋给报表数据objCRReport.Database.SetDataSource rst 此句打印&#xff0c;会出现打印提示框objCRReport.PrintOut 不提示&#xff0c;直接打印到默认打印机CallobjCRReport.…

python中cursor操作数据库(转)

原文出处&#xff1a;http://doudouclever.blog.163.com/blog/static/175112310201284115340663/python 操作数据库&#xff0c;要安装一个Python和数据库交互的包MySQL-python-1.2.2.win32-py2.5.exe&#xff0c;然后我们就可以使用MySQLdb这个包进行数据库操作了。 操作步…

java面试题25 在程序代码中写的注释太多,会使编译后的程序尺寸变大。

java面试题25 在程序代码中写的注释太多&#xff0c;会使编译后的程序尺寸变大。 A:正确 B:错误 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我 拿到这道题&#xff0c;我觉得说的贼有道理&#xff0c;注释太多&#xff0c;尺寸变大。无疑与就和驾考 一样&#xff0c;遇到路人…

implicit request ?

不了解或不會Action在play framework很難再深入下去, 這是http request的點 以下這段代碼困擾我很久, 如今我才剛了解 Action { implicit request >Ok("Got request [" request "]") } 原文這麼說 It is often useful to mark the request parameter …

SQL开发中容易忽视的一些小地方( 三)

目的&#xff1a;这篇文章我想说说我在工作中关于in和union all 的用法. 索引定义 &#xff1a; 微软的SQL SERVER提供了两种索引&#xff1a;聚集索引(clustered index&#xff0c;也称聚类索引、簇集索引)和非聚集索引(nonclustered index&#xff0c;也称非聚类索引、非簇集…

java面试题26 java语言的下面几种数组复制方法中,哪个效率最高?

java面试题26 java语言的下面几种数组复制方法中&#xff0c;哪个效率最高&#xff1f; A for 循环逐一复制 B System.arraycopy C Array.copyOf D 使用clone方法 效率&#xff1a;System.arraycopy > clone > Arrays.copyOf > for循环 1、System.arraycopy的用法…

pycharm使用笔记2-远程连接(转)

原文地址:https://blog.csdn.net/jinxiaonian11/article/details/70208920 随着科技的发展&#xff0c;远程办公已经是一种趋势&#xff0c;远程开发能力对于每一个程序员来说都是必不可少的。有时候就算在公司&#xff0c;在进行开发的时候有许多的数据都是储存在服务器上的&a…

第三章 使用属性升级MyBank

1、C#中的访问修饰符&#xff1a; a) public 【公共的】访问不受到任何限制&#xff0c;级别最高。一般用于修饰方法&#xff0c;提供给其他类调用。 b) private 【私有的】只有类的内部可以使用&#xff0c;一般用于修饰字段&#xff0c;保证数据的安全性。 注&#xff1a;如果…

java面试题27 java中下面哪些是Object类的方法()

java面试题27 java中下面哪些是Object类的方法&#xff08;&#xff09; A notify() B notifyAll() C sleep() D wait() 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我。遇到这种题&#xff0c;我默默的打开了编译工具 Object类中方法&#xff1a; protected Object clone()…

HK-2000 数采仪系统说明之 7.HK7710 DTU 简单配置说明

DTU配置列表: 1 移动服务中心设置(MSC) 2 终端单元设置 3 网络通道设置 4 用户串口设置 移动服务中心设置(MSC) 一般默认&#xff0c;当需要连接的网络是APN网络是需要配置&#xff0c;该项下的APN接入点信息 MSC设置列表: 1 服务代码 2 P…

shiro学习(1):shiro简介

Apache Shiro是Java的一个安全框架。对比另一个安全框架Spring Sercurity&#xff0c;它更简单和灵活。 Shiro可以帮助我们完成&#xff1a;认证、授权、加密、会话管理、Web集成、缓存等。 Apache Shiro特性 Authentication&#xff1a;身份认证/登录&#xff0c;验证用户是…

是要我向垃圾学习吗

之前把程序给改了&#xff0c;造成程序不能通过编译&#xff0c;然后 领导让我不要乱改&#xff0c;程序那么写肯定是有原因的&#xff0c;照着以前的弄。 我心里那叫一个羊驼&#xff0c;我改的是我自己写的那部分结构&#xff0c;我在编写新功能的逻辑的时候&#xff0c;发现…

微软启动了自爆程序,让我们一起帮它倒计时

……“公元2008年10月20日&#xff0c;注定成为人类信息技术史上不平凡的一天&#xff0c;因为在这一天&#xff0c;曾经创造了无数辉煌的计算机软件帝国微软公司&#xff0c;启动了自爆程序&#xff0c;剩下的&#xff0c;就是倒计时了……” ——《地球人类信息技术编年史》 …

python字典遍历的几种方法(转)

源地址&#xff1a;https://www.cnblogs.com/stuqx/p/7291948.html&#xff08;1&#xff09;遍历key值>>> a {a: 1, b: 2, c: 3} >>> for key in a:print(key:a[key])a:1 b:2 c:3 >>> for key in a.keys():print(key:a[key])a:1 b:2 c:3在使用上&a…

shiro学习(2):第一个shiro程序

工具idea 首先创建maven项目 配置文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

解决水晶报表部署时出错的问题

我在使用VS2008自带的水晶报表开发一个项目时&#xff0c;遇上这么一个问题&#xff0c;就是在开发环境下运行没有问题&#xff0c;而且在开发的机器上部署发布的项目时也没有问题&#xff0c;但是在服务器上部署发布的项目就出现web.config配置文件出错。 错误报的是&#xff…

用树莓派(等)为 USB Midi 键盘增添连接方式

我在去年买了一个 M-Audio 的 Midi 键盘&#xff0c;用来连接电脑或者 iPad 弹琴。但是由于琴摆放的位置没有办法拉充电线&#xff0c;所以我能弹琴多久很大程度上取决于设备还有多少电。前一阵子从朋友手里白嫖了个橘子派&#xff0c;我就考虑用这个板子给我的 Midi 键盘做个无…

python ftp 上传文档出现 553 Could not create file

报错内容&#xff1a; *cmd* TYPE I*put* TYPE I\r\n*get* 200 Switching to Binary mode.\r\n*resp* 200 Switching to Binary mode.*cmd* PASV*put* PASV\r\n*get* 227 Entering Passive Mode (10,65,252,38,254,125).\r\n*resp* 227 Entering Passive Mode (10,65,252,38,25…

shiro学习(3):用户权限

工具idea 首先创建maven项目 配置文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

WPF学习笔记(三)

1.1 事件概括 第一节中我们给窗体添加了一个按钮&#xff0c;不过好像Button点个几下也只有些发光样式的变化&#xff0c;什么你还把系统皮肤去掉了&#xff1f;算了承认下确实够寒碜&#xff0c;那让我们再动动手。 1.1.1 路由事件简述 public HelloWorld() { Button button …