数组:
1,Java语言中的数组是一种引用类型,不属于基本数据类型,数组的父类是Object。
2,数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合。)
数组:字面意思是“一组数据”;
3,数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据。
4,数组因为是引用类型,所以数组对象是堆内存当中。
5,数组当中如果存储的是“java对象”的话,实际上存储的是对象的“引用(内存地址)”
6,数组一旦创建,在Java中规定,长度不可变。
7,数组分类:一维数组,二维数组。。。
8,所有数组对象都有Lenth属性,用来获取数组中的元素个数。
9,java中数组要求元素类型统一。比如int类型数组只能存储int类型。
10,数组在内存中存储的元素内存地址是连续的。
11,所有的数组都是利用栈中的内存地址作为整个数组对象的内存地址。
(栈中的内存地址是每个数组对象的地址)
12,数组中每一个元素都是有下标的,下标从0开始,以1递增。
13,数组这种数据结构的优点和缺点是什么?
优点:可以通过下标和存储类型计算出具体元素位置,检索效率高。
缺点:数组在随机删,增元素操作时效率低,因为需要移动大量元素,并且数组无法存储大数据量,无法存储不同类型元素数据。
14,怎么声明/定义一个一维数组?
语法格式:
int[ ] array1;
double[ ] array2;
boolean[ ] array3;
String[ ] array4;
Object[ ] array5;
15,怎样初始化一个一维数组呢?
包括两种方式:静态初始化一维数组,动态初始化一维数组。
静态初始化语法格式:
int[ ] array = (100, 2100, 300, 55);
动态初始化语法格式:
int[ ] array = new int[5];//表示5个元素类型为int元素个数,默认值为0
String[ ] name = new String[6];//表示6个元素类型为String元素个数,默认值为null
public class Arraytest01 {
public static void main(String[] args){
//静态初始化
int[] a = {
1, 100, 10, 20, 55, 689};
String[] a = {
"sds", "sss"};
//动态初始化
Object[] o = new Object[3];
//存储Object,采用静态初始化
Object o1 = new Object();
Object o2 = new Object();
Object o3 = new Object();
Object[] objects = {
o1, o2, o3};
//与以下等同
Object[] objects = {
new Object(), new Object(), new Object()};
}
}
16,通过方法使用数组
public class ShuZhu {
public static void main(String[] args){
int[] a = {
1,23,4,5};
PrintArray(a);
String[] m = {
"213", "22", "33", "44"};
PrintArray(m);
PrintArray(new int[4]);
String[] d = new String[4];
PrintArray(d);
}
public static void PrintArray(int[] array){
for(int i=0; i<array.length; i++){
System.out.println(array[i]);
}
}
public static void PrintArray(String[] array){
for(int i=0; i<array.length; i++){
System.out.println(array[i]);
}
}
}
17,main方法上面的“String[ ] args” 有什么用?
分析以下:谁负责调用main方法(JVM)
JVM调用main方法的时候,会自动传一个String数组过来。
public class Shuzhu {
public static void main(String[] args){
//JVM默认传递过来的这个数组对象的长度?默认为0.
System.out.println("JVM给传递过来的String数组参数,它这个数组的长度是?"+args.length);
//这个数组什么时候有值呢?
//其实这个数组是留给用户的,用户可以在控制台上输入参数,这个参数自动被转换为“String[] args”
//例如这样运行程序 :java ShuZhu abc def xyz
//那么这个时候JVM会自动将“abc def xys”通过空格的方式进行分离,分离完成之后,自动放到“String[] args”
//所以main方法上面的String[] args 数组主要是用来接收用户输入参数的。
//把abc def xyz 转换成字符串数组:{“abc”,“def”,“xyz”};
for(int i=0; i<args.length; i++){
System.out.println(args[i]);
}
}
}
模拟一个系统,假设这个系统要使用,必须输入用户名和密码。
public class ShuZhu {
//用户名和密码输入String[] args数组当中.
public static void main(String[] args){
if(args.length!=2){
System.out.println("使用该系统时请输入程序参数,参数中包括用户名和密码信息,例如:zhang 123");
return;
}
//程序执行到此处说明用户确实提供了用户名和密码。
//接下来你应该判断用户名和密码是否正确。
//取出用户名
String username = args[0];
//取出密码
String password = args[1];
//假设用户名是admin ,密码是123的时候表示登录成功。其他一律失败。
//判断两个字符串是否相等,需要使用equals方法。
if("admin".equals(username)&&"123".equals(password) ){
System.out.println("登录成功,欢迎["+username+"]回来");
System.out.println("使用该系统...");
}else{
System.out.println("验证失败,用户名不存在或者密码错误 !");
}
}
}
使用idea,点击中run下的edit configurations选项,在program arguments中输入需要传入agrs数组中的数据(用户名和密码),显示以下结果。
18,数组中存储引用类型数据
在不同类中,应该注意Animal[ ] 与 Animal 类型的区别。
public class ShuZhu {
public static void main(String[] args){
Animal a1 = new Animal();
Animal a2 = new Animal();
Animal[] a = {
a1, a2};
for(int i=0; i<a.length ; i++){
Animal m = a[i];
m.move();
}
}
}
class Animal
{
public void move(){
System.out.println("Animal move...");
}
}
调用对象特有方法的话,需要向下转型!!!
public class ShuZhu {
public static void main(String[] args){
Animal a1 = new Cat();
Animal a2 = new Bird();
Animal[] a = {
a1, a2};
for(int i=0; i<a.length ; i++){
if(a[i] instanceof Cat){
Cat m = (Cat)a[i];
m.catCatchMouse() ;
}else if(a[i] instanceof Bird){
Bird m = (Bird)a[i];
m.birdFlying() ;
}else{
System.out.println("error");
}
}
}
}
class Animal
{
public void move(){
System.out.println("Animal move...");
}
}
class Cat extends Animal{
public void move(){
System.out.println("cat moving...");
}
//特有属性 猫捉老鼠
public void catCatchMouse(){
System.out.println("猫捉老鼠");
}
}
class Bird extends Animal{
public void move(){
System.out.println("bird moving...");
}
//特有属性 鸟在飞
public void birdFlying(){
System.out.println("鸟在飞");
}
}
19,数组的扩容
数组满了,需要扩容,java先创建一个大容量的数组,然后一个一个将原来的数组元素拷贝入大数组中。
public class ShuZhu {
public static void main(String[] args){
//拷贝源
int[] src = {
1, 2, 3};
//拷贝目标
int[] dest = new int[6];
//从src数组第1号元素拷贝到dest数组中3号位置,长度为2
System.arraycopy(src, 1, dest, 3, 2);
for(int i=0; i<dest.length; i++){
System.out.println(dest[i]);
}
//以下为全拷贝方式
System.arraycopy(src, 0, dest, 0, src.length);
}
}