【Java笔记】数组

本文详细介绍了Java数组的基本概念。包括数组的语法、内存模型、数据类型,阐述了数组的初始化方式、下标访问规则及可能出现的越界异常。还说明了数组作为引用类型与基本数据类型的区别,以及Java原生对数组的支持方法,最后总结了数组相关的模型、方法传递等要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

一.数组基本概念

1.语法(arrays):定义数组,初始化数组

2.内存模型:遇到的第一个引用类型(重点+难点)

3.数据类型:

1)基本数据类型

2)引用数据类型

(1)数组类型

(2)对象类型

(3)接口类型

4.数组类型,保存一组其他类型的数据,元素类型(Element type)

int [] / double []

变量:数据类型 变量名称;

1)int [] intArray;

2)double [] doubleArray;

注意:和c语言兼容的方式

1)int intArray [];

2)double doubleArray []; //规则允许,但规范不建议使用

5.数组的初始化(数组的长度是固定的)

数组的长度,一旦创建好,不能更改,固定大小

1)静态的方式:用到已知数组所有的元素

int [] array={1,2,3,4,5};

int [] array=new int []{1,2,3,4,5}; //给方法传参数,匿名数组

2)动态的方式

int [] array=new int [数组的长度];

3)不初始化数组 指定一个null字面量

int [] array=null;

6.数组的下标访问,用中括号[] 指定具体的下标

1)下标的类型一定是 int

2)下标的取值范围是,数组的长度是n个,则[0,n-1]

数组下标越界会产⽣"java.lang.ArrayIndexOutOfBoundsException"异常信息

数组作为引⽤数据类型,也⼀定可以发⽣引⽤传递。

 

 

 

 

 

 

 

引⽤传递空间:同⼀块堆内存空间可以被不同的栈内存所指向。

 

 

7.数组本质上也是对象(Object类的派生类)

1)属性 对象.属性

int [] array=……; 对象.方法()

array.length 数组中元素的个数

2)方法

8.数组本质上是引用类型,是对象,和基本数据类型有很大区别

1)int a =100;

左边的空间,究竟存在什么位置

 

(1)内存

java粗略的把内存分成了栈(Stack) 和 堆(Heap)

栈上:局部变量和形参(paramaters)

堆上:对象(数组的对象)

void print (itn a){ a=100; 保存在栈

System.out.println(a); 1.局部变量

}; 2.参数

void main(){

int a=10; print(a); 值传递

}

print中的a是形参(paramaters)

main中的a是参数(arguments)

值传递,改变形参,不会影响到实参,因为值传递本质上是复制了一份

 

9.数组类型(引用类型(reference))

void main (){

int [] array={1,2,3,4,5};

printArray(array);

}

printArray(int [] array){

……

}

void main(){

int [] array={1,2,3,4,5};

method1();

method2();

}

void method1(int [] array){

array=new int [10];

//array变成1……10

} //最后array为{1,2,3,4,5}不变的

void method2(int [] array){

array[2]=200;

} //array变为{1,2,200,4,5}

10.java的数组原生支持java.util.Arrays支持

1)Arrays.toString 打印数组

2)Arrays.copyOf 复制一份数组 System.arraycopy

3)Arrays.copyOfRange

4)Arrays.fill 填充值

5)Arrays.sort/parallelSort

6)Arrays.binarySearch 二分查找

OJ(Online Judge)

11.默认值 0的各个类型的表现

byte/short/int/long 0

float/double   0.0

char    0x0000

boolean false

reference null

变量未初始化时,默认给的值,局部变量无法享受默认值,参数没有默认值

总结:

1.模型

1).引用类型的变量:无论引用变量保存在栈上还是堆上,背后的数据(对象)一定在堆上

2)解析空间不同:基本数据类型和引用数据类型

2.方法传递

1)无论是基本类型还是引用类型,都是简单的值传递(拷贝传递),形参改变不影响实参

2)引用传递时,如果通过形参引用,修改了真实对象(存在堆)的值(array[0]),实参可以感受到变化

3.调用栈的过程

 

框中的主要用处就是保存局部变量和形参

作用域(scope)和生命周期(lifecycle)

int a=100; =左边是空间,=右边是值

 

 

注意点:

System.out.println(String message); 自带换行

System.out.print(String message); 不换行

无论message是是什么类型,java都会想办法变成String

System.out.printf(String format,变长的参数);

System.out.format(String format,变长的参数);

前面指定格式,后边跟参数 %d%f %s

%n是换行,不要直接用\n

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值