个人对JavaGuide上某些知识点做一个小结

JavaGuide是github上的一个五万星的项目,该项目包含java的大部分知识点和面试题

链接:https://github.com/Snailclimb/JavaGuide

1.finally块不会执行的四种情况
    (1)finally语句的第一行发生异常(个人感觉其实第一行是执行了的,只是执行时发生了异常)
    (2)在前面的代码中用了System.exit(int)已退出程序
    (3)程序所在的线程死亡
    (4)CPU关闭
    
2.Java序列化中如果有些字段不想进行序列化,怎么办?
    对于不想进行序列化的变量,使用transient关键字修饰。transient只能修饰变量,不能修饰类和方法
    
3.static关键字主要有以下四种使用场景:
    (1)修饰成员变量和成员方法
    (2)静态代码块
    (3)静态内部类 (static修饰类的话只能修饰内部类)
    (4)静态导包 (用来导入类中的静态资源,1.5之后的新特性)
    
4.静态代码块
    (1)静态代码块在非静态代码块之前执行(静态代码块—非静态代码块—构造方法)
    (2)静态代码块只会被初始化一次(非静态代码块在每new一次就执行一次),通过 [类名].class 获取类对象时不会执行静态代码块
    (3)静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问
    
5.单例模式(参考csdn博客)
    (1)饿汉式实现
    (2)懒汉式实现 (线程不安全)
    (3)懒汉式实现 (给过去实例的方法加锁,影响性能)
    (4)双重锁实现,给静态变量加上valatile关键字,同时给方法加锁
    (5)静态内部类实现

6.浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。

7.基本数据类型和包装数据类型(阿里开发手册:防止NPE问题)
    (1)【强制】所有的 POJO 类属性必须使用包装数据类型。(当数据库查询的结果为空时,使用基本数据类型自动拆箱会导致NPE)
    (2)【强制】RPC 方法的返回值和参数必须使用包装数据类型。(远程调用结果异常用null表示,0可以被赋予其他含义)
    (3)【推荐】所有的局部变量使用基本数据类型。

8.使用Arrays.asList()是需要注意的两点(JavaGuide中的解释)
    (1)传递的数组必须是对象数组,而不是基本类型。(传入基本类型数组会将改数组看做成一个总的对象,达不到转成list类型的目的)
    (2)使用集合的修改方法:add()、remove()、clear()会抛出unsupportedOperationException异常。

你可能感兴趣的:(学习心得)