Java
工具
基础工具:
appletviewer Run and debug applets without a web browser.
extcheck Utility to detect Jar conflicts.
jar Create and manage Java Archive (JAR) files.
java The launcher for Java applications. In this release, a single launcher is used both for development and deployment.
javac The compiler for the Java programming language.
javadoc API documentation generator.
javah C header and stub generator. Used to write native methods.
javap Class file disassembler
jdb The Java Debugger.
jdeps Java class dependency analyzer
监控工具:
jps Experimental: JVM Process Status Tool - Lists instrumented HotSpot Java virtual machines on a target system.
jstat Experimental: JVM Statistics Monitoring Tool - Attaches to an instrumented HotSpot Java virtual machine and collects and logs performance statistics as specified by the command line options.
jstatd Experimental: JVM jstat Daemon - Launches an RMI server application that monitors for the creation and termination of instrumented HotSpot Java virtual machines and provides a interface to allow remote monitoring tools to attach to Java virtual machines running on the local system.
问题定位工具:
jinfo Experimental - Configuration Info for Java - Prints configuration information for a given process or core file or a remote debug server.
jhat Experimental - Heap Dump Browser - Starts a web server on a heap dump file (for example, produced by jmap -dump), allowing the heap to be browsed.
jmap Experimental - Memory Map for Java - Prints shared object memory maps or heap memory details of a given process or core file or a remote debug server.
jsadebugd Experimental - Serviceability Agent Debug Daemon for Java - Attaches to a process or core file and acts as a debug server.
jstack Experimental - Stack Trace for Java - Prints a stack trace of threads for a given process or core file or remote debug server.
管理工具:
jcmd JVM Diagnostic Commands tool - Sends diagnostic command requests to a running Java Virtual Machine.
jconsole A JMX-compliant graphical tool for monitoring a Java virtual machine. It can monitor both local and remote JVMs. It can also monitor and manage an application.
类初始化
生命周期:
- 加载(Loading)
- 通过类的完全限定名称获取定义该类的二进制字节流。
- 将该字节流表示的静态存储结构转换为方法区的运行时存储结构。
- 在内存中生成一个代表该类的 Class 对象,作为方法区中该类各种数据的访问入口。
- 验证(Verification),确保 Class 文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
- 准备(Preparation),为类变量(被 static 修饰)分配内存并设置初始值(非定义值),使用的是方法区的内存。
- 解析(Resolution),将常量池的符号引用替换为直接引用的过程。
- 初始化(Initialization)
- 执行类构造器
() 方法 - 父类的
() 方法先执行 - 包括所有类变量的赋值动作和静态语句块中的语句
- 顺序由语句在源文件中出现的顺序决定,静态语句块只能访问到定义在它之前的类变量,定义在它之后的类变量只能赋值,不能访问。
- 初始化时机:
- 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时
- 使用 java.lang.reflect 包的方法对类进行反射调用的时候
- 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化
- 当虚拟机启动时,虚拟机会先初始化这个主类
- 执行类构造器
- 使用(Using)
- 卸载(Unloading)
初始化顺序:
普通类:
- 静态变量
- 静态代码块
- 普通变量
- 普通代码块
- 构造函数
带继承的子类:
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类普通变量
- 父类普通代码块
- 父类构造函数
- 子类普通变量
- 子类普通代码块
- 子类构造函数
带抽象的实现子类: 接口 - 抽象类 - 实现类
- 接口静态变量
- 抽象类静态变量
- 抽象类静态代码块
- 实现类静态变量
- 实现类静态代码块
- 抽象类普通变量
- 抽象类普通代码块
- 抽象类构造函数
- 实现类普通变量
- 实现类普通代码块
- 实现类构造函数
接口:
- 声明的变量都是静态变量并且是final的,所以子类无法修改,并且是固定值不会因为实例而变化
- 接口中能有静态方法,不能有普通方法,普通方法需要用defalut添加默认实现
- 接口中的变量必须实例化
- 接口中没有静态代码块、普通变量、普通代码块、构造函数
类加载器:
两个类相等,需要类本身相等,并且使用同一个类加载器进行加载。
- 启动类加载器(Bootstrap ClassLoader)
- 扩展类加载器(Extension ClassLoader)
- 应用程序类加载器(Application ClassLoader)
双亲委派模型:
- 除了顶层的启动类加载器外,其它的类加载器都要有自己的父类加载器。
- 一个类加载器首先将类加载请求转发到父类加载器,只有当父类加载器无法完成时才尝试自己加载。
- 使得基础类得到统一
泛型
也称泛型类型,是一种类型参数化的类或接口,可以通过为泛型类型分配一个类型,将用分配的具体类型替换泛型类型
无法将原始类型用于泛型;只能使用引用类型。
泛型类:
public class GenericContainer<T> {
private T obj;
public GenericContainer(){
}
// Pass type in as parameter to constructor
public GenericContainer(T t){
obj = t;
}
/**
* @return the obj
*/
public T getObj() {
return obj;
}
/**
* @param obj the obj to set
*/
public void setObj(T t) {
obj = t;
}
}
泛型方法:
public static <N extends Number> double add(N a, N b){
double sum = 0;
sum = a.doubleValue() + b.doubleValue();
return sum;
}
类定义中的尖括号之间是类型参数部分,T 是与此类中定义的泛型类型关联的参数
采用<T, S>
形式,标识多种泛型类型
好处:
- 更强的类型检查
- 消除类型转换
- 定制泛型算法
标准类型参数建议:
E:元素
K:键
N:数字
T:类型
V:值
S、U、V 等:多参数情况中的第 2、3、4 个类型
有界:
<T extends UpperBoundType>
,上限类型<T super LowerBoundType>
,下限类型问号 (?)
,表示未知类型,可用于参数、字段、局部变量和返回类型
集合框架(JCF)
核心接口:
主要实现:
具体类
Set:元素唯一
- HashSet - 唯一,无序。(哈希表)
- TreeSet - 唯一,自然序。(红黑树)
- LinkedHashSet - 唯一,插入序。(哈希表+链表)
List:元素可相同,有序
- ArrayList - (数组)
- LinkedList - (双向链表)
Queue和Deque:队列,FIFO
- ArrayDeque - Deque(数组).
- LinkedList - Queue和Deque(链表).
- PriorityQueue - Queue(小顶堆).
Map:键值对
- HashMap - 无序(哈希表).
- TreeMap - 自然序(红黑树).
- LinkedHashMap - 插入序(哈希表+链表).
工具类
- Arrays:对数组(数据类型[])进行各种操作。例如,排序、查找、复制等
- Collections:对集合类(Collection的子类)进行操作。例如,排序等。
辅助类
Iterators:
- Iterator - 单向迭代器.
- ListIterator - 双向迭代器.
Ordering:
- Comparable - 自然序,内部重写compareTo.
- Comparator - 排序规则,作为策略外部传入.
参考: