java枚举类型

咸鱼了好几天,恢复一下更新

看到一本书介绍单例模型时使用了enum,非常好奇,平时很少使用枚举类型,趁这个机会深入了解一下。

public class EnumDemo {

    public static void main(String[] args){
        //直接引用
        Day day =Day.MONDAY;
    }

}
//定义枚举类型
enum Day {
    MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

继续阅读java枚举类型

Java多线程

多线程一向是提升程序运算效率的一大双刃剑,用好了效率飞快,用坏了出了bug也不知道怎么回事。

一个多线程程序包含两个或多个能并发运行的部分。这些并发的部分能够充分的利用CPU,提高程序的运行效率,他们使用共同的内存空间,属于同一个进程。

可以把多线程当作CPU的进程调度来理解,只不过是级别更低一级的进程调度。同样也有死锁、通信、同步等问题,也有新建、运行、就绪、休眠等状态,也有优先级的概念。
继续阅读Java多线程

Java虚拟机——GC算法

学习Java总是避不开jvm的,毕竟整个java都运行在这个虚拟机上,可能以后会把虚拟机独立出来成为一个分类罢。

GC算法介绍

Garbage Collection,垃圾收集,即内存回收,我们都知道Java是不需要程序员手动管理内存的,因为java有一个垃圾清理器的东西存在,Java中,GC的对象是Java堆和方法区(即永久区)。垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM。

GC算法分类

继续阅读Java虚拟机——GC算法

HashMap、HashTable、ConcurrentHashMap辨析

HashMap、HashTable、ConcurrentHashMap可以说是java集合类的重点了,见到很多的面试题都会提到集合类的线程安全,比如HashMap是非线程安全的,那么有哪些线程安全的集合类,答案当然是HashTable和ConcurrentHashMap。

接下来一个一个看三种集合类的特点。

HashMap

HashMap就是普通的数组+链表的组合,可以称为拉链法,数据结构的课程有完整的讲述,简单的来说就是用一个数组来保存一堆链表的头节点。
继续阅读HashMap、HashTable、ConcurrentHashMap辨析

Java数据类型及自动转换

这篇文章来源于不久前看到的一道面试题。

题目

在JDK7中,如何声明x和i,使得x=x+i合法,x+=i不合法。

第一眼看到这道题目,误以为是使x+=i合法,x=x+i不合法,想着这应该挺简单,大抵是+=这个运算符会对后面的类型做强制类型转换,而普通的加法至少会转换成int,因此,只要将x声明称byte、short或者将i的类型声明为比x精度高的类型即可。

然而仔细一看就惊了,因为印象中+=运算会自动带上强制类型转换,x+=i不合法的,x=x+i理应也不合法,查阅了网上的资料之后,发现在jdk7之前,好像可以通过Object没有+=运算来做处理。如下声明
继续阅读Java数据类型及自动转换