Java基础知识

equal和==

对于基本数据类型,只能使用==比较。
对于基本数据类型的封装类和字符串,=比较的是地址,而equal比较的是值。
对于其他类,=和equal比较的都是地址。

标题Java三大特性:

封装,继承,多态。反射也是Java中的一个重要特征

重载和重写

重载可以改变函数的修饰符,返回类型。但必须修改入参数量和类型,不能只修改修饰符和返回值。
重写时可以修改修饰符,但函数的入参和返回值必须与父类相同。

final,finally和finalize的区别

final用来修饰属性,方法和类,表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句的一部分,表示最后执行部分。
finalize是Object类中的方法,在对象被垃圾回收时执行,可以重写以实现对象被回收时的额外操作。

标题Java中的乐观锁concurrent

基于CAS(Compare And Swap)实现。
里面实现了许多乐观锁的数据类型:在java.util.concurrent.atomic包下,例如AtomicInteger,AtomicBoolean等等。

String,StringBuffer和StringBuilder

Java中的String变量是不可更改的,所以每对String类型的变量进行一次操作就相当于新建了一个变量,如果经常需要更改的话很浪费内存空间。
StringBuffer和StringBuilder都是可以修改的,在创建需要经常更改的字符串时使用。
二者的区别在于StringBuffer是线程安全的,StringBuilder是线程不安全的。

标题throwable,exception,error的关系

exception和error都是throwable的实现类。
exception是程序运行时报的错,我们也可以创建自定义异常,可以被系统捕获。
error是系统执行时发生重大故障,用户无法捕获。

八种基本数据类型

byte,short,int,long,float,double,char,boolean。
对应的封装类:Byte,Short,Integer,Float,Double,Character,Boolean。
封装类是对基本数据类型的封装,提供一些额外功能,且能在集合类中使用。Java提供了基本数据类型和封装类型的自动装箱和拆箱。

常用集合的实现类

Map类型:
hashmap,hashTable,concurrentHashmap,linkedHashMap,TreeMap,HashTable
HashMap: 最常用的Map类型,线程不安全,通过链地址法解决哈希冲突。hashCode的取值是对对象进行哈希处理。键只能有一个为null,值可以有多个为null。如果HashMap中的key是一个自定义类,那么就要重写对应的hashcode和eqauls方法。HashMap的容量一般定义为2^n,为了使散列更加均匀。
TreeMap:利用红黑树实现,实现了SortMap接口,对存入的数据按照键值排序,可以实现排序取出节点。
LinkedHashMap:同时维护一个哈希表和一个双向链表,哈希表中的每一个entry都是一个双向链表中的节点,可以实现有序遍历。
但因为还需要维护链表,所以使用起来效率较低。但在数据量较小时遍历可能速度反而更快,因为LinkedHashMap在遍历时只与数据量有关,而HashMap与Hash表容量有关。
concurrentHashMap:可以进行同步访问的HashMap。在多线程中,如果直接对整个HashMap进行加锁,并发度会很低,相当于加了一个表锁。
所以出现了concurrentHashMap。concurrentHashMap中实现了分段锁。concurrentHashMap中维护着Segment和HashEntry,每个Segment对若干个桶进行加锁,每个桶是若干个HashEntry连接起来的链表。可以提高并发度,相当于行锁。当出现需要访问整个表的数据请求时,会按顺序逐个加锁所有段,按顺序可以有效避免死锁。
HashTable也可以实现并发访问,与concurrentHashMap不同的是,HashMap会对整个表进行加锁,所以并发度很低。且HashTable的键和值都不能为null。
List类型:
arraylist, linkedlist,vector
arraylist是基于数组实现的,方便查找
linkedlist和vector都是基于链表实现的,方便插入和删除。
arraylist和linkedlist是线程不安全的,而vector是线程安全的
Set类型:
集合set是一种无重复的数结构
HashSet,TreeSet,LinkedHashSet
HashSet:利用HashMap实现,存入的值存在HashMap的Key中,Value部分存一个空值。
TreeSet:与TreeMap类似,利用红黑树存储数据,可以实现排序。
LinkedHashSet:基于LinkedHashMap实现,可以实现顺序存储。

Collection和Collections的区别

Collection是集合类的上级接口,继承自Colllection的集合有List和Set。
Collections是针对集合类的一个帮助类,他提供一系列的静态方法来实现对集合类的辅助操作。

Iterator和ListIterator的区别

Iterator和ListIterator都是迭代器。ListIterator继承自Iterator。
Iterator只能向前遍历,ListIterator可以双向遍历。
Iterator可以遍历List和Set类,ListIterator只能遍历List类。

快速失败(fast-fail)和安全失败(safe-fail)的区别

在遍历java.util下的集合时,如果原集合发生改变,则会发生快速失败,并抛出相应异常。
而java.util.concurrent包下的集合都是安全失败的,在遍历时访问的是原集合的深拷贝,不会抛出异常。

抽象类和接口的区别

抽象类中可以定义变量,抽象方法和实际方法
接口中只可以定义抽象方法和常量。
抽象类是对一种具体事务的抽象
接口是对一种行为的抽象
一个类可以实现多个接口,但只能继承一个抽象类。

小数计算有误差的原因

Java中的十进制小数在计算机中都是利用二进制存储的,因为二进制小数无法十分精确的表示十进制小数,所以在计算时会出现一定误差。

反射创建对象的方法

  1. Class.getClassForName(“className”).newInstance();
    String.class.newInstance();
  2. 获取构造器并调用newInstance方法。
    String.class.getConstructor(String.class).newInstance(“className”);

泛型

使用情况:List,其中String就是泛型。
如果传入的变量不符合泛型会在编译器报错,避免在运行时出错。

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值