JAVA零碎知识点

Posted chxwkx

tags:

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

总结的JAVA零碎知识点

学习和工作中总会有一些零碎的知识点,可能不经常用到或者以前不熟知,在此记录一下。

一、有关Lamda表达式

Lamda表达式是1.8新增特性,所以使用前请确定项目JDK版本是否支持。

Lamda主要解决匿名内部类和函数的啰嗦语句问题,比如曾经的Jframe的Jbutton监听事件addActionListener

        JButton jb = new JButton("click");
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("1");
            }
        });

可以简化为jb.addActionListener(a -> System.out.println("1"));

1.Lamda语法:

(参数) ->单行语句;

例子:jb.addActionListener((a)-> System.out.println("1"));
(参数) ->{多行语句};注意多个语句的分号。

jb.addActionListener((a) -> {
            System.out.println("2");
            System.out.println("1");
        });

(参数) ->表达式;比如某接口返回int型

test((a)-> 5*9);

2.用法,当传入参数是接口,且需要自己实现时,可以用Lamda简化代码。

3.本人并不建议过多使用Lamda,因为会给阅读代码带来很大困扰。

二、volatile关键字

首先说一下volatile有什么功能:它保证的是有序性和可见性!!!注意没有原子性!!!!只修饰变量,是轻量级实现。这也是和synchronized主要区别。

也就是说,用volatile修饰的变量,每次读取时都会获取修改后(最新)的值进行操作(即可见性)。

比如我们用某个变量控制线程结束,如果不加volatile,在外部改变该变量时,run总是获取旧值。

public class VolatileKey extends Thread {
    volatile boolean flag = false;

    public void run() {
        while (!flag) {
            System.out.println("run");
        }

        System.out.println("stop");
    }

    public static void main(String[] args) throws Exception {
        VolatileKey vt = new VolatileKey();
        vt.start();
        Thread.sleep(2000);
        vt.flag = true;
    }
}

去掉volatile关键字后,线程不会主动停止。

造成这种问题的原因主要是JVM对内存分配的优化,不加volatile时,线程会保存副本,而不是每次都从主内存获取。而volatile限制线程不进行内部缓存和重排,既而解决掉可见性问题。

三、JAVA语法糖

语法糖主要目的,为了方便开发和减少开发时、编译期、运行前以及语法错误。
语法糖就是通过二次封装,提供更加简单的操作,比如变长变量,不用程序员定义一个超长参数列表,或者为了不同个数参数定义多个方法。
但是运行时jvm并不认识这些,这些都在编译期进行了解语法糖,并且转成了jvm认识的东西。
比如说变长变量,用的数组,外层封装好之后,编译期通过增强for循环(话说回来,增强型for循环也是语法糖,内部是while遍历迭代器iterator)进行参数置入。

 

以上是关于JAVA零碎知识点的主要内容,如果未能解决你的问题,请参考以下文章

JAVA零碎知识点

java 零碎知识点

零碎的java知识点记录

j2se学习中的一些零碎知识点9

Java基础零碎知识点总结(持续补充)

Java数据类型的零碎知识