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+"不存在或密码错误")
}
}