Java基础知识

tech2026-02-22  1

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

反射创建对象的方法

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

泛型

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

.

最新回复(0)