今天学习了数组的相关知识,明白了简单的数组使用方法。并针对相关的练习题加强了该部分的知识理解,明白了在不同场景下如何使用数组

数组

数组是表示多个相同类型变量的集合(在一个数组中所存放的所有元素的类型必须一致),可以使用共同的名字引用它
属于复杂数据类型

  1. 由类型相同的元素组成的有顺序的数据集合
  2. Java数组是固定的不能扩展[长度一旦声明,
  3. 不能修改,可以存储基本数据类型或对象
  4. 数组可以定义为任意数据类型,并且可分为一维数组或多维数组
    一维数组
    一维数组实质上是相同类型变量的列表。要创建一个数组必须首先定义数组变量所需的类型。通用的一维数组的声明格式是:type var-name[ ];
int[] arr1 = new int[10]; // int[]或arr2[]都是用于声明是数组类型,int用于声明每个
元素都是int类型
int arr2[] = new int[20]; //要求使用数组之前必须先声明所需空间大小,即存储的元素个
数,一旦声明则不能修改
int[] brr;
brr[0]=123;  //语法报错

数组中的元素必须类型相同,不能存储不同类型的元素,除非使用Object[]

int[] brr=new int[10];
brr[0] = 123.; //类型必须一致   brr[0]表示数组的第0个元素,[]中是索引下标值--
序号
Object[] brr=new Object[10];
brr[0] = 123.;
brr[1]="sdafsd";

可以通过数组的下标操作数组中所存储的元素,注意下标从0开始,例如arr[0]+=12;修改元素的值System.out.println(arr[0]);获取元素
使用数组之前,必须先定义后使用,定义的方式: int[] arr或者int arr[]
声明数组变量后,必须进行初始化操作,也就是定义数组的长度 arr=new int[5],这里表示开启可
以存放5个int类型数据的数组,这些元素时连续存放的
简单类型的数组初始化长度后,每个元素都有默认值

int[] arr=new int[10];
//所有的数值型数据默认0,boolean类型默认false,char类型默认'\0'
System.out.println(arr[1]); //输出为0

创建数组后,每个元素都有一个默认值,如果针对的是引用类型,则默认值为null;如果是简单类型中byte short int long float double,则默认值为0,如果char类型默认值为\0,如果boolean类型,则默认false

Integer[] arr=new Integer[10];
System.out.println(arr[1]); //输出为null

在Java中允许直接赋值初始
int[] arr={1,2,3,4,5,6,7}; 注意在于int[]中不能写具体的对应长度
也可以写成new int[]{1,2,3,4,5,6,7},但是int[]中不能有长度值

int[] arr= {1,2,3,4,5,6};
System.out.println(arr[3]);
int[] brr=new int[] {1,2,3,4,5,67};//注意不能修改int[]为int[6],否则语法报错
System.out.println(brr[3]);

声明一个int型的一维数组:int number[];
[ ]在字节左边,对后面所有变量都有影响char[] s, t;

int arr[],brr[];  //等价于int[] arr,brr;
arr=new int[5];
brr=new int[3];
System.out.println();

数组虽然声明了变量类型。但不存在实际的数值,它的值为null。为了使数组number 成为实际的、物理上存在的整型数组,你必须用运算符new 来为其分配地址并且把它赋给number

int[] arr;//声明整型数组变量arr
System.out.println(arr);  //语法错误,必须先声明后使用,先赋初值后使用

运算符new 是专门用来分配内存的运算符,格式为:array-var = new type[size]; 开启出来的空间是连续,可以通过下标进行快速定位
例如上面的代码: int[] kk=new int[10];
length属性
数组对象中有个属性length表示的是数组的长度

int[] arr=new int[] {1,2,3,4,5,6};
System.out.println(arr.length);  //获取数组中的元素个数

使用运算符new来分配数组,必须指定数组元素的类型和数组元素的个数。用运算符new分配数组后,数组中的元素将会被自动初始化为一个值,这个值具体是什么和类型相关。如果是数值类型【整数、浮点数、char类型】其中自动初始值为0,如果boolean类型则自动初始值为false
比如s = newchar[26];程序,生成一个包含26个字符值的数组,并将每个数组元素的初始值设为‘\u0000
创建简单类型的数组时,如果是数值型(整数或者浮点数),默认元素为0;如果是字符型,默认元素为\u0000[注意这里不是字符0,字符0的值为48];如果是boolean型,则默认元素为false//如果创建的时复杂类型的数组,例如String[]b=new String[10],则默认元素为null
数组元素的访问
针对数组中的元素可以通过下标进行访问,访问的语法为: 数据变量的名称[下标]数组中的所有元素将被初始化为零。接下来可以给数组中每个元素赋值
kk[0]=10;
kk[1]+=13;
……
这样给数组赋值显得不够现实
声明的同时初始化
在数组定义时指定元素的初始值,即称为数组的初始化
int a[]={1,2,3,4,5};
声明一个数组并初始数组内容
int[] score = {90, 85, 55, 94, 77}; //也可以写作new int[]{90, 85, 55, 94, 77},但是不允许写成newint[5]{90, 85, 55, 94, 77},语法报错

int[] arr=new int[] {2,5,3,1,9,0};
for(int i=0;i<arr.length;i++)System.out.println("数组arr的第"+i+"个元素值为:"+arr[i]);
int[] arr = new int[] { 2, 5, 3, 1, 9, 0 };
for (int i = 0; i < arr.length; i++)System.out.printf("%s[%d] = %d\n", "arr", i, arr[i]);  //printf用于格式化
输出,

格式化输出

int[] score = {90, 85, 55, 94, 77}; //也可以写作new int[]{90, 85, 55, 94, 77}
for(int i = 0; i < score.length; i++)System.out.printf("score[%d] = %d\n", i, score[i]);
//前面的格式符号%x的个数应该和后面参数一致,如果出现了参数不足时则会报错
int[] arr = new int[] { 2, 5, 3, 1, 9, 0 };
for (int i = 0; i <= arr.length; i++)   //注意=的问题System.out.printf("%s[%d] = %d\n", "arr", i, arr[i]);  //没有语法错误,但
是执行代码会有报错

错误分析:在控制台上可以看到报错信息ArrayIndexOutOfBoundsException表示数组越界,就是访问一个不存在的元素
当取出数组元素的时,数组下标索引不能超出数组范围[0到length-1],如果超出数组范围会发生ArrayIndexOutOfBoundsException。例如声明一个数组的元素个数为5,而去取了它的第6个,那么程序就会提示下标越界的错误
可以使用动态的方式来宣告数组长度,而不用在程序中事先决定数组大小

public class Test08 {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int len=sc.nextInt();int[] arr=initArr(len);//可以根据输入的参数创建不同长度的数组System.out.println(arr.length);}public static int[] initArr(int length) {// if(length<1)
// return new int[5];return new int[length];//初始化数组长度时参数不同小于0,但是允许等于0}
}

循环打印出小写字母a~z

char c='a';
for(int i=0;i<26;i++)System.out.println((char)(c+i));
char[] arr=new char[26];
for(int i=0;i<26;i++)arr[i]=(char)(c+i);
//输出数组中的数据
for(int i=0;i<arr.length;i++)System.out.println(arr[i]);
//foreach结构,是用于遍历集合写法的语法糖,是for循环的简化写法
for(char temp:arr)System.out.println(temp);

将同一个对象指定给两个参考名称运行后则brr变量和arr变量都指向同一个数组,就是前面创建的数组,其中存放了26个字符的数组

char[] arr=new char[26];
for(int i=0;i<arr.length;i++)arr[i]=(char)('a'+i);
char[] brr=arr;//运行结果是变量brr和变量arr指代同一个位置
brr[brr.length-1]='\u9e00';  //修改brr中的内容实际上也修改了arr的内容
for(char temp:arr)System.out.println(temp);

Javaj中数组的定义及使用相关推荐

  1. java android 数组_android中数组的定义与使用

    android中数组的定义 可以直接在JAVA代码中声明,也可以在res->values目录下新建一个xml文件,作为数组资源进行声明 字符数组可以有如下2种声明方式String[]或者是Lis ...

  2. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  3. java学习总结(16.06.03)java中数组的定义和初始化

    刚开始接触java的数组时,我觉得java的数组和c++的数组虽然大致上差不多但细节上差很多,我也因此差点混乱了.后来自己仔细理了一下发现java和c++的数组只在定义和初始化上存在几点差异,而其他部 ...

  4. Java数组怎么定义?java中数组的定义及使用方法

    许多初学者不知道如何定义java中数组,下面我就为大家带来一篇java中数组的定义及使用方法.应该可以解决大部分人的需求,现在就分享给大家,也给大家做个参考. 数组:是一组相关变量的集合 数组是一组相 ...

  5. c语言变量定义数组,C语言中数组的定义和使用

    一.1.一维数组的定义: 类型说明符 数组名[常量表达式];    注意:常量表达式包括常量与符号常量,不能包含变量. 2.一维数组的引用: 数组名[下标]; 3.一维数组的初始化: a.在定义数组时 ...

  6. c语言中数组的定义与应用

    定义方法: 类型  变量名[元素个数]: 比如: int  a[6]; char b[24]; double c[3]; 注意,c语言中数组的元素个数是不能动态定义的(修改:在c99中已经可以了) 也 ...

  7. verilog中数组的定义_verilog数组定义及其初始化

    这里的内存模型指的是内存的行为模型.Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这 ...

  8. java中数组的定义与使用

    数组 数组的定义 数组的存储 打印数组的方式 认识常见的数组异常 静态数组初始化 数组的拷贝 二维数组的定义 打印二位数组 数组的定义 数组共有三种定义方式 1.定义且初始化一个数组(静态初始化) i ...

  9. Java中“数组”的定义

    在Java中,数组的定义,有两种方式:静态初始化.动态初始化:这两种方式,各有不同.各有优劣,在我看来,静态初始化,更方便一些,也更"不用费脑子" 静态初始化:定义一个int 类型 ...

最新文章

  1. 转载 为什么不要 lock(this) ? lock object 并是readonly
  2. IOS上传图片旋转90度问题出现原因及解决方案
  3. 连接数据库版本不一致
  4. 如何更改Spring Boot应用程序的默认端口
  5. Android开发真机测试方法 (转)
  6. C++中的深拷贝和浅拷贝(详解)
  7. 防火墙软件 - IPCop
  8. CentOS7 安装部署k8s
  9. 下载hibernate4的jar包
  10. 一批恶意Google Play应用窃取用户银行信息
  11. java api 已取消到该网页的导航问题
  12. elasticsearch-7.17.4 基础班升级到白金版本
  13. 神经网络基础05-注意力机制总结
  14. Python优化算法02——遗传算法
  15. deny of sb sth_deny的短语
  16. 公司官网产品爬取写入ES
  17. Office这么多版本傻傻分不清,到底哪个版本好用?
  18. 百度手机输入法for android16,百度输入法下载
  19. 机器学习笔记—13(李宏毅版)神经网络压缩与元学习
  20. 数据处理与服务发布——网络分析

热门文章

  1. 任务车间调度问题的混合整数规划模型
  2. [转]VR原理讲解及开发入门
  3. 迅为iTOP4412 uboot烧写错误挽救办法
  4. 步进电机驱动器PCB原理图及其stm32源码S型曲线控制代码本
  5. 记 cisco ucs b200 m3 部署esxi 6.7
  6. 通俗科普:黎曼几何为什么是对的?为什么没有平行线?
  7. GoTrace快递查询接口
  8. linux usb gadget驱动详解(五)
  9. 华为发布全栈数据中心、新一代智慧园区两大方案,加速行业数字化与绿色发展双转型
  10. gym102460 2019ICPC台湾L Largest Quadrilateral