一些Java相关的小问题

时间:2022-10-17 17:38:31

18.12.15

Java一个类不能实现两个相同的接口,编译时会报 error:接口重复


 

19.6.4

构造器调用顺序:

  1.调用父类构造器,从最高层的继承开始往下递归

  2.按声明顺序调用成员类

的初始化方法

  3.调用当前类构造器主体

 

初始化的实际过程:

  1.在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零

  2.构造器的调用顺序


 19.6.5

 Set——

  HashSet:不按照任何顺序存储,但是获取元素速度最快 —— 使用散列

  TreeSet:比较结果的升序排序 —— 使用红黑树

  LinkedHashSet:被添加顺序排序 —— 使用散列,但额外使用了链表维护元素插入顺序

 

Map——每个键只能存储一次

  HashMap:提供最快的查找技术,无序

  TreeMap:升序保存键

  LinkedHashMap:按插入顺序保存键,同时保留了HashMap的查询速度

 


 

19.6.6

lambda表达式:允许把函数作为一个方法的参数传入,免去了使用匿名方法的麻烦(亮点)

  基本语法:

(parameters) -> expression        //一个参数不需要圆括号,一个语句不需要大括号;参数可声明类型也可不声明
//
(parameters) ->{ statements; }    //无大括号自动判定是否返回值,返回什么值;有大括号时需要使用return

  例:

// 不用括号
GreetingService greetService1 = message ->
System.out.println("Hello " + message);
        
// 用括号
GreetingService greetService2 = (message) ->
System.out.println("Hello " + message);

greetService1.sayMessage("Runoob");
greetService2.sayMessage("Google");nterface GreetingService {
  void sayMessage(String message);
}

  注:

 

 

    ①、lambda表达式不可声明与局部变量同名的参数

    ②、lambda表达式可以直接引用外部局部变量,前提是该变量不会在lambda表达式调用之后被修改(所以可选择用final修饰)