一. 面向对象都有什么特征
- 封装
扩展问题1 private protected 默认的 public 修饰的时候 作用域
private 类内部可以访问(类内部可以访问任意这个类对象的私有域)
protected 和默认的 包内部可以访问 protected子类也可以访问
public 可以被任意类使用
- 继承
类的继承
接口的继承
final 关键字修饰类 修饰方法
- 多态
- 子类重写父类的方法 当父类作为引用 引用子类的对象的时候 调用这个重写的方法就会执行子类的方法
- 方法的执行过程
- 方法签名是根据 方法名和参数类型决定的 返回值不算
- 编译器根据方法名 参数来找到符合的方法
- private static final 三个关键词任意一个修饰方法的 编译器可以确定该执行哪个方法 (静态绑定)
- 程序运行时 动态绑定的方式 根据自己和父类的方法表 来找到实际类型的方法执行
二. 抽象类和接口的区别
https://www.cnblogs.com/dolphin0520/p/3811437.html
三. Object的方法
线程同步相关的 wait notify notifyAll
问题 notify和notifyAll的区别
notify等待队列中的一个 notifyAll 全部唤醒 都有了锁的争夺权
gc 或者声明周期相关的 finalize
对象比较 equals hashcode问题重写equals的时候 为什么重写hashcode (或者两个对象的equals 是true 那么他们的hashcode相同吗 )(hashcode相同 equals是true吗)
- hash算法 可以看下边的这个文章 hash算法的几个特点里 其中有一项就是避免冲突 所以冲突肯定有的
https://blog.csdn.net/asdzheng/article/details/70226007- java里hashcode 是native方法 看不了源码 但是我们可以推理
1 首先string 重写了hashcode方法
2 现在我定义一个类A 里面有一个String成员name
3 重写A的hashcode方法 返回值就是name.hashcode()
4 那么 "abc"和name是"abc"的A类型对象 hashcode相同 不重写equals方法 equals返回值肯定就是false了 即使你重写的话 你也要判断类型吧 类型都不同 肯定也是false
5 结论 hashcode相同 equals 不一定true- 不重写hashcode方法 那默认用的就是native的 java的hashcode算法为了避免冲突 他俩基本不一样 但是 我们equals是比较的某一个值 所以equals true的时候 hashcode也可以不一样
- 为什么重写equals的时候要重写hashcode 我觉一个例子
1 假设String只重写了equals 那在使用hashmap的存放一个"abc" 做为key 然后又存了一个new String("abc");做为key 这时候他俩的hashcode不相等
2 hashmap存放的时候 首先会计算一个hash值 算法是 拿出key的hashcode 然后用hashcode和 hashcode无符号右移16位 进行异或 这时候上述两个key的到的hash很可能不一样
3 把2中的到的hash值和hashmap的数组长度进行&操作
然后找到数组下标 然后判空 如果非空 在通过equals比较 。。。。这时候即使两个key他们equals返回为true 也会因为hashcode不同 而导致存了两个这样的key 显然不是想要的结果
类相关的 getClass
toString
四 内部类 静态内部类 匿名内部类
- 内部类
- 可以访问外部类的所有成员 所以他持有了外部类的引用 (不然他使用外部类成员的时候用的是外部类哪个对象的 )
- 当内部类访问外部类的私有成员的时候 编译不会出错 但是虚拟机运行的时候 是会给中间做一个桥接的 由于多调用了方法 所以性能上会降低 如果允许 可以把内部类要访问的成员 定义成protected的
- 静态内部类
- 和一个普通的外部类没有区别 使用的时候 new 外部类.内部类构造()
- 静态内部类只能访问外部类的静态方法 和 静态变量
- 匿名内部类
- 方法中 new onClickListener new Runnalbe 这种
- 京东面试的时候 面试官说new Thread 不是匿名内部类
同学和我说 如果不是匿名的 那这个类名是啥。。。。。
- 判断一个类是什么类型 通过Class的下列方法
isAnonymousClass 匿名的
isMemberClass 内部类
isLocalClass 本地的 (方法中定义的类)
网友评论