自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Effective Java读书笔试之创建和销毁对象

Effective Java读书笔试之创建和销毁对象  1.考虑用静态工厂方法代替构造函数    静态工厂方法的第一个好处是,与构造函数不同,静态工厂方法有名字,接口有更好的类型表达能力。    静态工厂方法的第二个好处是,与构造函数不同,它每次被调用的时候,不要求非得创建一个新的对象,特别是对于不变对象而言,可以在被调用时返回同一个对象的引用,重用对象....

2011-12-12 10:32:23 123

原创 LinkedList源码分析

 LinkedList源码分析   LinkedList是动态数组的另一种实现,底层以双向循环链表为实现基础,它的优势在于可以快速的删除和添加元素,不需要像ArrayList那样移动大量的元素,但对于查找元素需要逐个遍历链表中的元素,进行匹配。所以LinkedList适用于频繁删除和添加元素,较少查找元素的应用场景。   LinkedList内部使用Entry<E...

2011-12-03 11:34:04 104

原创 HashSet源码分析

HashSet源码分析   HashSet是Set的一个实现,Set定义一个集合,集合的一个特征是不能包含重复的元素(可以包含null),HashSet底层使用HashMap作为存储结构来实现。         可知HashSet只用来存储对象,并不是key-value对,因为HashMap中的key必须是不同的,跟集合的定义相同,所以HashSet只使用HashMap中的...

2011-12-03 10:39:03 105

原创 HashMap源码分析

 HashMap源码分析     HashMap用来存储key-value对,内部使用拉链法Hash表作为存储结构,key-value被封装成Entry<K, V>,Entry也是链表结点。    1. Hash表的内部结构如下:   Entry<K, V> table[];  table[0]-->Entry(K,V)-...

2011-12-02 21:12:00 104

原创 Lucene入门实例(lucene3.0)

[b]IndexFile.java用于将目录下的文件进行索引[/b](需要导入lucene-core-3.0.3.jar包)[code="java"]package cn.edu.uestc.lucene;import java.io.File;import java.io.FileReader;import java.io.IOException;import jav...

2011-12-02 15:21:28 123

原创 lucene索引和搜索过程中的核心类介绍

[size=large][b]lucene索引和搜索过程中的核心类介绍[/b][/size] lucene是一个工具包,一个Java类库,是一个1M多的jar文件,并不是一个完整的搜索程序,Lucene只专注于文本的索引和搜索功能,它能够让应用程序在不需要了解复杂的索引和搜索的实现的情况下,通过调用简单封装API,为应用程序添加上搜索功能。[size=medium]1.[b]...

2011-12-02 15:17:01 126

原创 Eclipse中导入jar文件的源码

[b]Eclipse中导入jar文件的源码[/b] 在eclipse中导入jar文件对应的源码,主要是为了方便查看一些接口的源码,可以直接按着Ctrl+鼠标左键跳到对应的源码文件。 1.选中项目,然后右键,选择属性[img]http://dl.iteye.com/upload/attachment/598368/c813e329-75c2-3d88-a52...

2011-12-01 14:25:18 192

原创 Java中的"for each"循环

[b]1."for each"循环[/b] JDK5.0增加了一种功能很强的循环结构,可以用来遍历数组(其他类型的元素集合也可以)中的每个元素,而不必需要下标值。 这种for循环语句的格式为: for(variable:collection)statement variable用于暂存集合中的每一个元素,并执行相应的语句statement. 集合collection...

2011-11-27 16:59:44 111

原创 Java对象序列化

[b][size=large]Java对象序列化[/size][/b] 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中。JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了。而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下。...

2011-11-24 19:21:06 130

原创 Java中的内部类

[b][size=large]内部类(inner class)[/size][/b]内部类(inner class)是定义在另一个类中的类。代码结构形式如下[code="java"]class ClassType{ //注意这并不是声明一个成员属性,而是定义一个内部类 private class InnerClassType{ }}[/co...

2011-11-24 15:28:41 91

原创 ArrayList类源码分析

[size=large][b]ArrayList源码分析[/b][/size] ArrayList是以数组为基础实现的一个动态数组容器,通过以下的代码分析可知,一方面在ArrayList中添加或者删除元素(除了在数组容器末尾添加或者删除元素),是需要移动大量元素的借助System.arraycopy()来实现拷贝移动,另一方面,由于数组实现基础,可依靠数组下标,可以实现随机访问,当然查...

2011-11-23 15:50:56 119

原创 float f = 3.4语句正确吗?

[b][size=x-large]float f = 3.4语句正确吗[/size]]?[/b]回答这个问题,得首先知道[u]Java类型转换[/u]和[u]Java数值常量默认类型[/u]相关知识。1.[size=large][b]Java类型转换[/b][/size] Java中不同类型之间的变量赋值时,需要先进行类型转换,才能进行赋值。Java类型转换分为自动转换和...

2011-11-23 14:56:19 1110

原创 serialVersionUID

[b]serialVersionUID[/b] Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应类的serialVersionUID进行比较,如果两个类的serialVersionUID相同就认为是两个类的版本是一致的,可以进行反序列化,否则就认为两个类不...

2011-11-22 20:31:11 72

原创 如何编写一个自定义的Exception类

[b]如何编写一个自定义的Exception类[/b]1.编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程。 [u]至少要继承Throwable或Throwable的子类(Exception),然后编写两个构造函数,一个无参构造函数,另一个提供描述异常信息字符串参数的构造函数。[/u] 在继承任何异常时,将自动继承Throw...

2011-11-22 20:11:47 607

原创 Java线程新同步机制

Java线程新的同步机制1.[b]可重入锁ReentrantLock[/b],相当于synchronized块,为临界区提供互斥访问机制. (1).[b]相关的接口[/b] 创建一个可重入锁 Lock lock = new ReentrantLock(); 请求锁,如果锁被当前另一个线程持有,则阻塞。 void lock() 释放锁...

2011-11-22 16:52:05 71

原创 Java线程wait-notify+sleep+synchronized

1.[b]sleep-wait-yield区别[/b] [b]sleep[/b]是Thread类中的一个静态方法,其定义如下, public static void sleep(long millis)throws InterruptedException 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响,如果指定睡眠的时间到...

2011-11-21 20:40:53 95

原创 深入JVM读书笔记之类装载+连接+初始化

[u]Java虚拟机通过[b]装载,连接和初始化[/b]一个Java类型,来创建一个新的类型对象[/u],使此类型可以被正在运行中的Java程序所使用。装载就是把二进制形式的Java类型读入Java虚拟机中;而连接就是把这种已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行时状态中去;初始化则是给类对象成员变量赋予正确的初始值,通过调用构造函数,静态初始块或者构造块实现。[im...

2011-11-21 10:08:08 97

原创 深入JVM读书笔记之运行时数据区

Java虚拟机运行一个程序时,程序相关的所有数据,都存放在运行时数据区中。运行时数据区包括:[b]方法区,堆,Java栈,PC寄存器,本地方法栈[/b]。 [img]http://dl.iteye.com/upload/attachment/592054/5c6e6b5a-9dc8-3e2a-b8ce-20bbab7fc557.jpg[/img] 1.[u...

2011-11-21 09:42:48 75

原创 Math.round方法

Math.round()java.lang.Math类有两个round()方法,定义如下:public static int round(float);public static long round(double);它们都返回整数,且采用四舍五入进行运算,运算规则如下:(1).如果参数为正数,小数点后采用四四舍五入,如果小数点后面>=0.5则整数部分加1,否则舍弃...

2011-11-19 21:59:49 206

原创 final&finally&finalize

1.final关键字可以用来修饰类,成员方法,方法的参数,成员变量(静态和非静态的) (1).final修饰类表示类为终类,不能被继承,String就是这样的一个类. (2).final修饰一个成员方法时,此方法在子类中不能被覆盖. (3).final修饰成员变量,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即是个常量;如果final修饰的...

2011-11-19 18:03:32 96

原创 String str = new String("abc")创建几个对象?

1.在JVM中存在着一个字符串池,其中保存着很多的String对象,并且可以被共享,因此能提升性能。由于String类是final的,它的值创建后就不可改变,所以不需要担心共享会导致程序混乱. 2.String var = "king"的执行过程:首先在字符串池中查找是否已经有"king"这样的一个对象,通过String类的equals()来判断;如果有,则不再创建新的对象,直接返回...

2011-11-19 14:46:06 117

原创 类的初始化顺序

类的初始化顺序1.对于同一个类中的静态变量,静态初始化块,变量,构造块,构造函数,它们的初始化顺序依次是(静态变量,静态块),(变量,构造块),构造函数。 测试代码:[code="java"]class Test{ private static String staticVar = "静态变量"; private String memberVar = "成员...

2011-11-19 14:05:46 61

原创 Java代码块

Java代码块一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种:1.普通代码块:就是类中方法的方法体 public void xxx(){ //code }2.构造块:用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象 时都会被调用,并且优先于类构造函数执行。 { ...

2011-11-15 22:19:32 332

原创 Java内存管理

Java内存管理一.Java内存中的堆和栈 1.使用new关键字创建的对象,数组,内存空间都在堆(heap)上分配,而释放则是由Java中的垃圾回收机制决定和执行,GC为了能够正确的释放对象内存空间,需要监控每一个对象的运行状态,包括对象的申请,引用,被引用,赋值。 2.在代码块或者函数中的局部变量(基于类型变量和对象引用变量)的内存空间则都在栈上分配,当前的代码块...

2011-11-15 18:00:43 59

原创 hashCode()和equals方法

1.==是比较地址,equals()是比较对象的内容 equals()方法在Object类中的定义: public boolean equals(Object obj){ return (this == obj); } 可知也是比较地址,但是其它的类比如说String类,覆盖了equals()方法,使得equals用来比较对象内容。2.h...

2011-11-13 16:56:53 58

原创 Java基础知识四

1.关于equals(),所有的类都继承了Object类,继承的hashcode(),toString(),equals()方法 在Object类的源码中: public boolean equals(Object obj){ return (this == obj); } 也就是说如果没有override掉对象的equals()方法,就调用对象的equal...

2011-11-10 23:48:01 59

原创 Java基础知识三---static关键字

static变量,static函数,static块1.static变量:Java是纯面向对象的语言,也就是说,所有的方法和属性都是属于类的,不存在全局变量或者全局函数,而static变量却是一类特殊的全局变量,因为在整个应用程序中只有一份,所有类对象共享,并且生命周期是整个应用程序的生命周期。它在main()开始执行以前进行初始化,这里也包括static块. 2.sta...

2011-11-10 14:06:03 99

原创 Java基础知识二

1.在Java中A a只是定义一个A类型的变量a,没有分配内存a = new A();这才调用构造函数进行内存分配,初始化。(与C++不同的) 在Java中基本类型如(byte, int,short, long, float)都是在栈中分配内存,而对于自定义类型-类,则通过new在堆上分配内存。而通过new在堆上分配的内存却不可以通过GC自动释放内存,不需要像C/C++中那样“谁申请谁释放”....

2011-11-10 14:04:23 67

原创 Java基础知识一

(1).instanceof obj instanceof ClassName/Interface 用于判断一个对象否是属于某个类或者接口类型(2).子类赋值给直接父类或者间接父类类型,会自动进行类型转换;而从父类赋值给直接或者间接子类,需要进行强制类型转换.(3)."+"操作符中有一个操作元是String类型,则另一个操作元可以是任何类型(包括基本类型和自...

2011-11-10 14:02:49 81

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除