zoukankan      html  css  js  c++  java
  • Java基础复习(2)

    写在前面

    上一篇博客学习了数组和对象的使用以及内存中的基本占用。这次就来学习一下java中常见的一些API。

    ArrayList

    在上一节我们已经学过,数组的长度是不可改变的,这在开发中会有很多的不方便。而ArrayList就提供了一个可变长度的集合。下面来看基本的使用:

        /**
         * 数组的长度不可以改变
         * 但ArrayList的集合的长度是可以改变的
         * 对于ArrayList来说,有一个尖括号<E>表示泛型
         * Tips:泛型只能是引用类型,不能是基本类型
         * 对于ArrayList来说,直接打印不是地址值,而是内容。
         * @param args
         */
        public static void main(String[] args) {
            // 创建了一个装着String种类的名字为list的集合
            // 从jdk1.7+开始右侧的尖括号内部可以不写内容
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list);
            // 向集合添加数据
            list.add("啊这");
            list.add("这啊");
            System.out.println(list);
        }
    

    可以看到,基础使用十分简单,只要定义好一个ArrayList后就可以很方便的使用了。

    下面来看里面的几个常用方法:

      /**
         * ArrayList中的常用方法
         * 1. boolean add(E e) 向集合中添加元素,参数的类型和泛型一致。
         * Tips:对于ArrayList来说,add添加动作一定成功,所以返回值可以不需要写。其他集合不一定。
         * 2. E get(int index) 从集合当中获取元素,参数是索引编号,返回值是对应位置的元素
         * 3. E remove(int index) 从集合中删除元素
         * 4. int size() 获取集合的长度
         */
        public static void method(){
            ArrayList<String> list = new ArrayList<>();
            // 向集合中添加数据
            boolean success = list.add("刘某");
            list.add("王某");
            System.out.println(list);
            System.out.println("添加的动作是否成功 : " + success);
            // 获取元素
            String s = list.get(0);
            System.out.println("第一号索引位置 : " + s);
            // 删除元素
            String whoRemoved = list.remove(1);
            System.out.println("whoRemoved = " + whoRemoved);
            // 获取长度
            int size = list.size();
            System.out.println(size);
            // 遍历集合
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    

    可以看到,使用ArrayList会带来极大的方便。那么我们刚才提到,不能使用ArrayList来存储基本类型,那是真的不能吗?其实不是的,java中提供了包装类,可以通过包装类来存储基本类型的ArrayList:

        /**
         * 存储基本类型的ArrayList
         * 可以使用包装类
         * 除了int和char的对应包装类,其他都是首字母大写
         * int Integer
         * char Character
         * 从JDK 1.5+开始支持自动装箱 自动开箱
         * 自动装箱:基本类型 -> 包装类型
         * 自动开箱: 包装类型 -> 基本类型
         */
        public static void basicArray(){
            ArrayList<Integer> list = new ArrayList<>();
            list.add(100);
            list.get(0);
        }
    

    static关键字

    static关键字其实很简单,有点类似C语言中的static,使用了这个关键字后,会将内容存到一块特殊区域共享,比如在类中定义了一个static修饰的成员变量:

    static String room;
    

    那么这个room变量就被这个类的所有对象共用了。如果作用到成员方法上,就可以使用类名.方法名来方便的使用这个方法。

    Lambda表达式

    Lambda表达式是JDK1.8中新增的一个特性,称之为函数式编程。那么为什么我们需要使用Lambda表达式呢?首先来看一个例子:

     new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + "新的线程创建了");
                }
            }).start();
    

    这里我们用匿名内部类实现了Runnable接口,新建了一个Thread对象。但这里面的new Runnable,方法名称等等都不是我们关注的内容,我们所关注的只有方法体中的内容。而使用Lambda表达式就可以让我们做到只关注内容:

            // 使用Lambda表达式
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "新的线程创建了");
            }).start();
    

    Lambda表达式的标准格式

        /**
         * Lambda表达式的标准格式:
         * 由三部分组成:
         *      a.一些参数
         *      b.一个箭头
         *      c.一段代码
         *    格式:
         *    (参数列表) -> {一些重写方法的代码}
         *    解释:():接口中抽象方法的参数列表,没有参数就空着,多个参数用逗号分隔
         *    ->:传递的意思,把参数传递给方法体{}
         *    {}:重写接口的抽象方法体
         * @param args
         */
    

    Lambda表达式主要由三部分组成,参数,箭头和代码段。看起来是十分的简单,我们写几个例子看看:

           // 使用Lambda表达式
            invokeCook(() -> {
                System.out.println("恰饭啦");
            });
    

    这里的invokeCook方法是调用了Cook接口中的makeFood方法,该方法无参无返回值,所以这么写就可以了。

            // 使用Lambda表达式简化匿名内部类
            Arrays.sort(arr,(Person o1,Person o2) -> {
                return o1.getAge() - o2.getAge();
            });
    

    这次我们使用Arrays工具类中的sort方法,第二个参数需要填入比较的方法,我们可以直接使用Lambda表达式书写,只需要关注内部逻辑即可。

    Lambda表达式的省略格式

        /**
         * 可以省略的内容:
         *  1.(参数列表):括号中参数列表的数据类型可以省略不写
         *  2.(参数列表): 括号中参数只有一个,类型和()都可以省略
         *  3.{代码块} 如果{}中的代码只有一行,无论是否有返回值都可以省略({},return,;)
         *          Tips:要省略{},return,分号必须一起省略
         */
    

    可以看到,我们可以省略一些内容。接下来写一个例子试试:

            // 优化省略Lambda
            new Thread(() -> System.out.println(Thread.currentThread().getName() + "新的线程创建了"));
    

    这是最开始的引子,我们可以写成这样的简化格式。

    使用Lambda的前提

    需要注意的是,使用Lambda表达式是有前提的:

    • 1.使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
    • 2.使用Lambda表达式必须具有上下文推断,即方法的参数或局部变量必须为Lambda对应的接口类型,才可以使用Lambda作为该接口的实例。

    总结

    今天学习的内容不多,主要补充学习了ArrayList和static关键字以及JDK8的新特性Lambda表达式。实际上,提到了集合就不得不学习一下Collection集合以及java中各种集合的接口定义等,但那些都已经学习过了,这里就不再赘述了。接下来会学习一下JDK8的一些新特性。

  • 相关阅读:
    随想13:论“善”字
    Nginx做前端Proxy时TIME_WAIT过多的问题
    HTTP的长连接和短连接
    nginx长连接的问题
    Tomcat性能参数设置
    Nginx1.1.4+ 对后端机器的长连接特性
    HTTP长连接200万尝试及调优方法
    NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64
    CRtmpServer转推流到Nginx Rtmp及SRS(SimpleRtmpServer)的经历
    rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/13358177.html
Copyright © 2011-2022 走看看