前言:
前两天出去玩没带电脑,一直没写,回来发现重新下载一个Eclipse以后,Java版本居然从1.8变成15.0了,虽然可能是我神奇操作的原因,不过还是很有趣。
解决方案:重写一下环境变量的JAVAHOME就可以了,把它改成jdk存放的路径即可。
目录
1.数组
1.1数组(Array)应用简介
例如一个点菜app,每道菜品会有其图片,名字,价格,点赞等信息,我们把所有的图片(云端地址),名字(String),价格(double),点赞(int)等信息统一放在一个数组(Array)中,每一道菜品的总体信息就可以在这几个数组中根据对应的下标获取即可。
1.2数组的概念及组成
概念:数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按有序的形式组织起来的一个形式。这一些有序排列的同类数据元素的集合称之为数组。
组成:数组名,数组下标(索引),元素,数组长度
1.3数组的特点
①数组是有序排列的
②数组属于引用数据类型
③数组里的元素类型可以是基本数据类型,也可以是引用数据类型(String)
④数组在内存中是一串连续的空间
⑤数组的长度一旦确定,就不可以再修改
1.4数组的分类
①按照维度:一维数组,二维数组,多维数组
②按照元素类型:基本数据类型元素的数组,引用数据类型元素的数组
1.5Eclipse中的数组练习
1.5.1一维数组的使用
①一维数组的声明和初始化
②如何调用数组的指定位置的元素
③如何获取数组的长度
④如何遍历数组
package Array;
/**
*
* @Description 这是数组学习的测试
* @author Dionysus_xu Email:2405483019@qq.com
* @version
* @Date 2022年1月17日下午4:09:59
*
*/
/*
* 1.5.1一维数组的使用
①一维数组的声明和初始化
②如何调用数组的指定位置的元素
③如何获取数组的长度
④如何遍历数组
⑤数组元素的默认初始化值
⑥数组的内存解析
*/
public class OneArrayTest {
public static void main(String[] args) {
//一维数组的声明和初始化
//1.1静态初始化:数组的初始化和数组元素的赋值一起实现
int[] ids=new int[]{1001,1002,1003};
//1.2动态初始化:数组的初始化和数组元素的赋值分开实现
String[] names=new String[4];
//数组一旦初始化完成,长度就已经确定了
//如何调用数组的指定位置的元素:通过角标方式
//数组的角标是从0开始的,到数组长度-1结束
//数据库从1开始
names[0] = "小许";
names[1] = "小邓";
names[2] = "小王";
names[3] = "小林";//charAt(0)
//如何获取数组的长度:借助length属性
System.out.println(names.length);//length=4
System.out.println(ids.length);
//如何遍历数组元素
System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
System.out.println(names[3]);
//或者
for(int i=0;i<=names.length-1;i++) {
System.out.println(names[i]);
}
}
}
⑤数组元素的默认初始化值
package Array;
public class OneArrayTest1 {
//不同类型的数组元素的默认初始化值
public static void main(String[] args) {
//整形元素数组(byte,short,int,long)初始值为0
int[] arri=new int[4];
for(int i=0;i<arri.length;i++) {
System.out.println(arri[i]);
//输出结果为0,0,0,0
}
//浮点型元素数组(float,double)初始值为0.0
float[] arrf=new float[4];
for(int i=0;i<arrf.length;i++) {
System.out.println(arrf[i]);
//输出结果为0.0,0.0,0.0,0.0
}
//字符型元素数组(char)初始值为
char[] arrc = new char[4];
for(int i=0;i<arrc.length;i++) {
System.out.println("*"+arrc[i]+"*");
//输出结果为ASC-II码对应的0,虽然看不出来
}
if(arrc[0]==0)
System.out.println("hello");
//结果会输出hello
//boolean类型,初始值为false
boolean[] arrb = new boolean[4];
for(int i=0;i<arrb.length;i++) {
System.out.println(arrb[i]);
//输出结果为4个false
}
//引用数据类型数组,初始值
String[] arrs = new String[5];
for(int i=0;i<arrs.length;i++) {
System.out.println(arrs[i]);
//输出结果为4个null,即空值,不是"null"
}
if(arrs[1] == null)
System.out.println("hello,lpq");
}
}
⑥数组的内存解析
遵循JVM规范:Java虚拟机规范----JVM体系结构 - Java初级码农 - 博客园
简图大概是这个样子吧
栈中存放的是局部变量
堆中存放的有我们new出来的结构(对象,数组)//程序员就是这么任性,对象随便new
String就放在常量池中
Static存放在静态域中
接下来是一维数组的内存调动方法:
①int[] arr = new int[]{1,2,3}
int[] 类型的arr存放在栈中,new的int[]放在堆中,通过堆中的int[]的首地址值和arr相连,初始值0,0,0,后被赋值为1,2,3
②String[] arr1 = new String[4];
String[] 类型的arr1被存放在栈中,new的String[4]放在堆中,通过堆中的int[]的首地址值和arr1相连,初始值null,null,null,null
③正常给动态数组赋值arr[0] = "xu";
通过arr1给的首地址在堆中找到对应的数组,根据角标找到对应的数组元素,更改元素值
④arr1=new String[3];
重新在堆中给arr1指定一个数组空间String[3],原来指向的就废弃了,指向新的首地址
1.5.4一维数组课后练习
升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调、卫生间、厨房齐全。屋内均是IT行业人士,喜欢安静。所以要求来租者最好是同行或者刚毕业的年轻人,爱干净、安静。联系方式:
public class Array Test {
public static void main(Stringargs) {
int[] arr = new int[]{8,2,1,0,3};
int[] index = new int{2,0,3,2,4,0,1,3,2,3,3};
string tel = "";
for(int i = 0;i < index.length;i++){
tel += arr[index[i]];
}
system.out.println("联系方式:" + tel);}
}
其实就是把index[]中的数作为arr[]数组的角标,取出对应的值
结果就是:1,8,0,1,3,8,2,0,1,0,0