Java基础

基本类型:
int,short,long,byte,double,float,char,boolean
引用类型:
类,接口,数组,注解,枚举
Java的String和StringBuffer和StringBuilder区别:
String:是final类,不可更改,所以在代码里一段拼接文本最好不使用+=,因为会创建两个对象。
StringBuffer是线程安全的,每一个方法都通过synchronized加锁
所以平常使用比较多的是StringBuilder,如果要求线程安全会使用StringBuffer
Java的==和equals和hashcode的区别:
==比较基本类型时,比较值是否相等,比较两个对象时,比较的是地址值(基础类型和Integer引用类型比较时,会自动拆箱为int)
equals比较的通常是两个对象的值是否相等
1、如果两个对象equals,hashcode一定相等。
2、如果两个对象的hashcode相等,他们equals不一定相等。
为什么equals需要重写?
通常需要重写,因为Object默认比较的是对象this == obj;重写hashcode是因为默认计算对象的地址值,不重写会导致值相等,但位置不同。
已经有equals方法,为什么还需要用hashcode?
hashcode是为了集合类添加的,例如用hashset时,不能重复,所以当添加时,会将之前对象都比较一次,如果有了hashcode,就只需要判断当前有没有,没有则添加。不使用hashcode,是无法应用到集合类里面的。
重写equals:要比较类型,比较关键域
Java的抽象类和接口:
接口是针对行为抽象,抽象类是对类抽象
应用:
如果只是抽出公共模块,可以使用抽象类
如果想不同的类实现一些共有的方法,可以使用接口
相同点:
均不能实例化
方法均是声明,没有具体实现
不同点:
接口的方法必须全部实现,抽象类只需要实现抽象方法
接口可以可以多继承,抽象类不行
Java反射
反射:在运行时,获取一个类的所有的方法和属性
反射可以在运行时加载、探知、使用编译期间完全未知的classes。
new一个对象时,jvm加载.class文件生成Class对象(仅且只有一个)
通过Class.forName获取,setAccessible解除私有限定,用invoke去实现。
Java泛型
泛型:避免强制类型转换,提供类型安全
?是无限定通配符,不确定范围,可以是任意类型
? extends T 上限通配符,参数的类型只能是所属类型的子类
? super T 下限通配符,参数的类型只能是所属类型的父类
泛型擦除:
泛型在编译时会被完全擦除,原始定义的类型会被强制转换成具体的类型,它只是编译时的一个语法糖,在代码编写时进行一个规范。
JavaGC
为什么进行垃圾回收?
因为创建对象后不用了需要释放这一部分的内存,引入这个机制后,就不需要程序员去回收。
java的四种引用:
强引用:不会被垃圾回收机制回收
软引用:内存空间足够,不会被回收
弱引用:只要被发现,会被回收
虚引用:任何时候都会被回收
判断一个引用是否应该被回收:
引用计数法:被引用加1,完成引用减一,会导致循环引用
可达性分析算法:引用GCRoot的对象作为起点,保证可达,其实就是活跃着的引用作为GCRoot
虚拟机栈(栈帧中的本地变量表)中引用的对象
方法区中类静态属性引用的对象
方法区中的常量引用对象
native方法引用的对象
垃圾回收算法:
标记清除算法:把需要回收对象标记,然后清除,会造成大部分内存碎片
标记整理算法:移动所有存活对象,将末尾内存回收
复制算法:分为对象面和空闲面(适合垃圾多,减少复制的对象)
分代收集算法:年轻代使用复制算法(年轻代,垃圾多适合复制算法),老年代使用标记整理算法或标记清除算法(老年代,垃圾少适合这两种算法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值