Java
文章平均质量分 82
萧易客
这个作者很懒,什么都没留下…
展开
-
经典面试项目--交通灯管理系统
项目由来:该项目原本是软通动力的一道面试题,交由面试者带回去自行完成,审核通过后即通过面试,当然现在不可能再作为面试题了。不过这个项目还是非常有实践意义的,在网络上传播广泛,从中我们可以学习面向对象的程序设计精髓,对于掌握Java SE基础的初学者而言意义更甚。好了,下面就具体看一看这个项目。原创 2013-09-23 04:10:16 · 13438 阅读 · 1 评论 -
构建通用的操作日志框架实践过程
前段时间公司的项目有这样的一个需求,需要将现有的项目中构建一个日志模块,可以记录用户操作到数据库中,这样一来就可以实现对用户操作的记录,有助于还原和追踪。项目本身的日志使用的是log4j,但仅仅只是代码层面上的日志信息,只能面向程序开发人员。项目中用到了spring的IoC和DI,web框架用的是struts,我决定使用spring的aop特性,编写一个aspect,切入点为service层的原创 2014-04-13 23:47:43 · 11900 阅读 · 6 评论 -
Java反射机制--基本使用方法简介
Reflection(反射)是Java程序开发语言的特征之一,它允许运行中的 Java程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java类中各成员的名称并显示出来。 Java的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C或者 C++ 中就没有办法在程序中获得函数定义相关的信息。反射机制是构建框架技术的基础所在,灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。原创 2013-09-22 20:17:04 · 9342 阅读 · 2 评论 -
为何在匿名内部类中只能问被final修饰的本地变量?
最近在实现一个对JTextField监听字符长度功能中使用了匿名内部类,其中引用了本地的两个变量,编译时出错,被告知“需要被声明为最终类型",甚是疑惑,于是在网上搜索其原因, 在此作一总结。 局部内部类(在方法内部定义的类)中无法直接访问方法中的局部变量,须修饰其为final1:变量的生命周期与局部内部类的对象的生命周期不一致从而导致了这个问题,一个方法运行结束,其局部变量就随之被回收原创 2013-06-26 16:56:56 · 12693 阅读 · 1 评论 -
Java核心技术,让计算机"一芯多用"的多线程技术
我们在使用计算的时候会感受到计算机好像在同时执行很多任务,这也是我最初接触计算机给我留下的印象,而我们普通人在同一时刻大脑只能思考一件事情(当然不排除一些异能者能够做到一心二用),而且我们在思考完一件事情之后进入另一件事情的思考需要花费一段时间适应。而对于计算机来说,其执行任务间的切换是相当快的,以前计算机还是单CPU的时候就是通过这种在各种任务之间的快速切换而“伪实现”了同时执行任务。随着硬件飞速发展,计算机配备了多CPU芯片,就在真正意义上实现了多线程,实现了同时执行多种任务。原创 2013-09-19 21:38:38 · 12581 阅读 · 1 评论 -
Java核心技术,支撑Java程序对外接口的I/O
IO(Input/Output)作为Java编程语言的核心之一其重要性不言而喻,其实现了Java程序对外界的访问和输出,学好Java也是建立在熟练掌握IO的基础之上。流(Stream)的概念很形象,其为一组有序的数据序列。按照数据类型可以分类为字符流和字节流,字符流是对输入字符进行字符编码得到的流,字节流是指可以用计算机处理的二进制数据或者指令所组成的流。两者根据操作类型,可以大致划分为四大类,其中输入流为OutputStream(字节输出流)和Writer(字符输出流),输入流为InputStream(字原创 2013-09-18 20:03:15 · 1765 阅读 · 0 评论 -
Java学习疑惑(7)----网络编程, 详解TCP与UDP两者之间的共同点和差异
设立网络编程最根本性的原因是实现计算机之间的通信. 一台计算机想要与另一台计算机进行通信首先要在网络中通过IP地址找到它. IP地址就像我们每个人的名字一样, 是一种特定的标识, IP地址是计算机的标识, 由于其具有唯一性(在同一个网络中, 一个IP地址代表着一台计算机). 应用程序通过IP地址找到这台电脑与之建立通信, 我们知道, 一台计算机中有很多应用程序, 不同的应用程序传输的数据内容以及格式都是各不相同的, 而这些程序是怎么做到区分各自的数据呢? 计算机科学家们想到了一种很好的解决方案, 在计算机中原创 2013-09-15 01:24:50 · 2058 阅读 · 0 评论 -
Java学习疑点(3)--解析二分法查找的原理以及其优缺点
Java数组Arrays类中有一个方法--binarySearch(). 称之为"二分查找", 其效率远远要高于线性查找, 但是其也一样存在着缺点, 比如查询对象必须要经过排序, 当查询对象中有多个元素相同时, 二分查找只能找到其中一个, 并且找到的这个元素不一定位于最前面或者最后面. 下面对二分查找的原理作一总结: 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。必须在进行此原创 2013-06-29 11:47:02 · 5175 阅读 · 0 评论 -
Java学习疑点(2)--被static修饰的静态变量与实例变量之间生命周期的区别
类中成员变量有两种类型,一种是在声明时被static修饰的静态变量(又称为类变量),为该类中每一个实例所共享。另一种叫做实例变量,由每个实例各自单独拥有,在功能上有这样的差异,两者的生命周期以及机制自然有所区别,下面作一总结 1,静态变量在Java虚拟机加载类时被创建并为其分配内存,位于方法区,就像类中方法一样被所有类的实例共享。所以其可以直接通过类名访问。当卸载类时静态变量被销毁并撤销所原创 2013-06-27 23:35:08 · 1676 阅读 · 0 评论 -
Java正则表达式,详解反斜线在Java中的作用
在程序设计过程中,经常需要对获取的数据进行检查是否符合特定的格式,如此频繁地对数据进行检查使用人工检查简直就是灾难,而自己编写程序检查又显得非常麻烦。比如检查一个输入的电子邮件地址是否正确,自己编程实现检查操作至少需要10行代码并且效率也不一定很好,这时候咋办?正则表达式!!原创 2013-09-24 21:07:32 · 2648 阅读 · 0 评论 -
Java可视化编程,基于布局管理器的UI设计
在《事件驱动模型》我们讲述了如何将用户与功能实现代码联系到一起, 怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析, 站用户角度上分析UI各组件倒底该如何设计. 优秀的UI会给用户带来更加便捷高效的感受,对用户体验的提升是勿容置疑的。在学习网页基础知识的时候css作为样式表为网页设计提供了相当大的便利,Java中Layout布局管理器功能上虽然没有css那么全面,但也提供了类似的功能,为UI各种组件的排布提供了相当大的便捷。通过调用setLayout方法为其指定布局管理器。原创 2013-09-17 21:15:29 · 12559 阅读 · 1 评论 -
Java学习疑点(5)--使用多线程的时候如何注意避免死锁发生?
优秀的程序员总是不断仔细琢磨每一行代码及其所产生的衍生影响,所以优秀的代码总是非常简洁、高效。在编写多线程同步代码块时我们必须要考虑到可能会产生的死锁问题。一旦出现死锁,相关线程就会进入无线等待的状态,严重的可能导致整个程序无响应。通常情况下,死锁问题非常隐蔽。在设计程序时,要对各线程之间锁的等待关系进行详细分析。下面先写一个死锁代码演示一下:原创 2013-07-28 23:32:43 · 1901 阅读 · 0 评论 -
Java学习疑惑(9)--详述枚举,枚举为我们带来了哪些便利?
枚举是JDK1.5的新加入的特性,Enum一般用来表示一组相同类型的常量,比如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且做比较运算的时候可以用==来替换equals。当我们在编写源代码的时候需要让某个类型的变量的取值缩小在一个人为控制的范围内时,枚举就可以在这个时候大显身手了,否则编译器就会报错。枚举可以让编译器在编译就可以控制程序中编写的非法值,普通变量的方式在开发阶段无法实现这一目标。这里我们使用定义星期的枚举来演示一下,感受一下使用枚举给我们编程带来的方便之原创 2013-09-21 19:30:21 · 1526 阅读 · 0 评论 -
Java学习疑点(4)--线程的六个状态以及其安全性问题的个例解析
Thread StatesThreads can be in one of six states: New Runnable Blocked Waiting Timed waiting TerminatedEach of these states is explained in the sections that follow.To determine the current原创 2013-07-07 13:17:13 · 9246 阅读 · 1 评论 -
Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
我们编写程序就是为了方便用户使用, 我觉得UI设计的核心就是简洁, 操作过于繁琐的程序让很大一部分用户敬而远之. 即使功能强大, 但是人们更愿意使用易于操作的软件. 近年流行起来的操作手势和逐渐趋于成熟的语言控制以及其他更加易于操作的方式很可能会颠覆鼠标键盘的操作方式, 我相信这一天必将到来.电影>中画面我记得我去年编写了我的第一个用户界面, 现在想起来当时非常令我困惑的有两项:原创 2013-09-16 16:38:28 · 10771 阅读 · 0 评论 -
Java学习疑点(6)--Set集合添加元素时底层如何实现无重复元素?
最近在学习Collection时发现Set集合的一个显著特点: 不包含重复元素. 经过测试之后发现Set集合在向其添加元素时add()和addAll()方法就对元素进行了"审查", 对比查看是否为尚未存在的元素然后选择是否添加进去. 关于这两种方法底层是如何实现的, 就是我在这里想要说明的.我们知道Set集合是建立在Map的基础之上, 其绝大多数方法构造时都是直接引用了Map中的方法.原创 2013-08-24 21:18:56 · 9002 阅读 · 0 评论 -
Java应用程序高CPU故障诊断(troubleshooting)思路
系统运行出现高CPU报警,一般可以通过top或者任务管理器找到哪些进程在使用CPU,但这个粒度不能让我们知道得更多,我们需要找到程序的哪部分在占用CPU并且在占用CPU做什么,这样才有利于我们以后调优,下面介绍一种可行的思路:找到占用CPU高的进程p找到进程p中占用CPU高的线程t找到线程t在做什么本文以Linux下Java应用程序为例,其他环境或程序可参照该思路,只要思路清晰就好办了打开原创 2015-05-24 19:44:11 · 10618 阅读 · 0 评论