数组array(基础,加args讲解)

https://blog.csdn.net/wenshao007/article/details/103592633
基础的定义方法在上面链接
数组:
1.是一种引用类型,不是基本数据类型
2.数组是一种简单的数据结构,线性的结构。
3.数组是一个容器,可以用来存储其他元素
数组是可以存储任意的数据类型的元素

4.数组分为:一维数组,二维数组,三维数组,多维数组
Object o1 = new Object();
 Object o2 = new Object();
Object o3 = new Object();
Object[] o = {o1,o2,o3};
5.数组种存储的元素类型是统一的

6.数组长度不可改变,数组一旦创建是不可改变的,固定的

在这里插入图片描述

注意:数组中存储元素的类型是统一的,每一个元素在内存中所占的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标就可以快速的计算出偏移量,通过首元素内存地址加上偏移量快速计算出要查找元素的内存地址,通过内存地址快速定位该元素,所以数组查找元素的效率较高

随机的对数组进行增删改查,当增加的元素的时候,为了保证数组中元素在空间存储上有序的,所以被添加元素位置后面的所以元素都要向后移动。删除元素也是,后面所有的元素要向前移动。所以数组的增删该查的效率很低

Object[] objs = new object[3];

for(int index=0;index<objs.length;index++)
{
	Object o = objs[index];
	//o.toString();//注意空指针异常,因为引用类型的数组默认值是null
	System.out.println(o);//null默认分配的是null
}

//分析println函数
public void println(null){
	String s =String.valueof(null);
	synchronized(this){
	print(s);
	newLine();
	}
}

public static String valueof(Object obj){
	return (obj == null)?"null":obj.toString();//这里可以看出来如果print 可以输出null,但是如果调用toString会有空指针异常
	
}

/

深入一维数组
/

public class Test{
	public static void main(String[] args){
		//创建一个数组,这个数组既可以存储Dog,也能村粗Cat
		Animal[] an = new Animal[4];
		
		Dog d1 = new Dog();
		Dog d2 = new Dog();
		Cat c1 = new Cat();
		Cat c2 = new Cat();

		an[0] = d1;
		an[1] = d2;
		an[2] = c1;
		an[3] = c2;

		//需求:遍历数组,取出每个对象,如果是Dog执行eat方法,如果是Cat执行move方法
		//这里也涉及到了多态,有向下转型,向下转型之前需判断,向下转型需要强制类型转换
		for(int i=0;i<an.length-1;i++)
		{
			if (an[i] instanceof Dog){
				Dog d = (Dog) an[i];
				d.eat();
			}else
			{
				Cat c =(Cat) an[i];
				c.move();
			}
		}	
	}
}

class Animal{
}

class Dogs extends Animal{
	public void eat(){
		System.out.println("Dog eat");
	}
}

class Cat extends Animal{
	public void move(){
		System.out.println("Cat move");
	}
}

方法调用的时候,也可以这样传递一个数组,方法的入口,形参位数组

public class Test{
	public static void main(String[] args)
	{
		int[] a = {0,2,64,5};
		//第一种方式
		m1(a);

		//第二种方式
		m1(new int[]{1,3,4,5});
	}
	public static void m1(int[] a)
	for(int i=0;i<a.length;i++)
	{
		System.out.println(a[i]);
	}

}

关于main方法中的参赛列表 String[] args

1.String[] args是专门用来接受命令行参数的。在命令控制台可以自己输入数据
2.例如:java Test abc def aaa
JVM在调用Test类的main方法之前,先以“abc def aaa”这个字符串以“空格”的方法分割,然后存储在String数组中。

public class Test{
	//	main方法中的String[]数组的设计主要是用来接收命令行参数的
	public static void main(String[] args){
		System.out.println("String类型的数组中元素的个数是:"+args.length)
		//执行结果String类型的数组 args 中元素的个数是:0
	}

	//遍历
	for(int i=0;i<args.length;i++){
		System.out.pintln(args[i]);
	}

	//需求说明:运行该软件的时候必须提供用户和密码
	//格式:java Test username(自己在控制台输入的) password(自己在控制台输入)  这行代码都是在控制台上输入的
	//如果用户没有提供足够的参数,则退出系统
	if(args.length !=2)
	{
		System.out.println("想要使用该系统,必须按照该各式输入:java Test username(自己在控制台输入的) password(自己在控制台输入)")
		return ;
	}
	String username = args[0];
	String password = args[1];
	
	//if(username.equals("admin")&&password.equals("123"))   不推荐这样写,不能避免空指针异常,因为username是有可能为空的
	if("admin".equals(username)&&"123".equals(password))
	{
		System.out.println("登陆成功,欢迎"+username+"回来");
	}else
	{
		System.out.println("登陆失败,用户"+name+"不存在或密码错误")
	}
      
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值