Java数组的声明与创建示例详解

今天在刷Java题的时候,写惯了C++发现忘记了Java数组的操作,遂把以前写的文章发出来温习一下。

首先,数组有几种创建方式?

Java程序中的数组必须先进行初始化才可以使用,所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值,而在Java中,数组是静态的,数组一旦初始化,长度便已经确定,不能再随意更改。

声明数组变量

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

dataType[] arrayRefVar; // 首选的方法

或

dataType arrayRefVar[]; // 效果相同,但不是首选方法 c++沿用

但是以上只是声明了数组,并不能直接使用,因为没有为其分配内存空间,此时必须初始化。

例如以下代码在Java8中就会报错

public class test{
	public static void main(String[] arg) {
 		int[] a;
		a[0]= 1;
		System.out.println(a[0]);
	}
}
// 系统将报错 局部变量 a 可能尚未初始化
// 进一步加入我个人的理解,声明的数组没有确定大小,没有办法分配内存空间,所有必须初始化
// 但是以下代码在Java中是禁止的
public class test{
	public static void main(String[] arg) {
 		int[10] a;
		a[0]= 1;
		System.out.println(a[0]);
	}
}
// 系统将报错 标记“10”上有语法错误,删除此标记
// 不能像c++这样初始化数组

所以,我们拥有两种初始化数组的方式

静态初始化:由程序猿自己确定每个数组元素的初始值,而数组的长度则由系统自己决定,例如:

int[] a = {1,2,3,4,5};
System.out.println(a.length);
// 第二行代码可以看出,数组拥有类的性质,可以用dot访问其变量
// 第一行代码静态初始化了数组整型数组a,赋予其固定的长度,系统可以为其分配空间

动态初始化:初始化时由程序猿确定数组的长度,而没一个数组元素的值,则由系统来分配初始值,例如:

int[] b=new int[5];
System.out.println(b[0]);
// 很明显,数组就是类

数组一定要初始化吗?所谓的对数组初始化究竟是对什么初始化?是数组变量本身吗?

答案看上去肯定是一定要,但是我在实践中发现却是不一定需要,要想搞清楚这个问题,我们需要理解数组变量和数组对象的区别。而在认识他们之前需要先了解Java的数据类型。Java的数据类型分为两种,基本数据类型和引用数据类型。

基本数据类型有八种:byte,short,int,long,float,double,boolean,char。只需要知道基本数据类型变量包含一个值,这个值的类型与变量相对应。

引用数据类型:引用型变量的值与基本类型变量不同,变量值是指向内存空间的引用(地址)。所指向的内存中保存着变量所表示的一个值或一组值。这和C++中的指针很相似,事实上Java语言中的引用实际上就是指针,是指向一个对象的内存地址。Java所说的不支持指针只是不支持指针的计算,但是指针类型被保留了下来,并称为引用类型。声明引用数据类型后,不可以直接使用,还需要实例化在堆内存中开辟内存空间。

数组变量是一个引用类型的变量,数组变量是指向堆内存当中的数组对象,并不是数组本身。当改变一个数组变量所引用的数组,就可以造成数组长度可变的假象。实际上数组对象本身的长度本没有变化,只是数组变量指向了一个新的数组对象。

所以对于数组变量来说,他并不需要初始化,我们常说的初始化其实是初始化数组对象而非数组变量,有时候我们不进行初始化,而让数组变量指向一个有效的数组对象,数组也可以使用,例如:

int[] a = {0,1,2,3,4};
int[] b;
b = a;
System.out.println(b[1]);
// 输出结果为 1
b[1] = 99;
System.out.println(a[1]);
// 输出结果为 99
我自己的理解是,Java的数组就是一个对象。初始化数组的最好办法就是new一个。

数组的增强循环(也可用于其他集合)

Java增强循环语句如下:

for(声明语句:表达式){
 // 代码
}
// 冒号可以理解为"in"

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等(而不是数组的下标!!)。

表达式: 表达式是要访问的数组名,或者是返回值为数组的方法。

实例

public class Test {
 public static void main(String args[]){
  int [] numbers = {10, 20, 30, 40, 50};

  for(int x : numbers ){
   System.out.print( x );
   System.out.print(",");
  }
  System.out.print("\n");
  String [] names ={"James", "Larry", "Tom", "Lacy"};
  for( String name : names ) {
   System.out.print( name );
   System.out.print(",");
  }
 }
}

输出结果

10,20,30,40,50,
James,Larry,Tom,Lacy,

我们回头理解其执行顺序:

  • 创建名为x的integer变量
  • 将numbers的第一个元素赋值给x
  • 执行大括号内的代码
  • 赋值给下一个元素x
  • 重复执行至所有的元素都被运行

Java的变量类型Java中有三种变量类型类变量:独立于方法之外的变量,用static修饰实例变量:独立于方法之外的变量,不过没有static修饰类的每个对象特定的变量也是实例对象(顾名思义)局部变量:类的方法中的变量

public class variable{
 static int a = 0; // 类变量

 String str = "Java is easy to learn."; // 实例变量 实例变量声明在类内而不是方法中

 public void method{
  int b = 1; // 局部变量 局部变量是声明在方法中的
  // 局部变量在使用前必须初始化
  int x;
  int z = x + 1; // 这就是错误的代码,无法编译
 }
}

声明与初始化变量类型实例变量永远会有默认值。如果没有明确的赋值给实例变量,或者没有调用setter,实例变量仍有默认值。

  • integers 0
  • floating points 0.0
  • Booleans false
  • references null

局部变量没有默认值

到此这篇关于Java数组的声明与创建示例详解的文章就介绍到这了,更多相关Java数组的声明与创建内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2020-07-19

Java 数组声明、创建、初始化详解

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i

Java数组声明、创建、初始化基础

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i

关于Java数组声明、创建、初始化的相关介绍

本文讲述了Java数组的几个相关的方面,讲述了对Java数组的声明.创建和初始化,并给出其对应的代码. 一维数组的声明方式:type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数] 实例:TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) {

Java数组的定义、初始化、及二维数组用法分析

本文实例讲述了Java数组的定义.初始化.及二维数组用法.分享给大家供大家参考,具体如下: 数组的定义 1.数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识. 数组的分类 一维数组 二维数组 多维数组 数组的优点: 例如:定义100个整型变量.用数组很方便. 数组声明: 1.int [] array; 2.int array []; 数组的声明以及内存的分配 1.为数组分配内存空间,如果不分配内存,将不能访问它的任何元素.我们使用new关键字来为数组分配内存空间. int

Java数组的基本学习教程

Java数组声明.创建.初始化 一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5]

Java数组常见应用详解【创建、遍历、排序、查找】

本文实例讲述了Java数组常见应用.分享给大家供大家参考,具体如下: 双重for循环 外循环控制行,内循环控制列. //乘法表 for(int i = 1; i <= 9; i++) { for(int j = 1; j <= i ;j++) { System.out.print(j+"*"+i+"="+(i*j)+"\t"); } System.out.println(); } DecimalFormat #:一个数字 0:一个数字

java数组的初始化及操作详解

数组的基本概念 如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下: int i1, i2, i3, ... i100; 但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次. 其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作.数组本身属于引用数据类型,那么既然是引

java安全编码指南之:声明和初始化说明

简介 在java对象和字段的初始化过程中会遇到哪些安全性问题呢?一起来看看吧. 初始化顺序 根据JLS(Java Language Specification)中的定义,class在初始化过程中,需要同时初始化class中定义的静态初始化程序和在该类中声明的静态字段(类变量)的初始化程序. 而对于static变量来说,如果static变量被定义为final并且它值是编译时常量值,那么该static变量将会被优先初始化. 那么使用了final static变量,是不是就没有初始化问题了呢? 我们来

Java中数组的创建与传参方法(学习小结)

(一)数组的创建 数组的创建包括两部分:数组的申明与分配内存空间. int score[]=null; //申明一维数组 score=new int[3]; //分配长度为3的空间 数组的申明还有另外一种方式: int[] score=null; //把中括号写在数组名前面 通常,在写代码时,为了方便,我们将两行合并为一行: int score[]=new int score[3]; //将数组申明与分配内存写在一行 (二)传递参数 由于初学java,这里只讨论值传递,不考虑地址传递.主要有3点