第一章数组的定义和访问
1.1容器的概念
就是相当于一个柜子有很多抽屉,每个抽屉只能放一个常量,但是呢一个柜子有很多个抽屉,可以放很多个数据
1.2数组的概念
数组就是一个柜子,定义一个数组,可以保存多个数据,数据类型必须一致,数组一旦创建,长度不可以改变,通过编号来获取/修改
1.3数组的定义格式
①格式一----由我们来指定长度
int num = 10;
int[] nums = new int[5];
格式:
数据类型[] 数组名 = new 数据类型[长度]
[]表示数组
数组名和变量名一样格式 小驼峰
等号俩便的数据类型必须一致
长度:必须大于0 否者编译正常,运行报错
package demo02数组格式一;
public class Demo {
public static void main(String[] args) {
int[] nums = new int[4];
double[] numbers = new double[6];
//char[] chs = new char[-4]; 运行报错
//System.out.println(chs);//0 字符数组作特殊处理
String[] names = new String[103];
}
}
②格式二----内容由我们制定,长度有系统计算
格式:
数据类型[] 数组名=new 数据类型[]{元素1,元素2...}
=右边的[]不能写长度
package demo03数组格式二;
public class Demo {
public static void main(String[] args) {
int[] nums = new int[]{10,20,30,40};//长度就是4
double[] scores = new double[]{99.00,89.00,59.9,99.99};//长度就是4
String[] names = new String[]{"F1","赵四","宋小宝","小沈阳"};//长度就是4
}
}
③格式三--内容我们定,长度系统计算,简化格式
格式:
数据类型[] 数组名={元素1,元素2,...}
package demo04数组格式三;
public class Demo {
public static void main(String[] args) {
int[] nums = {10,20,30,40};//长度就是4
double[] scores = {99.00,89.00,59.9,99.99};//长度就是4
String[] names = {"F1","赵四","宋小宝","小沈阳"};//长度就是4
}
}
1.4数组的使用
获取数据,修改数据
必须有数组名称和索引(专门属于数组内元素的编号)
格式:获取数据
数组名[索引]
索引:从0开始到数组的长度-1
package demo05数组的使用;
public class Demo {
public static void main(String[] args) {
int[] nums = {10,20,30,40,50};
//数组名[索引]
int n = nums[0];
System.out.println(n);
//修改
nums[0] = 100;
System.out.println(nums[0]);
}
}
1.5数组的length
编写通用的访问,数组的最后一个元素
编写通用的代码
①for循环
②数组的属性
格式:
数组名.length
开发中使用ieda会有很多方便的方法
数组名.length.fori生成遍历
数组名.fori 生成遍历
package demo06数组的属性length;
public class Demo {
public static void main(String[] args) {
int[] nums = {10,20,30,40,50,60};
int len = nums.length;
//打印最后一元素
System.out.println(nums[3]);
System.out.println(nums[len-1]);
System.out.println("====");
//遍历数组
/* System.out.println(nums[0]);//10
System.out.println(nums[1]);//20
System.out.println(nums[2]);//30
System.out.println(nums[3]);//40*/
/* for(int i = 0;i<4;i++){
System.out.println(nums[i]);
}*/
/* for(int i = 0;i
第二章数组的内存原理
2.1JVM内存
程序要运行,必须有内存
JVM内存分五块
1.栈Stack
2.堆Heap
3.方法区Method Area
4.寄存器
5.本地方法区
2.2JVM内存练习
package demo07JVM内存;
public class Demo {
public static void main(String[] args) {
int[] nums= {10,20,30,40};
System.out.println(nums);
System.out.println(nums[0]);
System.out.println(nums[1]);
System.out.println(nums[2]);
System.out.println(nums[3]);
}
}
2.3一个数组的内存图解
数组属于数据类型的引用数据类型
引用变量保存的是堆的内存地址
数组的变量保存就是数组的首地址
首地址
[I@71e7a66b
[
I int
@ 在内存中的位置
十六进制 0-9a-f
2.5多个数组的内存图解
package demo08多个数组的内存;
public class Demo {
public static void main(String[] args) {
int[] nums= {10,20,30,40};
int[] numbers = {50,60,70,80};
System.out.println(nums);
System.out.println(numbers);
}
}
2.6俩个数组名指向同一个数组
a.数组变量保存的是数组的地址
b.想同的地址表示同一个数组
package demo09相同的地址;
public class Demo {
public static void main(String[] args) {
int[] nums= {10,20,30,40};
int[] numbers = nums;
nums[0] = 100;
System.out.println(numbers[0]);
}
}
c.一个数组的变量修改数组的内容
d.另外一个数组变量受影响
第三章数组的常见操作
3.1数组使用的注意事项:数组越界异常
访问或者修改数组的元素
数组名[索引]
a.索引超过(长度-1)
b.程序会奔溃
package demo10数组越界;
public class Demo {
public static void main(String[] args) {
int[] nums= {10,20,30,40};//4
// nums[5] = 10; //数组越界
System.out.println(nums[4]);
//ArrayIndexOutOfBoundsException
}
}
3.2数组使用的注意事项:空指针异常
a.数组的变量保存的是内存中的地址
b.有地址才能修改或者访问数组的元素
数组空指针异常
c数组变量保存的地址被清空
数组名[null];
在发开中
a.清空就不要访问或者修改
b.不清空
package demo11绌烘寚閽?
public class Demo {
public static void main(String[] args) {
int[] nums= {10,20,30,40};//4
nums = null;//娓呯┖浜唍ums淇濆瓨鐨勫湴鍧€
System.out.println(nums);//[I@71e7a66b
/* nums[0] = 100;
System.out.println(nums[0]);*/
//NullPointerException
}
}
3.3数组遍历--打印数组中所有的元素
package demo12遍历;
public class Demo {
public static void main(String[] args) {
int[] nums= {10,20,30,40};
//
for (int i = 0; i
3.4数组最值
package demo13最大值;
public class Demo {
public static void main(String[] args) {
int[] yz= {10,2000,30,40,20,30,100};
//擂台
int max = yz[0];
// max 1,2,3,4,5,6..
for (int i = 1; i < yz.length; i++) {
//单挑
if(yz[i]>max){
max =yz[i];
}
}//end
System.out.println(max);
}
}
3.5数组反转
a.找一个对称的位置
b.对称位置的元素进行交换
c.全部交换
package demo14数组反转;
public class Demo {
public static void main(String[] args) {
//1,定义数组
int[] nums = {10,20,30,40,50,60,70,80};
//2,定义两个索引
int min = 0;
int max = nums.length-1;
//3,循环
while(min
第四章方法参数与返回值
4.1基本数据类型作为方法参数与返回值
方法参数:定义方法的()写未知变量或者变量
返回值:方法计算出的结果返回给调用处,保存定义变量接收
必须看返回值类型定义变量接收返回值
a.基本类型可以做方法的参数与返回值类型
b.基本类型能做到的,引用类型也能做到(数组)
package demo15方法参数与返回值;
public class Demo {
public static void main(String[] args) {
sum(100,200);//单独调用
System.out.println(sum(300,400));//打印调用
int r = sum(400,500);//赋值调用
r *= 10;
System.out.println(r);
}
//求两个整数和
// int int
// int
public static int sum(int a,int b){
int sum = a+b;
return sum;
}
}
4.2数组作为方法参数
a.基本类型能做,引用类型也能做
b.多个数据
c.类型必须一致
d.打包原理
package demo16引用类型数组作为方法参数;
public class Demo {
public static void main(String[] args) {
// printNums(10,20,30,40,50);
int[] array = {10,20,30,40,50};
printNumbers(array);
}
//定义方法的,打印五个整数,打包成一个数组
//int[]
//void
public static void printNumbers(int[] array){
for(int i = 0;i
4.3数组作为方法返回值
a.基本类型能做的,引用类型也能
b.return 返回值; 必须和方法的返回值类型一致;
c.return 返回值;下面不能写代码了
d.类型必须一致
package demo17引用类型数组作为方法返回值;
public class Demo {
public static void main(String[] args) {
int[] result = jiSuan(30,20);
for(int i = 0;i
4.4参数为基本类型与引用类型区别
基本类型
调用处将实参复制一份给形参
方法内无法修改形参数
不影响实参
比如copy资料
你删除你的资料
我的资料还在
package demo18基本类型作方法参数;
public class Demo {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a,b);
System.out.println("交换后" + a+" ,"+b);
}
//定义一个方法,交换两个整数变量中的值
//int int
//void
public static void swap(int a,int b){
int temp = a;
a = b;
b = temp;
}
}
引用类型
a.调用处将实参数组的首地址 复制一份给形参数
b.方法内无法修改形参
c.实参会受到影响
package demo18基本类型作方法参数;
public class Demo引用类型作参数 {
public static void main(String[] args) {
int[] nums = {10,20};
System.out.println(nums);
swapTwo(nums);
System.out.println("交换后" + nums[0]+" ,"+nums[1]);
}
//定义一个方法,交换数组中的两个整数
//int[]
//void
public static void swapTwo(int[] nums){
System.out.println(nums);
int temp = nums[0];
nums[0] = nums[1];
nums[1] = temp;
}
}