形参 实参
形参 就是方法签名上的参数 实参就是方法内的参数
值传递 引用传递
值传递 就是 对形参的修改不会影响到实参
引用传递 与上面相反
都从内存模型上面来思考这个事情
equals ==
在对象比较时,重写equals不仅比较对象地址相等,还比较对象内容相等,重写hashcode确保相同对象的索引值相等(也就是键在哈希表中存放的位置)。如果两个相同的对象,只重写hashcode,哈希值也就是key在同一个位置了,但是这里把两个对象都存储了。只重写equals,确实存储会变成一个对象,但是hashcode计算出的索引就有可能是两个,导致一个对象在两个位置存储了。
super this 的不同
可变参数
异常
Throwable 类是所有异常和错误的超类,下面有 Error 和 Exception 两个子类分别表示错误和异常。其中异常类 Exception 又分为运行时异常和非运行时异常,这两种异常有很大的区别,也称为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。
Exception 类用于用户程序可能出现的异常情况,它也是用来创建自定义异常类型类的类。
Error 定义了在通常环境下不希望被程序捕获的异常。Error 类型的异常用于 Java 运行时由系统显示与运行时系统本身有关的错误。堆栈溢出是这种错误的一例。
运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。
## 标题非运行时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常,一般情况下不自定义检查异常。表 1 列出了一些常见的异常类型及它们的作用。
主动制造异常?
throw throws区别
String 为什么是不可以变的
总结:字符串不可变的优点:1. 保证常量池复用的可靠 2. 哈希码只需要计算一次 3. 不可变的是线程安全的
参考
failfast
保证迭代器的隔离性 和xxx