Java
文章平均质量分 64
踏雁寻花
分享带来乐趣
展开
-
类和类之间的关系(第一章)
这一块我打算分几章来跟大家分享一下一、关联关系在一个类A的里面,声明另一个类B的成员变量(在方法外)。双向关联(顾客和商品的关系)单向关联(顾客和地址的关系)自关联(节点)多重性关联关系(界面和按钮的关系)聚合关系(汽车和引擎的关系)组合关系(头和嘴的关系)(聚合和组合代码的表现形式是一样的,代码如下,区别仅仅在于语义上面)聚合:原创 2013-08-23 10:40:04 · 1057 阅读 · 0 评论 -
JDNI了解
在网上看到了这样的一道题目:下列关于使用JNDI的说法中错误的是?A、可以解决多个应用程序访问同一个资源的问题B、可以解决跨容器访问资源的问题C、可以解决集群环境中资源共享问题D、可以解决跨平台访问资源的问题由于我没有了解过什么是JNDI,以前仅仅听说过这个词儿。今天看到了这样的一个题,我开始了解了JNDI。。。下面看一个一个网友写的关于JNDI的看法,觉得挺有意思的:原创 2013-02-05 16:49:36 · 6889 阅读 · 1 评论 -
CKEditor+CKFinder+JSP实现在线编辑器上传文件(包括图片、flash)
这两天我就一直在琢磨如何才能实现在编编辑器的功能,由于家里的网是电信天翼的3G卡,有流量限制,如今也就剩下100M左右的流量了,上网也很费劲,于是狠心的上网找了一大堆的资料,终于实现了这样的功能,确实挺纠结的,这里我先给大家演示基本的搭建,下一篇文章演示在Struts2框架下的搭建。在分享我需要声明一下,这篇文章是参考几个网友提供的资料再加上自己的亲身实现,进行的一些修改,最终分享给大家。CK原创 2013-02-19 15:09:46 · 8175 阅读 · 2 评论 -
值传递还是引用传递
通过代码分析:public class ParamTest { // 初始值为0 protected int num = 0; // 为方法参数重新赋值 public void change( int i) { i = 5; } // 为方法参数重新赋值 public void change(Pa原创 2013-10-18 11:58:55 · 1177 阅读 · 0 评论 -
Java事件机制
Java事件机制包括三个部分:事件、事件监听器、事件源。1、事件:一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息。import java.util.EventObject;/** * 事件类,用于封装事件源及一些与事件相关的参数. * @author Eric */public class CusEvent exten转载 2013-11-29 20:26:29 · 1483 阅读 · 0 评论 -
JavaBean是什么
JavaBean是一种特殊的Java类,即:有默认构造方法,只有get和set方法的java类的对象。专业解释:软件组件就是指可以进行独立分离、易于重复使用的软件部分。JavaBean就是一种基于Java平台的软件组件思想,JavaBean也是一种独立于平台和结构的应用程序编程接口(API)。JavaBean保留了其他软件组件的技术精华,并添加了被其他软件组件技术忽略的技术特性,使得它原创 2014-02-24 21:36:17 · 13569 阅读 · 1 评论 -
Vector和ArrayList的比较
今天研究了一下Vector和ArrayList的源码,又加深了对这两个类的理解。List接口下一共实现了三个类:ArrayList,Vector,LinkedList。LinkedList就不多说了,它一般主要用在保持数据的插入顺序的时候。ArrayList和Vector都是用数组实现的,主要有这么三个区别:1、Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,V原创 2013-08-18 00:06:55 · 26721 阅读 · 6 评论 -
Hashtable类中的四种遍历方法对比
要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable keySet() - returns a Set of the keys entrySet() - returns a Set of the mapp转载 2014-02-24 21:35:33 · 18570 阅读 · 0 评论 -
异常处理程序应该提供上下文信息并且保留原始异常
Exception handlers should provide some context and preserve the original exception处理异常时,需要进行两个操作:1、使用context减缓复制的问题2、保留原始异常信息,进行堆栈问题的追踪( stack trace )看一些例子:try { /* ...翻译 2014-02-12 18:16:12 · 3921 阅读 · 0 评论 -
10个有关String的面试问题
下面是面试中最容易问到的有关String的问题。1. 如何比较两个字符串?使用“==”还是equals()方法?简单来讲,“==”测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值是否相等。除非你想检查的是两个字符串是否是同一个对象,否则你应该使用equals()来比较字符串。如果你知道interning的概念的话,那就更好了。2. 为什么针对安全保密高的信息转载 2014-02-25 23:01:58 · 1032 阅读 · 0 评论 -
struts2整合CKEditor和CKFinder实现上传
上一篇文章给大家分享了CKEditor+CKFinder+JSP实现了在线编辑器上传图片的功能,这里在给大家分享一下如何在前面的基础上在struts2下实现这样的功能。实现与Struts2的整合,整合的过程确实easy.不过实现之后,图片上传不上去,上传之后显示“文件不存在”,然后在网上找了一些资料,经过总结最终实现了这个功能。此问题的原因就是struts2的拦截器,在web.xml中,可以清原创 2013-02-19 15:23:09 · 4057 阅读 · 4 评论 -
HashMap存储分析
通过代码 transient Entry[] table;可以看出有一个Entry数组。static class Entry implements Map.Entry { final K key; V value; Entry next; final int hash;}通过上面这段代码可以看出原创 2013-09-22 22:19:52 · 1703 阅读 · 0 评论 -
二叉树算法删除代码实现
此代码仅供参考,如有疑问欢迎评论:二叉树的删除操作比较复杂,主要分三种情况:1、删除没有子节点的节点,2、删除只有一个节点的节点(其中有分为两种情况),3、删除有两个节点的节点。在讲解之前我先把查找的代码附上,以为删除过程需要用到这段儿查找的代码: public TreeNode search( int key) { TreeN原创 2013-09-04 23:41:59 · 12856 阅读 · 0 评论 -
错误的理解了简单工厂模式
首先说明一下,这篇文章的理解会有很多的问题,可能你刚刚学习工厂模式容易走进的一个误区,我就走进来了。看完了这篇文章之后,大家可以看看另一篇文章,这是我的新的认识:http://blog.csdn.net/tayanxunhua/article/details/10297013我这里通过代码说说简单工厂模式,大家都知道简单工厂模式的定义:根据传入的参数即可返回所需的对象,而不需要知道原创 2013-08-25 23:53:17 · 1261 阅读 · 0 评论 -
设计模式 - 简单工厂模式
我这里通过代码说说简单工厂模式,大家都知道简单工厂模式的定义:根据传入的参数即可返回所需的对象,而不需要知道具体类的类名。再说一下优缺点:优点:1、客户端或者说调用者,不需要知道对象是如何创建的,只管用就可以了,减少了调用者的记忆量(不需要记住类名嘛);2、通过工厂实现了责任的分割;3、通过引入配置文件,可以实现在不修改源代码的情况下,更换或添加新的具体产品类(注意:这里我指的原创 2013-08-25 10:59:43 · 1868 阅读 · 0 评论 -
通过NBA教练布置战术理解适配器模式
如果想使用一个已经存在的类,但是,如果它的方法和你的要求不同的时候,就应该考虑使用适配器模式。 当你的电脑所能接受的电压和你提供的电压不相符的时候,就需要使用适配器。 (电脑是Target类,提供的电压(220V)是Adaptee类,电源适配器这个就是Adapter了) 看一下这个类图,教练给队员布置战术,其中一名队员是姚明,他不会英原创 2013-08-27 10:28:33 · 1241 阅读 · 0 评论 -
查找算法总结(二)
三、二叉查找树: 特点: 1、如果它的左子树不空,那么左子树上的所有结点值均小于它的根结点值; 2、如果它的右子树不空,那么右子树上的所有结点值均大于它的根结点值; 3、它的左右子树也分别为二叉查找树。二叉查找树的插入和删除都非常的方便,很好的解决了折半查找添加删除所带来的问题。原创 2013-09-06 15:06:06 · 6071 阅读 · 0 评论 -
查找算法总结(一)
静态查找结构主要有两种:顺序查找、折半查找一、顺序查找:这个就不用说了,一个一个的差吧,很差劲的算法了,时间复杂度是O(n) public int shunXuSearch( int[] b, int c) { for ( int i = 0; i length; i++) { if (b[i]原创 2013-09-06 15:03:11 · 2070 阅读 · 0 评论 -
查找算法总结(三)
六、多路查找树、B~树、B+树 B树一种多路查找树(维基百科中定义):存储排序数据并允许以O(log n)的运行时间进行查找,顺序读取,插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。也可以说是 B- 或 B~树。 术语B树可以指一个特定的方案,也可以指大体上一类方案。狭义上,一个B树在它内部节点中存储键值,但不需在叶子节点上存储原创 2013-09-06 15:12:09 · 5052 阅读 · 5 评论 -
关于hashcode 里面 使用31 系数的问题
首先我们来了解一下hashcode,什么是hashcode?有什么作用?hashcode其实就是散列码,使用hashcode使用高效率的哈希算法来定位查找对象!我们在使用容器来存储数据的时候会计算一串散列码,然后将数据放入容器。如:String s =“java”,那么计算机会先计算散列码,然后放入相应的数组中,数组的索引就是从散列吗计算来的,然后再装入数组里的容器里,如L转载 2013-09-04 23:36:18 · 1316 阅读 · 0 评论 -
comparator和 comparable 区别
Java中排序有两种方式,分别是通过Comparator接口和Comparable接口,那么这里就说一下这两个接口的区别:1、Comparable接口在java.lang包下;而Comparator接口在java.util包下;2、Comparable接口中只有一个方法:public int compareTo(T o); Comparator接口中有两个方法:分别是:i原创 2013-09-04 23:36:57 · 1445 阅读 · 0 评论 -
Java环境变量的分析
CLASSPATH,PATH,JAVA_HOME变量简单分析。。。 CLASSPATH的作用于import和package有关,例如当你写下import java.util.*;的时候,编译器面对import这个关键字,就会知道你要引入的java.util这个package中的类;但是编译器如何知道的呢?所以你就得告诉编译器,那么如何告诉呢?就需要设置CLASSPATH。当编原创 2013-09-04 23:39:02 · 1083 阅读 · 0 评论 -
Java8中的java.util.Random类
在Java8中java.util.Random类的一个非常明显的变化就是新增了返回随机数流(random Stream of numbers)的一些方法。 下面的代码是创建一个无穷大的double类型的数字流,这些数字在0(包括0)和1(不包含1)之间。Random random = new Random();DoubleStream doubleStream = random.翻译 2014-02-22 20:50:05 · 16664 阅读 · 0 评论 -
quartz任务并行
任务有并行和串行之分,并行是指:一个定时任务,当执行时间到了的时候,立刻执行此任务,不管当前这个任务是否在执行中;串行是指:一个定时任务,当执行时间到了的时候,需要等待当前任务执行完毕,再去执行下一个任务。quartz框架中防止任务并行可以有两种方案:1、如果是通过MethodInvokingJobDetailFactoryBean在运行中动态生成的Job,配置的xml文件有个co原创 2014-02-26 21:19:22 · 13507 阅读 · 5 评论 -
利用反射访问私有属性、调用私有方法
访问私有属性的代码:package com.tyxh.create;public class Customer { private int a = 1; public int getA() { return a; } }package com.tyxh.create;import java.lang.reflec原创 2014-02-28 09:45:17 · 1358 阅读 · 0 评论 -
Java8:使用新JS解释器Nashorn编译Lambda表达式
在最近的一篇文章中,我了解了一下Java8和Scala是如何实现 Lambda 表达式的。正如我们所知道的,Java8不仅对javac编辑器做了很大改进,它还加入了一个全新的项目---Nashorn。这个新的解释器将会代替Java现有的Rhino解释器。据说它执行JavaScript的速度非常之快,就像世界上最快的跑车 V8s,所以,我觉得现在很有必要打开Nashorn源码,看看它是如翻译 2014-03-11 18:07:55 · 13091 阅读 · 5 评论 -
Java8-本地缓存
这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存。因为Map有一个新的方法可以在key为Null的时候自动计算一个新的value值。非常完美的实现cache。来看下代码:public static void main(String[] args) { for (int i = 0; i < 10; i++) System.o翻译 2014-03-13 00:44:20 · 2752 阅读 · 0 评论 -
notify发生死锁的情景
jvm多个线程间的通信是通过 线程的锁、条件语句、以及wait()、notify()/notifyAll组成。下面来实现一个启用多个线程来循环的输出两个不同的语句:package com.tyxh.block;class OutTurn { private boolean isSub = true; private int count转载 2014-03-11 10:37:24 · 7466 阅读 · 0 评论 -
Eclipse中的Java 8功能支持情况
我在Eclipse(Java development tools (JDT) )团队中从事 Java™ 8 研究的工作已经很久了。同时,他们也通过我们的 Bugzilla 工具跟踪了所有的工作。所有的Java8 的bug都是以[1.8]为前缀的,这样可以很容易的被发现。这里可以看到589个已经关闭的错误,我们团队已经有75%左右的bug修复。当然,仍然会有新的bug出现,但毫无翻译 2014-03-29 15:52:25 · 3217 阅读 · 0 评论 -
notify和notifyAll的一段儿代码分析
当你Google”notify()和notifyAll()的区别”时,会有大片的结果弹出来,(这里先把jdk的javadoc文档那一段撇开不说),所有这些搜索结果归结为等待的线程被唤醒的数量:notify()是唤醒一个, 而notifyall()是唤醒全部.那他们的真正区别是什么呢?原创 2014-03-11 10:48:53 · 5180 阅读 · 1 评论 -
红黑树插入操作分析及代码实现
首先说一下红黑树的五个性质:1、每个结点要么是红色的,要么是黑色的;2、根结点是黑色的;3、每个叶结点,即空结点(NIL)是黑色的;4、如果一个结点是红色的,那么它的两个子结点都是黑色的;5、对每个结点,从该结点到其子结点的所有路径上包含相同数目的黑结点。在对红黑树插入的时候,我们一般都会插入红色的结点,红黑树的插入主要有这几种情况:1、插入的是根结点;原创 2014-03-19 09:56:00 · 1752 阅读 · 0 评论 -
减少GC开销的5个编码技巧
在这篇文章中,我们来了解一下让代码变得高效的五种技巧,这些技巧可以使我们的垃圾收集器(GC)在分配内存以及释放内存上面,占用更少的CPU时间,减少GC的开销。当内存被回收的时候,GC处理很长时间经常会导致我们的代码中断(又叫做"stop the world")。背景 GC用来处理大量的短期的对象的分配(试想打开一个web页面,一旦页面被加载之后,被分配内存的大部分对象都会被翻译 2014-03-21 23:57:03 · 3512 阅读 · 0 评论 -
使用Java处理大文件
我最近要处理一套存储历史实时数据的大文件fx market data,很快意识到,使用传统的InputStream不能够将它们读取到内存,因为每一个文件都超过了4G。甚至编辑器都不能够打开这些文件。在这种特殊情况下,我可以写一个简单的bash脚本将这些文件分成更小的文件块,然后再读取它。但是我不想这样做,因为二进制格式会使这个方法失效。处理这个问题的方式通常就是使用内存映射文件翻译 2014-04-02 22:35:06 · 1964 阅读 · 0 评论 -
经典死锁案例-哲学家就餐
经典案例:哲学家就餐。通过修改《Java编程思想4》一书中的案例,来做实验,原创 2014-08-19 23:14:30 · 6177 阅读 · 0 评论 -
超高速缓存的最佳实践
Performance Zone这个社区是由 New Relic 和 AppDynamics来维护的。这两个人都是APM社区的用户,APM社区有很多的知名的用户,并且能够为这些用户减少很多的成本。定制高速缓存解决方案是一件非常有趣的事情,它似乎是改善应用程序整体性能的最简单的方式。然而,超高速缓存是一项很大的技术难题,在实践之前需要注意几个事项。最佳范例1、key/value集翻译 2014-03-12 22:56:32 · 2570 阅读 · 0 评论 -
从一道++操作面试题说起(Javap)
题目: j初始值为0,j=j++;循环100遍值为多少?int j = 0;for (int i = 0; i < 100; i++){j = j++;}System.out.println(j);答案: 0原理探析:1、当然如果我们讨论的深入一些,这个问题甚至可以从多线程原子性和易变性(Atomicity and Volatility转载 2013-10-05 15:10:00 · 1393 阅读 · 0 评论 -
BlockingQueue深入分析
1.BlockingQueue定义的常用方法如下 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e,time,unit)移除remove()poll()take()poll(time,unit)检查element()peek()不可用不可用转载 2014-03-10 23:46:46 · 40125 阅读 · 0 评论 -
克隆的理解
一、Cloneable 的用途 Cloneable和Serializable一样都是标记型接口,它们内部都没有方法和属性,implements Cloneable表示该对象能被克隆,能使用Object.clone()方法。如果没有implements Cloneable的类调用Object.clone()方法就会抛出CloneNotSupportedException。二、克隆原创 2014-02-28 08:59:13 · 1619 阅读 · 0 评论 -
Java序列化几点注意事项
序列化保存的是对象的状态,而静态变量是类的状态。1、基本类型的数据可以直接序列化2、对象要被序列化,它的类必须要实现Serializable接口;如果一个类中有引用类型的实例变量,这个引用类型也要实现Serializable接口。3、可以用这个代码:ObjectOutputStream out = new ObjectOutputStream(new FileOu原创 2014-02-28 09:25:49 · 7485 阅读 · 0 评论 -
Annotation的学习
一、概念: Annotation它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。Annontation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参转载 2014-02-18 18:14:02 · 1225 阅读 · 0 评论