Java基础复习

Posted 武神酱丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础复习相关的知识,希望对你有一定的参考价值。

写在前面

上一篇博客学习了数组和对象的使用以及内存中的基本占用。这次就来学习一下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的一些新特性。

以上是关于Java基础复习的主要内容,如果未能解决你的问题,请参考以下文章

Java基础复习-流程结构篇

Java__反射基础复习

Java__反射基础复习

JAVA基础部分复习(JAVA反射)

Java基础复习

java基础复习