随笔分类 -  Java

摘要:Eclipse中10个最有用的快捷键组合一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工... 阅读全文
posted @ 2014-06-24 09:27 曾先森在努力 阅读(317) 评论(0) 推荐(0) 编辑
摘要:我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,往往会采用一些较为复杂的安全策略,加重了程序员的开发负担.万幸的是,在JDK1.5出现之后,Sun大神(Doug Lea)终于为我们这些可怜的小程序员推出了java.util.conc 阅读全文
posted @ 2013-11-07 20:44 曾先森在努力 阅读(259) 评论(0) 推荐(0) 编辑
摘要:1、通过实现Runnable接口线程创建(1).定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。(2).创建Runnable接口实现类的对象。(3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)(4).调用Thread对象的start()方法,启动线程示例代码:[java] view plaincopyprint?packagedemo.thread;publicclassTreadDemo1implementsRunnable{privateintcountDown=10;@ 阅读全文
posted @ 2013-11-06 22:18 曾先森在努力 阅读(450) 评论(0) 推荐(0) 编辑
摘要:0.参考文献:hash算法 (hashmap 实现原理)Java实现的散列表1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图: 从上图我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%.. 阅读全文
posted @ 2013-11-06 15:15 曾先森在努力 阅读(368) 评论(0) 推荐(0) 编辑
摘要:----------------------------------------以下是分割线----------------------------------------我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类。Ojbect类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的。java中比较两个对象不是用“==”吗?对于String a=”hello”;String b=”hello”,比较两个字符串是否相等,我们都知道必须用equals方法,而不是用==。 因为a,b是内存中两个不同的对象,他们指向两个内存中 阅读全文
posted @ 2013-10-09 21:45 曾先森在努力 阅读(535) 评论(0) 推荐(0) 编辑
摘要:什么是Future?用过Java并发包的朋友或许对Future (interface)已经比较熟悉了,其实Future本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发。在一些领域语言(如Alice ML)中甚至直接于语法层面支持Future。这里就以java.util.concurrent.Future为例简单说一下Future的具体工作方式。Future对象本身可以看作是一个显式的引用,一个对异步处理结果的引用。由于其异步性质,在创建之初,它所引用的对象可能还并不可用(比如尚在运算中,网络传输中或等待中)。这时,得到Future的程序流程如果并不急于使用Fu 阅读全文
posted @ 2013-10-09 09:01 曾先森在努力 阅读(673) 评论(0) 推荐(0) 编辑
摘要:在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。 这里有必要提一下就是Class下的newInstance()和new有什么区别?,首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstanc.. 阅读全文
posted @ 2013-10-05 14:37 曾先森在努力 阅读(1128) 评论(0) 推荐(0) 编辑
摘要:二分查找又称折半查找、二叉查找,它是一种效率较高的查找方法。前提给定一已排好序的n个元素a[0 : n-1],现要在这n个元素中找出一特定元素x。算法 思想首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大 于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 1 public class BinarySearch { 2 3 /*** 4 * 5 * @param a 已排... 阅读全文
posted @ 2013-09-22 14:57 曾先森在努力 阅读(264) 评论(0) 推荐(0) 编辑
摘要:前言一直有这么个想法,列一下我个人认为在学习和使用Java过程中可以推荐一读的书籍,给初学者或者想深入的朋友一些建议,帮助成长。推荐的的都是我自己读过,也会推荐一些朋友读过并且口碑不错的书籍。以下的资料都是免登陆下载,而且都是free的。如果大家觉得资料好的话,推荐给周围的朋友,让更多的人少走弯路。入门类《Thinking in java》 下载地址在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的 阅读全文
posted @ 2013-05-11 11:18 曾先森在努力 阅读(322) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/hkendless/article/category/1199089http://yuyiming.iteye.com/category/191189 阅读全文
posted @ 2013-05-11 11:16 曾先森在努力 阅读(207) 评论(0) 推荐(0) 编辑
摘要:String是java最常的类,但它不是基础类型--因而内存的堆栈中它是以地址的形式保存.而它又是一个很特殊引用类型:类的声明是final,它是不能被继承的:1 public final class String implements java.io.Serializable, Comparable<String>, CharSequenceString的主要属性:1 private final char value[]; //String本质就是Char数组2 private final int offset; //偏移位3 private final int count; /. 阅读全文
posted @ 2013-05-11 11:10 曾先森在努力 阅读(708) 评论(0) 推荐(0) 编辑
摘要:1、设计模式一般用来解决什么样的问题( a)A.同一问题的不同表相B不同问题的同一表相C.不同问题的不同表相D.以上都不是2、下列属于面向对象基本原则的是( c )A.继承 B.封装 C.里氏代换 D都不是3、Open-Close原则的含义是一个软件实体( a )A.应当对扩展开放,对修改关闭.B.应当对修改开放,对扩展关闭C.应当对继承开放,对修改关闭D.以上都不对4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( a )模式。A.创建型 B.结构型 C行为型 D.以上都可以5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( d )的表述A.开-闭原则B 阅读全文
posted @ 2013-05-04 15:24 曾先森在努力 阅读(3280) 评论(0) 推荐(0) 编辑
摘要:1 所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread在运行,则虚拟机退出。虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemonthreads,JVM会使得这个threads停止,JVM也停下如果此时正在运行的其他threads有Non- 阅读全文
posted @ 2013-05-04 11:09 曾先森在努力 阅读(712) 评论(0) 推荐(0) 编辑
摘要:单例模式(Singleton)1.介绍:也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 2.实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空 阅读全文
posted @ 2013-04-20 22:07 曾先森在努力 阅读(413) 评论(0) 推荐(0) 编辑
摘要:概念:在Java应用程序中,一个类Class只有一个实例存在.单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说,只有一个实例是很重要的,虽然系统中可以有许多打印机,但却只应该有一个打印机假脱机,只应该有一个文件系统和一个窗口管理器,一个数字滤波器只能有一个A/D转换器,一个会计系统只能专用于一个公司。怎样才能保证一个类只有一个实例并且这个实例易于被访问,一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象,一个更好的方法是让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法,这就 阅读全文
posted @ 2013-04-04 20:34 曾先森在努力 阅读(286) 评论(0) 推荐(0) 编辑
摘要:内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩溃。虽然Java存在内存泄露,但是基本上不用很关心它,非凡是那些对代码本身就不讲究的就更不要去关心这个了。Java中的内存泄露当然是指:存在无用但是垃圾回收器无法回收的对象。而且即使有内存泄露问题存在,也不一定会表现出来。Java是如何管理内存 为了判断Java中是否有内存泄露,我们首先必须了解Java是如何管理内存的。Java的内存管理就是对象的分配和释放问题。在Java中,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。另外,对象的释放是由GC决定和执行的。在J. 阅读全文
posted @ 2013-04-03 07:39 曾先森在努力 阅读(747) 评论(0) 推荐(0) 编辑
摘要:一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题。 题目如下: 问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数 答案很明确,可以继承。 一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题。题目如下:问: 抽象类是否可继承实体类 (concrete class)答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直 阅读全文
posted @ 2013-04-01 21:55 曾先森在努力 阅读(428) 评论(0) 推荐(0) 编辑
摘要:JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。Java和c++的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易学习,并且编程环境更为简单。我在这里不能完全列出不同之处,仅列出比较显著的区别:1.指针JAVA语言让编程者无法找到指针来直接访问内 阅读全文
posted @ 2013-04-01 11:02 曾先森在努力 阅读(249) 评论(0) 推荐(0) 编辑
摘要:Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行。本文主要介绍sleep()和wait()的区别,一起来看。1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。sleep不出让系 阅读全文
posted @ 2013-03-31 19:30 曾先森在努力 阅读(425) 评论(0) 推荐(0) 编辑
摘要:一、概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。 从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后, 阅读全文
posted @ 2013-03-26 16:11 曾先森在努力 阅读(189) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示