首页 > 其他 > 详细

每日知识点20191127

时间:2020-12-21 21:08:26      阅读:29      评论:0      收藏:0      [点我收藏+]

java

  • wait、notify、notifyAll方法只能在同步控制方法或同步控制块(synchronized)中使用,否则即使能通过编译,但在运行时会抛出IllegalMonitorStateException异常,因为这些方法在调用时会操作锁。sleep可以在非同步控制方法中调用,因为它没有操作锁

  • try-finally中包含return的情况:


    public static void main(String[] args) {
        int r = f();
        System.out.println("return:" + r);
    }

    public static int f() {
        int i = 0;
        try {
            return ++i;
        } finally {
            System.out.println("finally:"  + i);
        }
    }

    /**
     * finally:1
     * return:1
     */

    public static void main(String[] args) {
        int r = f();
        System.out.println("return:" + r);
    }

    public static int f() {
        int i = 0;
        try {
            return ++i;
        } finally {
            System.out.println("finally:"  + ( ++i ));
        }
    }

    /**
     * finally:2
     * return:1
     */

    /**
     * 从以上的结果我们可以得出结论:
     * 1. 针对return statement;语句来说,statement比finally先执行,执行完毕后先将返回值保存到局部变量中,也就是说finally中的执行语句不会影响到返回值,除了引用变量外
     * 2. 接着执行finally中的语句,最后返回之前保存的局部变量的值
     */

     public static void main(String[] args) {
         int r = f();
         System.out.println("return:" + r);
     }

     public static int f() {
         int i = 0;
         try {
             return i;
         } finally {
             return ++i;
         }
     }
     /**
      * return:1
      * 如果try、finally语句中均有return,忽略try的return,使用finally的return
      */

  • 构造函数的执行顺序:父类静态成员属性默认初始化值 -> 父类静态成员属性显示初始化值 -> 父类的静态代码块 -> 子类静态成员属性默认初始化值 -> 子类静态成员显示初始化值 -> 子类的静态代码块 -> 父类成员属性默认初始化值 -> 父类成员属性显示初始化值 -> 父类的构造代码块 -> 父类构造函数 -> 子类成员属性默认初始化值 -> 子类成员属性显示初始化值 -> 子类的构造代码块 -> 子类构造函数

  • finally不会被执行的情况


    // 方式1:使用Sytem.exit直接退出程序
    public static void main(String[] args) {
        try {
            System.out.println("Hello World");
            System.exit(0);
        } finally {
            System.out.println("1");
        }
    }

    /**
     * Hello World
     */

    
    // 方式2:try语句块未被执行到,那么finally自然也就不会被执行到
    public static void main(String[] args) {
        System.out.println(f(true));
    }

    public static int f (boolean flag) {
        if (flag) {
            return 1;
        }
        try {
            System.out.println("hello");
        }finally {
            System.out.println("world");
        }
        return 0;
    }

    /**
     * 1
     */


     // 方式3:finally所在的守护线程被中止,不好举例...

     // 方式4:关闭CPU

  • dependencyManagement与dependencies区别:dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承).

  • 通常使用的Spring全家桶属于Java EE范畴.

  • HotSpot为什么要分为新生代和老年代?因为有的对象寿命长,有的对象寿命短。应该将寿命长的对象放在一个区,寿命短的对象放在一个区,不同的区采用不同的垃圾收集算法,寿命短的区清理频次高一点,寿命长的区清理频次低一点,提高效率.

每日知识点20191127

原文:https://www.cnblogs.com/zlia/p/14165598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!