
Java
文章平均质量分 73
珊瑚
这个作者很懒,什么都没留下…
展开
-
java比较器Comparable接口和Comaprator接口
java的比较器有两类,分别是Comparable接口和Comparator接口。在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下:原创 2012-05-24 13:47:08 · 977 阅读 · 0 评论 -
java垃圾回收简介
1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被转载 2012-05-24 13:40:22 · 590 阅读 · 0 评论 -
Java是类型安全的语言,而C++是非类型安全的
有过C++开发经验的人会发现,我们可以将0作为false,非零作为true。一个函数即使是bool类型的,但是我们还是可以返回int类型的,并且自动将0转换成false,非零转换成true。代码实例如下:#include #include using namespace std; bool fun()//函数返回类型是bool,但是我们在函数中可以返回int类型。 { r转载 2012-05-23 14:14:50 · 863 阅读 · 0 评论 -
java多线程之 wait(),notify(),notifyAll()
wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对象都有wait(),notify(),notifyAll()的功能.因为每个对象都有锁,锁是每个对象的基础,当然操作锁的方法也是最基础了。 wait导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或被其他线程中断。wai原创 2012-05-16 13:56:11 · 751 阅读 · 0 评论 -
Synchronized和java.util.concurrent.locks.Lock的区别
主要相同点:Lock能完成Synchronized所实现的所有功能。主要不同点:Lock有比Synchronized更精确的线程予以和更好的性能。Synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放。synchronized 修饰方法时 表示同一个对象在不同的线程中 表现为同步队列如果实例化不同的对象 那么synchron原创 2012-05-14 14:35:33 · 344 阅读 · 0 评论 -
五种单件模式——Singleton的实现方式
最基本的实现方式如下:package singletonpattern;public class Singleton1 { private static Singleton1 uniqueInstance; private Singleton1() { } public static Singleton1 getInstance() { if (uniqueIn原创 2012-04-13 13:28:36 · 354 阅读 · 0 评论 -
Java中的容器类
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList原创 2012-05-11 11:27:35 · 316 阅读 · 0 评论 -
虚函数与纯虚函数(C++与Java虚函数的区别)
c++虚函数定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数 [1]语法:virtual 函数返回类型 函数名(参数表) { 函数体 }用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数,也就是允许子类override父类同名方法。虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚原创 2012-05-24 14:03:13 · 1655 阅读 · 0 评论 -
SAX解析XML文件有关characters的最大长度2048的问题
使用SAX解析XML文件,我们都知道需要重载charaters方法@Override public void characters(char[] ch, int start, int length) throws SAXException但是用这个方法会有一点问题,其中ch这个char数组的默认最长长度为2048,如果超过这个长度,将产生一个新的char数组(也是2048长度)来存原创 2012-07-20 11:05:24 · 1667 阅读 · 3 评论 -
XPath详解及Java示例代码
import java.io.IOException;import javax.xml.parsers.*;import javax.xml.xpath.*;import org.w3c.dom.*;import org.xml.sax.SAXException;public class XpathTest { public static void main(String[] a原创 2012-07-31 11:28:58 · 8388 阅读 · 2 评论 -
使用httpClient在客户端和服务器端传输对象参数
昨天把httpClient的源代码下载来看了一下。 稍微跟踪了一下,最终还是使用java.net包的东西.不过封装的实在是漂亮.写程序方便多了。不过还是建议最好先熟悉net包下的东西.为了测试写了个在客户端和服务器段传对象的代码. 简单的传递了一个字符串. 如果复杂点可以传其他的对象,在参数里给出class name之类的信息.服务器端就可以使用反射来做一些实用的操作了。客户端:原创 2012-08-17 15:49:03 · 4778 阅读 · 0 评论 -
web.xml全面解析
web.xml 详解一1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。 DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,转载 2012-07-27 15:19:01 · 550 阅读 · 0 评论 -
Ajax代理的Java Servlet的实现
import java.io.IOException;import java.io.InputStream;import java.net.URL;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;impor原创 2012-07-27 10:25:50 · 535 阅读 · 0 评论 -
Java实现缓存Cache
原理是使用LinkedHashMap来实现,当缓存超过大小时,将会删除最老的一个元组。实现代码如下所示import java.util.LinkedHashMap;import java.util.Map;public class LRUCache { public static class CachedData { private Object data = null;原创 2012-07-26 17:17:37 · 1384 阅读 · 0 评论 -
基于JAVA的ajax代理的研究实现
目录前言ajax跨域问题描述ajax跨域问题解决方法解决方案一解决方案二解决方案三解决方案四附录前言随着web2.0的发展,ajax变的越来越流行,并且已经深入到了许多web应用中。web2.0带来的还不仅仅是技术上和用户体验上的革新,更重要的 是他使互联网的信息更为开放,内容提供商们把私有的数据和服务通过web service(SOAP,RES转载 2012-07-26 15:49:28 · 1046 阅读 · 0 评论 -
java多态的魅力
“polymorphism(多态)”一词来自希腊语,意为“多种形式”。多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本。尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念。 Java中的多态总是子类型的多态。几乎是机械式产生了一些多态的行为,使我们不去考虑其中涉及的类型问题。本文研究了一种面向类型的对象观点,分析了 如何将对象能够表现的行转载 2012-04-23 16:35:06 · 265 阅读 · 0 评论 -
Java中变量的初始化顺序
规则1(无继承情况下):对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器证明代码:public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量"; // 变量 pu原创 2012-04-23 12:31:38 · 496 阅读 · 0 评论 -
Java中父类与子类的加载顺序
class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例) //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化 public String p_Field = "父类--变量";原创 2012-04-23 12:34:39 · 1104 阅读 · 0 评论 -
Java中的不可变类型
我们先看下面一个例子:[java] view plaincopyimport java.math.BigInteger; public class BigProblem { public static void main(String[ ] args) { BigInteger fiveThousand =原创 2012-04-05 19:35:25 · 597 阅读 · 0 评论 -
Java中的不可变类型
我们先看下面一个例子:import java.math.BigInteger;public class BigProblem { public static void main(String[ ] args) { BigInteger fiveThousand = new BigInteger("5000"); BigInteger fiftyT原创 2012-04-05 19:32:05 · 122 阅读 · 0 评论 -
静态方法的重写问题
首先来看看以下程序将会打印出什么:class Dog { public static void bark() { System.out.print("woof "); }}class Basenji extends Dog { public static void bark() { }}public class Bark { publ原创 2012-04-05 16:57:27 · 232 阅读 · 0 评论 -
数组重排序(如何将所有奇数都放在所有偶数前面)
这里介绍一种高效的能在O(n)时间复杂度内完成的算法。核心思想是:定义两个指针,一个指针A从前往后扫描,一个指针B从后往前扫描。指针A扫描到偶数暂停,指针B扫描到奇数暂停,然后交换着两个数,交换之后继续如上述扫描和交换,直到指针A和指针B重合停止。这个算法的Java代码如下:package Reorder;public class Reorder { public stati原创 2012-04-05 15:37:20 · 842 阅读 · 0 评论 -
分别用递归和循环的方式求斐波那契数列
代码如下:public class Fibonacci { public static long recursive(int n) { if (n <= 0) return 0; if (n == 1) return 1; return recursive(n - 1) + recursive(n - 2); } public static long loo原创 2012-04-03 20:51:31 · 865 阅读 · 0 评论 -
如何用两个栈来实现队列
题目:如何用两个栈来实现队列,即实现队列的两个方法——appendTail(插入)和deleteHead(删除)。分析:核心思想是一个栈正向存储,另外一个栈逆向存储。正向存储的栈用来插入,逆向存储的栈用来删除。实现的Java代码如下:import java.util.Stack;public class QueneWithTwoStacks { private Stack st原创 2012-04-03 19:59:22 · 323 阅读 · 0 评论 -
递归查找有序二维数组
假设给定一个有序二维数组,每一行都是从左到右递增,每一列都是从上到下递增,如何完成一个函数,输入这样一个二维数组和一个整数,判断这个整数是否在这个二维数组中。假设一个4×4的有序二维数组: 1 2 8 9 2 4 9 12原创 2012-04-03 16:27:05 · 619 阅读 · 0 评论 -
同步访问共享的可变数据
如果对共享的可变数据的访问不能同步,其后果非常可怕,即使这个变量是原子可读写的。下面考虑一个线程同步方面的问题。对于线程同步,Java类库提供了Thread.stop的方法,但是这个方法并不值得提倡,因为它本质上是不安全的。使用轮询(Polling)的方式会更好,例如下面这段程序。import java.util.concurrent.TimeUnit;public class原创 2012-03-31 15:12:19 · 279 阅读 · 0 评论 -
一种求正整数幂的高效算法
核心思想是当n为偶数时,a^n = a^n/2 × a^n/2当n为奇数时,a^n = a^(n-1)/2 × a^(n-1)/2 × a代码如下:public class Power { public static void main(String[] args) { System.out.println(power(5.5,5)); } private sta原创 2012-04-05 14:25:51 · 317 阅读 · 0 评论 -
Java中名字重用的术语介绍——覆写(override)隐藏(hide)重载(overload)遮蔽(shadow)遮掩(obscure)
class Belt { private final int size; public Belt(int size) { // Parameter shadows Belt.size this.size = size; }}覆写(override)一个实例方法可以覆写(override)在其超类中可访问到的具有相同签名的所有实例方法[J原创 2012-04-05 19:48:32 · 1004 阅读 · 0 评论 -
关于final变量的初始化探讨
final变量的初始化位置 一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。而且在Java1.1以前,只能是在定义时给值。三是在初如化代码块中{} 或者 static{}public class InitOrder { { System.out.println("before---field"); /原创 2012-04-23 12:33:33 · 398 阅读 · 0 评论 -
Java中Vector和ArrayList的区别
首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力原创 2012-05-03 13:19:59 · 383 阅读 · 0 评论 -
Java Formatter格式化说明符使用
语法为:%[argument_index$][flags][width][.precision]conversion例如:Formatter formatter = new Formatter(System.out);formatter.format("%-15s %-10s %-15s\n", "Reader Id", "Range", "Date");原创 2012-05-03 20:57:07 · 450 阅读 · 0 评论 -
Map的三种遍历方式
map的三种遍历方法! 集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~/* * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.tsp2c.liubao;import java.util.Coll原创 2012-05-03 12:42:07 · 304 阅读 · 0 评论 -
父类和子类初始化顺序
继承类的构建过程是向外扩散的,子类初始化了,父类一定也初始化了class Art{ Art(){ System.out.println("Art"); }}class Drawing extends Art{ Drawing(){ System.out.println("Drawing"); }}public class Cartoon extends Drawing原创 2012-04-30 19:51:05 · 283 阅读 · 0 评论 -
Java protected的深层次理解
一提到访问控制符protected,即使是初学者一般都会很自信的认为自己在这方面的理解没有问题。那好,我们提一个问题出来看看..... 请看下面两端代码,其中包B中的猫和鼠都继承了动物类。//代码1:包A中有一个动物类 package testa; public class Animal { protected void crowl(String c){原创 2012-04-30 18:48:28 · 570 阅读 · 1 评论 -
Java的五个基本特征
1. 万物皆为对象。2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的。3. 每个对象都有自己的由其他对象所构成的存储。4. 每个对象都拥有其类型。5. 某一特定类型的所有对象都可以接收同样的消息。原创 2012-04-27 09:49:02 · 346 阅读 · 0 评论 -
Java 读写 Excel文件所需Jar包
dom4j-1.6.1.jarpoi-3.8-beta3-20110606.jarpoi-ooxml-3.8-beta3-20110606.jarpoi-ooxml-schemas-3.8-beta3-20110606.jarxmlbeans-2.3.0.jar原创 2012-04-14 23:13:14 · 483 阅读 · 0 评论 -
解惑Java字符串“==”和“equals”
虽然关于Java字符串“==”和“equals”的问题是Java学习中的最基础的一个问题,但是仍然有不少刚刚学习Java的同学搞不清楚里面的原理,最近和朋友讨论到这个问题,所以写篇博客给大家分享一下我自己的理解。首先让我们看一个例子:public class TestStringEquals { public static void main(String[] args) {原创 2012-03-31 16:07:46 · 555 阅读 · 0 评论