zoukankan      html  css  js  c++  java
  • 二十五、Java基础之一维数组

    /*
    一、一维数组:特点
    1.数组是一种引用类型
    2.数组是一种简单的数据结构,线性结构
    3.数组是一个容器,可以用来存储其他元素,数组是可以存储数据类型的元素
    4.数组分类:一维数组,二维。。。。多维
    5.数组中存储的元素类型是统一的
    6.数组长度不可改变,数组一旦创建长度不可改变

    二、介绍
    /*
    数组汇总存储元素的类型是统一的。每一个元素在内存中所占的空间大小是相同的,
    知道数组的首元素的内存地址,要查找的元素只要知道下标就可以快速的计算出偏移量
    通过首元素内存地址加上偏移量,快速计算出要查询的内存地址,通过内存地址快速定位元素,
    所以宿主查找元素的效率较高。

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

    三、数组初始化的两种方式
    初始化一维数组两种方式:
    1.静态初始化

    2.动态初始化

    1.静态初始化
    例1:
    public class ArrayTest01 {
    
        public static void main(String[] args){
    
            //申明一个一维数组,用来存储list类型
            int[] a1={100,200,300};//这种方式呗称作初始化一维数组
    
            //boolean类型的数组
            boolean[] b1={true,false,true};
    
            //String类型的数组
            String[] s1={"AA","BB","CC","DD"};
    
            //byte类型的数组
            byte[] b2={1,2,3};
    
            //char数组
            char[] c1={'a','b','c'};
    
            //Object数组
            Object o1=new Object();
            Object o2=new Object();
            Object o3=new Object();
            Object[] objs={o1,o2,o3};
        }
    }

    例2:

    public class ArrayTest02 {
    
        public static void main(String[] args){
    
            //静态初始化一个int类型的一维数组
            int[] a1={10,12,31,44,13};
            //去得第一个元素
            System.out.println("第一个元素是:"+a1[0]);
            System.out.println("最后一个元素是:"+a1[4]);
            System.out.println("最后一个元素是:"+a1[a1.length-1]);
    
            System.out.println("数组中元素的个数是:"+a1.length);
    
            //遍历一维数组
            for(int i=0;i<a1.length;i++){
                System.out.println(a1[i]);
            }
    
            //将第二个元素修改成100
            a1[1]=100;
            System.out.println("----------------------");
            for(int i=0;i<a1.length;i++){
                System.out.println(a1[i]);
            }
    
        }
    }

    2.动态数组初始化

    /*
    动态初始化数组
    1.动态初始化一维数组,会在堆中内存中分配这个数组,并且数组中每个元素都采用
    默认值:
    byte,short,int,long,0
    float,double 0.0
    boolean false
    cahr u0000
    */
    public class ArrayTest03 {
    
        public static void main(String[] args){
            //动态声明一个int类型的数组,最多可以存储4个元素
            int[] a1=new int[4];
    
            //遍历
            for(int i=0;i<a1.length;i++){
                System.out.println(a1[i]);
            }
            a1[0]=100;
            a1[1]=200;
            a1[2]=120;
            a1[3]=102;
    
            //引用类型的数组
            Object[] obj=new Object[3];
            for(int index=0;index<obj.length;index++){
    
                Object o=obj[index];
                //.toString();//注意空指针异常,因为引用类型的数组默认值是null
                System.out.println(o/*o.toString()*/);
                //分析System.out.println(o.toString())与System.out.println(o)
                /*
                public void println(Object x) {
                    String s = String.valueOf(x);
                    synchronized (this) {
                    print(s);
                    newLine();
    
                public static String valueOf(Object obj) {
                    return (obj == null) ? "null" : obj.toString();
        }
            }
        }
                 */
            }
        }
    }
    /*
    四、什么时候使用动态初始化,什么时候使用静态初始化?
    1.无论是动态初始化还是静态初始化,最终的内存分布都是一阿姨那个的
    2.如果在创建的时候,知道数组中应该存储什么数据,这个时候当然采用静态初始化方式,
    3.如果在创建数组的时候们无法预料到数组中存储什么数据,只是先开辟空间,则
    使用动态初始化的方式

    */

    public class Test04 {
    
        public static void main(String[] args){
    
    
            //以下两种方式都是可以的
            int[] a1={1,2,3};
            //C++
            int a2[]={5,6,7};
            int a3[]=new int[4];
    
        }
    }
    五、深入一维数组

    1.Aniaml Dog Cat Test


    public class Test05 {
    
        public static void main(String[] args){
    
            //创建一个数组,既能存储Dog和Cat
            Animal[] a1=new Animal[4];
    
    
            //给每个数组每个元素赋值
            Dog d1=new Dog();
            Dog d2=new Dog();
            Cat c1=new Cat();
            Cat c2=new Cat();
    
            a1[0]=d1;
            a1[1]=d2;
            a1[2]=c1;
            a1[3]=c2;
    
            //需求:遍历数组,去除每个对象,如果是Dog执行eat方法,如果是Cat执行move方法
            for(int i=0;i<a1.length;i++){
                Animal aa1=a1[i];
    
                //强制类型转换,向下转型
                if(aa1 instanceof Cat){
                    Cat c=(Cat)aa1;
                    c.move();
                }else if (aa1 instanceof Dog){
                    Dog d=(Dog)aa1;
                    d.eat();
                }
            }
    
    
        }
    }
    
    class Animal {}
    
    class Dog extends Animal{
    
        public void eat(){
            System.out.println("狗在吃!");
        }
    }
    
    class Cat extends Animal{
    
        public void move(){
            System.out.println("猫在移动");
        }
    }
    /*
    2.方法调用时候,也可以这样传递一个数组

    */
    public class Test06 {
    
        public static void main(String[] args){
            //第一种方式:
            int[] a={12,13,14,15};
            m1(a);
    
         //第二种方式:
            m1(new int[]{111,333,444});
        }
    
        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 Test07 abc ccc fff
    JVM在调用Test07 main方法之前。先“abc ccc fff”这个字符以空格的方式
    分割,然后存储在String数组中

    */

    public class Test07 {
    
        //main方法中的String[] 数组的设计主要是用来接收命令行参数的
        public static void main(String[] args){
    
            /*
            System.out.println("String类型数组中元素的个数"+args.length);
            */
    
            //需求说明:运行该软件的时候必须提供用户名和密码
            //格式:java Test07 username password
            //如果用户没有提供足够的参数,则退出系统
    
            if(args.length!=2){
                System.out.println("想要登录成功系统,许需要按照此格式:java Test07 username password");
            }
            String username=args[0];
            String password=args[1];
    
            //java中比较字符串是否相等,必须使用equals
            //String类型是SUN提供,已经equals重写了,比较的是内容
            if("admin".equals(username) && "123".equals(password)){
            //下面这种方式统一出现空指针,username空的时候,会报空指针
            //if(username.equals("admin") && password.equals("123")){
                System.out.println("登录成功!欢迎["+username+"]回来");
            }else{
                System.out.println("登录失败!");
            }
        }
    }




  • 相关阅读:
    微信网页授权功能来获取用户信息(昵称或头像)之php实现
    你人生的那口井挖好了吗?
    java项目打jar包
    Oracle 客户端配置笔记
    资源管理右键卡住的问题
    Java Web 项目学习(二) 开发注册功能
    Java Web 项目学习(三) 过滤敏感词 前缀树 反射 类加载
    Java Web 项目学习(二) 检查登录状态
    Java Web 项目学习(二)账号设置
    Java Web 项目学习(二) 显示登录信息
  • 原文地址:https://www.cnblogs.com/chushujin/p/10163274.html
Copyright © 2011-2022 走看看