javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(4)-- 变量和数组
来源:互联网 发布:js怎么获取数据库数据 编辑:程序博客网 时间:2024/06/05 04:46
数组
数组是一个容器对象,它保存单个类型的固定数量的值。创建数组时,建立数组的长度。创建后,其长度是固定的。你已经看到了一个阵列的例子,在“Hello World!”的主要方法中。应用。本节将更详细地讨论数组。
数组中的每个项目称为元素,每个元素都由其数字索引访问。如上图所示,编号从0开始。例如,第9个元素将在索引8处被访问。 以下程序ArrayDemo创建一个整数数组,在数组中放置一些值,并将每个值打印到标准输出。
class ArrayDemo { public static void main(String[] args) { // declares an array of short short[] anArray; // allocates memory for 10 shorts anArray = new short[10]; //declares and initial a variables short ArrayValue = 0; for( short i = 0 ; i < 10 ; i ++){ ArrayValue += 100; anArray[i] = ArrayValue ; System.out.println("Element at index "+ i +" : " + anArray[i]); } }}
程序的输出结果如下:
Element at index 0: 100Element at index 1: 200Element at index 2: 300Element at index 3: 400Element at index 4: 500Element at index 5: 600Element at index 6: 700Element at index 7: 800Element at index 8: 900Element at index 9: 1000
声明一个变量来引用一个数组
上述程序使用以下代码行声明一个数组(名为anArray):
// declares an array of integersint[] anArray;
像其他类型的变量声明一样,数组声明有两个组件:数组的类型和数组的名称。数组的类型写为type [],其中type是包含元素的数据类型。括号是指示此变量保存数组的特殊符号。数组的大小不是其类型的一部分(这就是为什么括号为空)。数组的名称可以是任何您想要的名称,只要它遵循以前在命名部分中讨论的规则和约定。与其他类型的变量一样,声明实际上并不创建数组。它只是告诉编译器这个变量将保存一个指定类型的数组。
类似地,您可以声明其他类型的数组:
byte[] anArrayOfBytes;short[] anArrayOfShorts;long[] anArrayOfLongs;float[] anArrayOfFloats;double[] anArrayOfDoubles;boolean[] anArrayOfBooleans;char[] anArrayOfChars;String[] anArrayOfStrings;
当然你也可以使用如下的方式来声明,但是我们不建议您使用以下方式:
// this form is discouraged(不建议使用!)float anArrayOfFloats[];
创建、初始化、访问一个数组
创建数组的一种方法是使用New运算符。 ArrayDemo程序中的下一个语句为10个整数元素分配一个具有足够内存的数组,并将数组分配给anArray变量。
// create an array of integersanArray = new int[10];
如果此语句丢失,则编译器将打印如下所示的错误,并且编译失败:
ArrayDemo.java:4: Variable anArray may not have been initialized.
或者,您可以使用快捷方式语法来创建和初始化数组:
int[] anArray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
这里,数组的长度由大括号之间提供的值的数量确定,并用逗号分隔。
您还可以通过使用两个或更多个括号(例如String [] []名称来声明数组数组(也称为多维数组)。因此,每个元素必须由相应数量的索引值访问。
在Java编程语言中,多维数组是一个数组,其组件本身就是数组。这与C或Fortran中的阵列不同。这样做的结果是允许行的长度变化,如下面的MultiDimArrayDemo程序所示:
class MultiDimArrayDemo { public static void main(String[] args) { String[][] names = { {"Mr. ", "Mrs. ", "Ms. "}, {"Smith", "Jones"} }; // Mr. Smith System.out.println(names[0][0] + names[1][0]); // Ms. Jones System.out.println(names[0][2] + names[1][1]); }}
最后,您可以使用built-in length属性来确定任何数组的大小。以下代码将数组的大小打印到标准输出:
System.out.println(anArray.length);
复制数组
System类有一个arraycopy方法,您可以使用它来有效地将数据从一个数组复制到另一个数组:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
两个Object参数指定原数组和要目标数组。三个int参数指定源数组中的起始位置,目标数组中的起始位置和要复制的数组元素的数量。
以下程序,ArrayCopyDemo,声明一个char元素数组,拼写“脱咖啡因”一词。它使用System.arraycopy方法将数组组件的子序列复制到第二个数组中:
class ArrayCopyDemo{ public static void main(String[] agrs){ char[] copyFrom = {'b','i','l','l','i','l','o','v','e','y','o','u','!'}; char[] copyTo = new char[14]; System.arraycopy(copyFrom,0,copyTo,1,13); System.out.println(new String(copyTo)); }}
输出的结果为:(注意,第一个输出的字符,其实是一个空格。)
billiloveyou!
数组的操作
数组是用于编程的强大而有用的概念。 Java SE提供了执行与数组相关的一些最常见操作的方法。例如,ArrayCopyDemo示例使用System类的arraycopy方法,而不是手动遍历源数组的元素,并将每个元素放在目标数组中。这是在幕后执行的,使开发人员只能使用一行代码来调用该方法。 为了方便起见,Java SE提供了几种在java.util.Arrays类中执行数组操作(常见任务,如复制,排序和搜索数组)的方法。例如,可以将上一个示例修改为使用java.util.Arrays类的copyOfRange方法,您可以在ArrayCopyOfDemo示例中看到。不同的是,使用copyOfRange方法不需要在调用方法之前创建目标数组,因为方法返回了目标数组:
class ArrayCopyOfDemo { public static void main(String[] args) { char[] copyFrom = {'b','i','l','l','i','l','o','v','e','y','o','u','!'}; char[] copyTo = java.util.Arrays.copyOfRange(copyFrom,0, 13); System.out.println(new String(copyTo)); }
如您所见,该程序的输出是相同的(billiloveyou!),尽管它需要较少的代码行。请注意,copyOfRange方法的第二个参数是要复制的范围的初始索引,包括第三个参数是要复制的范围的最终索引。
java.util.Arrays类中的方法提供的一些其他有用的操作是:
- 搜索数组以获取特定值,以获取其放置的索引(binarySearch方法)。
- 比较两个数组以确定它们是否相等(equals方法)。
- 将数组排列成升序。这可以使用sort方法或并行使用Java SE 8中引入的parallelSort方法顺序完成。
- 多处理器系统上的大型数组的并行排序比顺序数组排序更快。
变量的小结:
Java编程语言使用“字段”和“变量”作为其术语的一部分。
- 实例变量(非静态字段)对于每个类的实例是唯一的。
- 类变量(静态字段)是使用静态修饰符声明的字段;只有一个类变量的副本,而不管该类已被实例化多少次。
- 局部变量在方法中存储临时状态。
- 参数是向方法提供额外信息的变量;局部变量和参数总是分类为“变量”(而不是“字段”)。
- 当命名您的字段或变量时,您应该(或必须)遵循的规则和惯例。
八个基本数据类型是:byte,short,int,long,float,double,boolean和char。 - java.lang.String类表示字符串。
- 编译器将为上述类型的字段分配合理的默认值。
- 对于局部变量,不会分配默认值。
- 字面值是固定值的源代码表示。
- 数组是一个容器对象,它保存单个类型的固定数量的值。创建数组时,建立数组的长度。创建后,其长度是固定的。
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(4)-- 变量和数组
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(1)-- 变量
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(2)-- 变量和常用数据类型
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(5)-- 运算符
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(6)-- 表达式、语句、块
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(7)-- 流程控制语句
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(3)-- 基本数据类型的默认值
- javaSE_8系列博客——Java语言的特性(三)--类和对象(4)--声明成员变量
- javaSE_8系列博客——Java语言的特性(四)--注解--(1)--基础知识
- javaSE_8系列博客——Java语言的特性(四)--注解--(4)-- 类型注解和可插拔类型系统
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(4)--使用接口作为类型
- javaSE_8系列博客——Java语言的特性(三)--类和对象(3)--类的声明
- javaSE_8系列博客——Java语言的特性(三)--类和对象(9)--对象的创建
- javaSE_8系列博客——Java语言的特性(三)--类和对象(10)--对象的使用
- javaSE_8系列博客——Java语言的特性(三)--类和对象(13)--理解类的成员
- javaSE_8系列博客——Java语言的特性(三)--类和对象(2)--类(宏观概述)
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(1)--宏观把控
- WINDOWS访问SAMBA提示没有权限
- Html和css常用个别英语单词
- 常用排序算法代码整理
- c语言与文件处理基础
- 刷新和加载更多
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(4)-- 变量和数组
- go语言测试test
- ~使用两个队列实现一个栈~
- [smoj 1022]位置
- html 中 form 的应用
- Attacks on TCP/IP Protocols (Task3) SYN Flooding Attack
- java基础******银行存款
- Java jdk 1.7安装
- (分片连接池)客户端分片的Jedis分布式(Sharding/shared一致性哈希)(redis2.8)