欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

java2SE基础知识点整理(一),java2se基础知识

来源: javaer 分享于  点击 42301 次 点评:280

java2SE基础知识点整理(一),java2se基础知识


  • 8种基本数据类型的大小、他们的封装类
    8中基本数据类型分别是:4种整型、2种浮点型、1种字符类型和表示真值的boolean型。
细分 基本类型 存储需求 取值范围
整型 int 4字节 -2 147 483 648 ~ 2 147 483 647
整型 short 2字节 -32 768 ~32 767
整型 long 8字节 -9 223 372 036 854 775 808 ~ 9223372036854775807
整型 byte 1字节 -128 ~ 127
浮点类型 float 4字节 有效位数6-7位
浮点类型 double 8字节 有效位数15位
char类型 char
布尔类型 boolean ——— false 和 true

封装类:Integer、Boolean、Byte、Character、Double、Number

  • switch语句能否使用字符串做参数
    JDK7之后可以,JDK7之前case标签只能支持 byte、short、char、int或者其对应的封装类以及 Enum 类型。

  • equals与==的区别
    Object类中的equals方法用于检测一个对象是否等于另外一个对象(判断两个对象是否具有相同的引用);“==”是关系运算符。
    比较主要是基于两个方面来进行比较的:①基本数据类型的比较②引用对象的比较
    先说第一种:基本数据类型的比较。
    “==”和equals()都比较两个值是否相等。返回的是true或false。
    再说第二种:引用对象比较
    “==”和equals()都是比较栈内存中的地址是否相等。相等为true。
    注意!(String是对象,两个字符串比较,“==”和equals()都是比较字符串内容是否相同;创建两个String对象时,它们所在的内存地址是不相同的,但内容你可以赋给相同的值)

  • Object有哪些公用方法?
    equals()方法、hashCode()方法、toString()方法、clone()方法、getClass()方法、finalize()、wait()方法、notify()方法和notifyAll()方法。后面的四个主要是在线程中使用的。

  • Java的四种引用,强弱软虚,用到的场景。
    1.强引用
    最普遍的一种引用方式,如String s = “abc”,变量s就是字符串“abc”的强引用,只要强引用存在,则垃圾回收器就不会回收这个对象。
    2.弱应用
    弱引用和软引用大致相同,弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
    3.软引用
    如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。
    4.虚引用
    就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。 虚引用主要用来跟踪对象被垃圾回收器回收的活动。
    虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中
    (参考:[http://blog.csdn.net/heminghung/article/details/51379143],[http://www.jianshu.com/p/1c4162b558b8])

  • Hashcode的作用
    HashCode,总结几个关键点:

1、HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的

2、如果两个对象equals相等,那么这两个对象的HashCode一定也相同

3、如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写

4、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置

  • HashCode有什么用

HashCode有什么用?不妨举个例子:

1、假设内存中有0 1 2 3 4 5 6 7 8这8个位置,如果我有个字段叫做ID,那么我要把这个字段存放在以上8个位置之一,如果不用HashCode而任意存放,那么当查找时就需要到8个位置中去挨个查找

2、使用HashCode则效率会快很多,把ID的HashCode%8,然后把ID存放在取得余数的那个位置,然后每次查找该类的时候都可以通过ID的HashCode%8求余数直接找到存放的位置了

3、如果ID的 HashCode%8算出来的位置上本身已经有数据了怎么办?这就取决于算法的实现了,比如ThreadLocal中的做法就是从算出来的位置向后查找第 一个为空的位置,放置数据;HashMap的做法就是通过链式结构连起来。反正,只要保证放的时候和取的时候的算法一致就行了。

4、如果ID的 HashCode%8相等怎么办(这种对应的是第三点说的链式结构的场景)?这时候就需要定义equals了。先通过HashCode%8来判断类在哪一 个位置,再通过equals来在这个位置上寻找需要的类。对比两个类的时候也差不多,先通过HashCode比较,假如HashCode相等再判断 equals。如果两个类的HashCode都不相同,那么这两个类必定是不同的。

举个实际的例子Set。我们知道Set里面的元素是不可以重复的,那么如何做到?Set是根据equals()方法来判断两个元素是否相等的。比方 说Set里面已经有1000个元素了,那么第1001个元素进来的时候,最多可能调用1000次equals方法,如果equals方法写得复杂,对比的 东西特别多,那么效率会大大降低。使用HashCode就不一样了,比方说HashSet,底层是基于HashMap实现的,先通过HashCode取一 个模,这样一下子就固定到某个位置了,如果这个位置上没有元素,那么就可以肯定HashSet中必定没有和新添加的元素equals的元素,就可以直接存 放了,都不需要比较;如果这个位置上有元素了,逐一比较,比较的时候先比较HashCode,HashCode都不同接下去都不用比了,肯定不一 样,HashCode相等,再equals比较,没有相同的元素就存,有相同的元素就不存。如果原来的Set里面有相同的元素,只要HashCode的生 成方式定义得好(不重复),不管Set里面原来有多少元素,只需要执行一次的equals就可以了。这样一来,实际调用equals方法的次数大大降低, 提高了效率。

  • ArrayList、LinkedList、Vector的区别。
No. 区别 ArrayList Vector
1 推出时间 JDK1.2 JDK1.0
2 性能 采用异步处理方式,性能更高 采用同步处理方式,性能相对较低
3 安全性 非线程安全 线程安全
4 输出 Iterator、ListIterator、foreach Iterator、ListIterator、foreach、Enumeration

LinkedList基于链表的数据结构

  • String、StringBuffer与StringBuilder的区别
    String:字符串常量
    StringBuffer:字符串变量(线程安全)
    StringBuilder:字符串变量(非线程安全)
    详细查看这篇博客

  • Map、Set、List、Queue、Stack的特点与用法
    Map采用的是key-value形式进行保存数据的,使用的主要方法有:
    put(K key,V value)–向集合中保存数据
    get(Object key)–通过指定的key获得对应的value

Set是作为Collection的一个子接口,它不允许存储重复的数据,两个常用的子类为HashSet和TreeSet。

List同样是Collection的子接口,它可以存储重复的的接口,并且扩充了Collection中的方法。

Queue(队列)是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

Stack(栈)是采用先进后出的数据存储方式,每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出。方法有:push(E item)、pop()。

  • HashMap和HashTable的区别
    Map接口下的两个子类。
No. 区别 HashMap HashTable
1 推出时间 JDK1.2 JDK1.0
2 性能 采用异步处理方式,性能更高 采用同步处理方式,性能相对较低
3 安全性 非线程安全 线程安全
4 设置null 允许将key或value设置为null 不允许出现null,否者会出现空指向异常
  • HashMap和ConcurrentHashMap的区别,HashMap的底层源码
    http://www.cnblogs.com/remember-forget/p/6021644.html

  • TreeMap、HashMap、LindedHashMap的区别
    http://blog.csdn.net/xin_jmail/article/details/25975085

  • Collection包结构,与Collections的区别
    Collection是接口,用于定义集合操作的标准,每次只保存一个对象;Collections是专门提供的一个集合的工具类,并没有实现Collection接口,他可以用来操作任意的集合对象。

  • try catch finally,try里有return,finally还执行么?
    finally语句一定会被执行,并且是在return之前执行。

  • Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况
    java.lang.Object
    |==>java.lang.Throwable
    |==>java.lang.Exception
    java.lang.Object
    |==>java.lang.Throwable
    |==>java.lang.Error

Throwable下有两个子类-Error和Exception区别如下:

类型 含义
Error 指的是JVM错误,这个时候的程序并没有执行,无法处理
Exception 指的是程序中出现的错误信息,可以进行异常处理

OOM异常:OutOfMemoryError异常
SOF异常:StackOverFlow栈异常。

  • Java面向对象的三个特征与含义
特征 含义
封装 ①指把对象的属性和行为看成一个不可分的整体,将两者封装到一个不可分的独立单位中(对象);②指信息隐藏,不让外界知道
继承 在原生类的基础上派生出新的类,新类既有原生类的特性也可由拥有自己的属性和行为
多态 允许程序中出现重名现象。(Java中有方法重载和对象多态这两种形式的多态)①方法重载:一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同;②对象多态:子类对象可以与父类对象进行相互的转换,而且根据其使用的子类不同完成的功能也不同
  • Override和Overload的含义去区别
No. 区别 重载 覆写
1 英文单词 Overloading Overriding
2 定义 方法的名称相同、参数的类型及个数不同 方法名称、参数类型及个数、返回值类型完全相同
3 权限 没有权限要求 被子类所覆写的方法不能拥有比父类更严格的访问控制权限
4 范围 发生在一个类中 发生在继承关系中

相关文章

    暂无相关文章

用户点评