java 基础总结

java 中的异常
Throwable 有两个子类,Error 和 Exception
Error 是虚拟机抛出的, 应用程序无法处理的错误
StackOverFlowError  OutOfMemoryError

运行时异常 unchecked exception 
一般是由程序逻辑错误引起的,开发时应尽量避免
NullPointerException ClassCastException IndexOutOfBoundsException

非运行时异常 checked exception
编译时必须处理,要不 try catch 处理,要不 throws 申明
IOException SQLException

异常和错误的区别
异常是应用程序可以处理的,而错误是应用程序没法处理的
----------------------------
面向对象
面向过程直接高效,面向对象方便复用,扩展和维护
封装 
给出外部可以访问的方法和数据项,隐藏内部实现细节
继承 
继承基类的方法,可改写和扩展
多态
通过继承改写方法,面向父类编程,不同的子类有不同的表现
----------------------------
String 是 final 修饰不可变,每次操作都会产生新的 String 对象
StringBuffer 和 StringBuilder 都是在原对象上操作
经常改变字符串内容时使用 StringBuffer 和 StringBuilder
StringBuilder 线程不安全,速度快一些
StringBuffer 线程安全,速度慢一点
----------------------------
== 和 equals 的区别
== 比较的是栈中的值
由于基本数据类型在栈中分配,== 是比较变量值
由于引用类型栈中存放的是堆中对象的内存地址,== 是比较内存地址
object.equals() 是采用 == 比较,一般会被重写为比较对象内容
// 堆中常量池分配内存
str1 = "hello"; 
// 堆中分配内存
str2 = new String("hello");
str3 = str2;
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true
----------------------------
equals() 比较对象是否相等
hashCode() 获取哈希码,用来确定对象在哈希表中的索引位置
如果两个对象相等 hashcode 应该相同,两个对象有相同的 hashcode 对象不一定相等
object.hashcode() 根据对象内存地址计算散列码
object.equals() 比较对象内存地址是否相等
当对象用到 hash 集合时,需要重写 hashcode() 和 equals()
HashMap 通过 hashcode() 和 equals() 来判断 key 是否相等,如果不重写的话,有可能内容相同的 key 取不出元素来
hashset 通过 hashCode() 去重,当一个对象加入 hashset 时,hashset 先根据对象的 hashCode() 判断对象加入的位置,如果该位置没值,就说明没有重复直接加入,如果该位置有值就通过 equals() 看两个对象是否相同,相同就拒绝加入,不同就重新散列到其他位置
----------------------------
final 的作用
final 修饰的类不可被继承
final 修饰的方法不能被改写
final 修饰的变量被赋值后不能被更改
final 修饰基本数据类型变量时,变量的值不能改
final 修饰引用类型变量时,引用不能改,引用对象的值可以改
----------------------------
为什么局部内部类和匿名内部类访问的局部变量必须是 final 修饰
因为编译之后会生成两个 class 文件,有不同的生命周期,当外部类的方法结束时局部变量就会被销毁,但内部类对象可能还存在,这样内部类对象访问了一个不存在的变量,为了解决这个问题,就将局部变量复制一份作为内部类的成员变量,为了避免数据同步,就要求 final 修饰内部类访问的局部变量
----------------------------
接口和抽象类的区别
抽象类可以有成员函数和抽象方法,接口只能有抽象方法 public abstract 
抽象类中可以有变量,接口中只能有常量 public static final
一个类只能继承一个抽象类,可以实现多个接口
接口是一种约定,用于面向接口编程
抽象类把子类公共逻辑放在抽象类里实现,把差异化特性留给子类实现
----------------------------
重载 重写
重载 
方法名相同,根据不同的参数列表调用不同的方法,不同参数列表可以是参数类型不同或个数不同或顺序不同,返回值和访问修饰符可以不同
重写
子类覆盖父类的方法,方法名和参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符大于等于父类
----------------------------
泛型中的 extends 和 super 的区别
<? extends T> 表示包括 T 在内的任何 T 的子类
<? super T> 表示包括 T 在内的任何 T 的父类
----------------------------


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我三师弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值