
Java
zfqjava
这个作者很懒,什么都没留下…
展开
-
NumberFormat的使用技巧
NumberFormat经常被用来格式化和解析数字 ,也常在JTable中使用,不过有很多地方并不是非常合适直接使用它解析数字或者货币值。 NumberFormat默认显示3位小数,如何显示任意长度的小数呢?适用下列代码可以自定义: private static final int DOUBLE_FRACTION_DIGITS = 340; NumberForma原创 2007-04-26 11:19:00 · 1354 阅读 · 0 评论 -
MVC的问题
MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC做为一种优秀的设计模式,或者框架被广泛应用,今天不谈MVC的种种优点,谈谈它的缺点。MVC最主要的缺点是使用的复杂性,对初学者来说较高的学习曲线,很多熟悉MVC模式的人大都从它的强大功能和数据分离的观点来辩护,然而,这些没有说到点子上,复杂性或者说易用性总是一个框架或者类库能否让人广泛接原创 2011-10-23 20:11:09 · 654 阅读 · 0 评论 -
Java Closures
Java试图在最新版本中加入闭包的提议看起来不错,虽然有很多局限,目前最新的提议可在这里查看:State of the Lambda新的提议主要是在语言层面添加lambda表达式来取代一个方法的接口生成的匿名内部类,使用类似Runnable,Comparable, Callable等接口在添加lambda表达式后不再需要创建一个匿名的内部类,使用新的语义使用Runnable时,代码可写为:原创 2011-10-20 12:56:07 · 622 阅读 · 0 评论 -
云存储的思考
云存储作为云计算的一个重要的应用,目前已经被越来越多的人接受,国外的云存储如Amazon S3似乎企业应用的更为广泛,国内还主要停留在个人的应用上!云存储如果想大规模在企业中应用,应具备一些特点:能够提供公开的API,Amazon S3是这个方面的典范,很早就提供了REST和SOAP类型的API。最好能提供传统工具如FTP,WebDAV协议接口,使传统的工具能够访问。私密性,对企业原创 2011-10-20 21:45:40 · 649 阅读 · 0 评论 -
Swing慢不慢?
这个问题很笼统,为什么大多数程序员初次接触到Swing后,有的甚至是别的领域如Windows Forms的专家,都有这种感觉,一些熟悉Swing框架的人可能认为Swing一点也不慢。这涉及到了Swing单线程设计的问题,这个问题是老生常谈,相信不少同学已经熟悉,现在使用JDK原创 2011-10-18 17:40:44 · 1326 阅读 · 0 评论 -
Java多线程的zip工具(2011年10月18日更新-提供源码下载)
最近使用Java做了个小小的多线程的zip工具,测试了一下:测试文件夹包含7307个文件,104的目录,大小246 MB,占用空间402 MB,测试电脑为Inter Pentium Dual CPU E2180 2GHz,896M内存,硬盘5400转单线程:26047ms原创 2011-10-15 17:09:39 · 1228 阅读 · 2 评论 -
Java 8 Defender 方法
Brian Goetz有个关于Java语言改变的提议,Defender methods,这个提议定义了一个abstract方法的默认实现,这个想法很好,不过感觉extension这个关键字有点多余,如果定义一个abstract方法有个default的实现,为什么不是所有的ab原创 2011-10-16 16:55:03 · 733 阅读 · 0 评论 -
对Java虚拟机垃圾回收机制的思考
最近在几个方面进行优化,减少了网站系统运行所占用的内存,内存占用减少了一半,从实践中的得出了几点心得:避免生成新的对象是减少内存使用最有效的办法,生成新的对象的时候有可能在系统各个层面都有可能缓存,减少或者避免数据库查询就能减少大量新对象的生成,避免静态页面在未经改动时生成,或者加大生成的时间间隔,甚至禁用自动生成,提供后台手动生成,新的对象的回收需要一段时间,数据库访问层JPA的缓存也比较大,原创 2011-07-03 01:20:31 · 735 阅读 · 0 评论 -
最近Java编程的几点心得
1.Lazy initialization:重读了《Effective Java第二版》Item 71.奇新CMS初始化和连接数据库采用了lazy initialization for instance field,在奇新网站云系统中部署大规模的站点,启动的时间减少了10倍,重构代码实现这个改动并不麻烦,只添加了一个新class,以下内容摘自《Effective Java第二版》Item原创 2011-06-22 22:41:00 · 632 阅读 · 0 评论 -
我爸是李刚.java 1.0版本
正式发布程序“我爸是李刚.java 1.0版本”,此程序在电脑右下角随机显示网友创作的“我爸是李刚”造句。Web Start在线运行"我爸是李刚",运行此程序需确认安装过Java运行环境使用说明:程序运行后,点击右下角图标,每次点击随机显示一条我爸是李刚造句,默认5分钟显示一条我爸是李刚造句。下载源代码:src.zip免责声明:所有“我爸是李刚”造句均从网络搜集,所有造句版权归创作造句作者所有,新造句不断添加中,敬请期待,欢迎Bug报告和功能建议。原创 2010-10-28 23:19:00 · 1130 阅读 · 19 评论 -
云计算环境下关系数据库的思考
在内存即硬盘的时代,在普通服务器就可拥有4核或者8核的多线程时代,随着NOSQL数据库的大规模应用,不仅要思考一个问题,显然,NOSQL在很多方面还不能完全取代传统的关系数据库RDBMS,现有的基于关系数据库的应用要移植到云计算环境中,是改变程序适应NOSQL数据库,还是改造现有的关系数据库以适应云计算环境?目前看来,前者似乎更加可行,而这里思考的是后者!关系数据库难以横向扩展,主要的瓶颈在文件系原创 2011-10-28 23:00:39 · 1156 阅读 · 2 评论 -
REST vs SOAP
REST风格的API是Web服务的一个正确方向,对于部署实施Web服务的企业来说,应该优先考虑,从实施的角度来讲,从编程的风格来讲,REST风格要远远比实施SOAP容易,我甚至觉得新的Web服务提供商应该只考虑提供REST风格的API,这不仅仅是REST风格的Web服务变得更流行,更多企业选择,它本身确实有巨大的优势!至于SOAP是不是僵尸,这很难讲,这篇《“僵尸”SOAP会阻碍企业发展吗?》原创 2011-11-17 21:40:08 · 941 阅读 · 0 评论 -
Getters and Setters Are Evil or Not Evil?
在JavaLobby看到了Bozhidar Bozhanov的一篇文章Getters and Setters Are Not Evil,evil or not evil, 这是个问题,set 和 get方法主要是为了适应JavaBeans规范产生的,Joshua Bloch也原创 2011-10-15 18:15:53 · 539 阅读 · 0 评论 -
Sun被Oracle收购后Java的发展
<br /> 先不谈Java之父James Gosling离开Oracle的那点事,就JavaFX的路线图改变来看,Oracle无疑是非常务实的,JavaFX是一项创新的技术,但是提出一项新语言对大多数开发人员是种负担,JavaFX2.0的版本允许使用Java API实现相同的效果,增加了对Java程序员的吸引力,另外Oracle提出改善Java客户端对视频播放,HTML5浏览器的支持,这些无疑提升了Java编写RIA程序的优势。回顾Java技术在SUN公司这些年的发展历程,新技术层出不穷,创新能原创 2010-09-29 12:47:00 · 2619 阅读 · 0 评论 -
对最新版的JavaFX2.0的第一印象
最新版的JavaFX2.0发布了,下载后安装第一次运行所有的DEMO全部失败,后卸载重新安装,然后正常,第一次安装没有选目录,第二次选了,不知道什么原因!运行的几个DEMO都非常非常慢,鼠标点击过后好半天才反应过来,还以为是点击的问题!最近对Swing框架有了更多的感悟,原创 2011-10-15 17:32:01 · 812 阅读 · 0 评论 -
Java中的Constants类
Constants类即常量类是将一些常用的变量集合到一个地方的类,常量应该定义在类中,而不是接口中(见Effective Java 2nd Edition, Item19),如果定义的常量是int类型的,可使用Enum类来代替(见Effective Java 2nd Edition, Item30),然而,有些常量类,比如String类型的常量类,可能不太适合使用Enum类来代替。不像Enum原创 2011-12-13 12:05:02 · 28755 阅读 · 1 评论 -
由这篇文章引发的思考“技术控解释为什么Android没有iOS那么顺滑”
优快云首页今天有篇关于Android UI和iOS UI作对比的文章:《技术控解释为什么Android没有iOS那么顺滑》:http://mobile.youkuaiyun.com/a/20111207/308708.html很有趣,可以读读,作者是一个曾经在谷歌呆过Google的软件工程师,他的观点认为由于Android的UI渲染线程优先级过低,造成了Android没有iOS那么顺滑,即使在四核处理器原创 2011-12-07 19:36:59 · 906 阅读 · 0 评论 -
用户体验的挑战
桌面程序或者Web网页程序提升用户体验可能是产品从成功走向伟大的一个重要途径,而用户体验这方面恰恰是很多开发人员忽略的。开发人员通常喜欢谈的的架构,服务器,数据库等技术,而对Web前端应用,桌面技术不屑一顾,事实上,根据统计,很多成功程序的客户端代码一般是服务器端代码的10倍左右,微软Windows系统的成功,苹果iPhone手机的成功,恰恰是桌面或者用户界面技术的成功,尤其iPhone的界面原创 2011-12-08 15:40:47 · 749 阅读 · 0 评论 -
Java程序性能之一
尽管Java Swing框架的性能在最新的JDK版本中有了很大的改进,由于对Swing的线程概念认识不足,也有可能写出速度很慢的程序,下边介绍一下自己开发Swing Rich Client程序的心得体会,与大家共享:要学会使用SwingWorker,当执行查询数据库,连接网络,或长时间的计算,这些代码应该放在doInBackground()方法,而完成这些后需要更新GUI应该把代码放在do原创 2007-05-10 10:08:00 · 1953 阅读 · 0 评论 -
HTML5是未来
HTML5是未来,有可能取代Flash,JavaFX,Microsoft Sliverlight等技术,成为以后Web应用的主流形式,HTML5不仅是标签的变化,还增加了很多API,而对音频,视频和画布等标签的直接支持,让Web页面成为多媒体和游戏等应用的最佳平台,Form表单增加了对多种数据类型的支持,增强了用户体验和可用性!决定部署实施HTML5需要考虑几个问题:1.兼容性:由于HTM原创 2011-11-12 16:19:03 · 579 阅读 · 0 评论 -
好程序需要写两遍吗?
“好程序需要至少写两遍",最初是在博客园看到这篇文章,优快云也转载了:http://sd.youkuaiyun.com/a/20111101/306695.html,不少人从需求不确定的角度出发,很赞成这个观点,我同意代码需要进化,需要迭代开发,但不同意好程序需要写两遍的观点,事实上,如果在程序写之前把一部分时间花在划分模块,讨论需求,设计API上,就能大大减轻后期代码阶段的负担,这也是《Effective原创 2011-11-09 12:08:54 · 627 阅读 · 0 评论 -
Java类库中一些反模式的API
了解和使用过JDBC类库的同学可能知道,ResultSet类有大量的getXXX和updateXXX方法,PreparedStatement类有大量的setXXX方法,是区分类型参数的方法,每一种新类型出现都会在所有这些接口中添加新的对应的方法,这不仅导致由于添加方法导致了接口不兼容的问题,还增加了类库维护者,JDBC驱动实现者的负担,而对用户没有过多的好处:short getShor原创 2011-11-21 16:45:34 · 782 阅读 · 0 评论 -
Swing框架中Composite设计模式的误用
Swing控件是改善为了AWT控件而发展出来的轻量级GUI控件,采用的是Composite设计模式,然而,由于没有清楚的分隔组件(Component)和容器(Container)的边界,就造成了Swing的几乎每个单独的组件都是一个容器,能够添加其他容器或者组件,看似强大的功能实际上造成了大量的问题:1.和人的直觉非常不一致:Swing的GUI上的各种组件如果添加的面板过多的话,就造成各个组件原创 2011-11-21 12:55:40 · 956 阅读 · 0 评论 -
Java游戏开发日志(2007-6-1)
静态的建筑也使用硬件加速的BufferedImage对象,碰撞检测使用了建筑的透明区域,根据静态的Sprite的透明区域通过程序生成一个BufferedImage,这个BufferedImage只有两种颜色,黑色和白色,使用这样的代码创建两种颜色的BufferedImage: BufferedImage bi = new BufferedImage(image.getWidth(), imag原创 2007-06-01 06:28:00 · 1045 阅读 · 0 评论 -
Java游戏开发日志(2007-5-29)
地图使用Tile拼凑起来,游戏使用的是4:3的isometric视图。精灵在游戏中需要碰撞检测,地面Tile检测采用了Masked图片,也就是地面不规则的地形保存了一个只有黑白两种颜色的图片,白色像素表明此处可以通过,使用这样的方法性能上没有什么影响。 地面上精灵的碰撞检测暂时采用了一个精灵底部矩形,采用4:3的菱形可能效果更好,下一步测试后调整。 附截图:原创 2007-05-29 15:58:00 · 1205 阅读 · 2 评论 -
glassfish安全配置
配置使用一个应用程序服务器例如glassfish,要考虑多方面的安全因素,供互联网访问之前,下边这些要修改: 修改管理员admin密码,默认的一般是adminadmin,使用一个随机生成的密码。 删除默认的服务器访问页面:install_dir>/domains/domain_name>/docroot/index.html 禁用目录列表,打开文件instal原创 2007-05-23 18:12:00 · 1461 阅读 · 0 评论 -
Java游戏开发之二
精灵(Sprite)和地图砖块应该使用硬件加速的BufferedImage对象,我们使用ImageIO读取BufferedImage:BufferedImage image = ImageIO.read(url);Sprite sprite = new Sprite(image, 96, 96);在Sprite类中根据传进来的image创建每系列每祯的小图片: int原创 2007-05-27 22:50:00 · 1299 阅读 · 0 评论 -
使用CopyOnWriteArrayList的小技巧
最近在一个Web项目中使用CopyOnWriteArrayList缓存了一些栏目对象,由于每次从数据库查询所有栏目耗时较长,就采用初始化应用程序时查询一次数据库,将符合要求的栏目保存到内存中,以后每次通过后台管理修改栏目时,将内存中对应缓存的栏目更新。CopyOnWriteArrayList文档没有明确指出,不过使用时要注意,初始化一个ArrayList list = new ArrayLis原创 2007-05-24 08:08:00 · 5404 阅读 · 0 评论 -
glassfish性能配置
为了使glassfish在产品环境中运行的更快,可以调整一些参数来提高性能: Java虚拟机参数将-client改为-server。 根据服务器的内存大小调整堆使用参数,如果服务器内存为2G,可以调整堆内存为-Xms1024m, -Xmx1024m。 一般应用服务器发布程序后页面不需要经常更改,网站改版后可以重新发布,所以可以禁用页面和类自动检测功能。原创 2007-05-23 18:46:00 · 1983 阅读 · 0 评论 -
Java游戏开发之一
用Java开发MMOPG游戏是一个挑战, 接下来的这个系列我将结合最近正在开发的一款网络游戏,写一些游戏开发方面的技巧。使用Java开发游戏除了了解基本的类库,还要了解供游戏使用的多种API: 首当其冲的是全屏切换API:GraphicsDevice .setDisplayMode(DisplayMode dm)和GraphicsDevice .setFullScreenWind原创 2007-05-19 11:46:00 · 3591 阅读 · 0 评论 -
Java程序性能之三
Java 2D提供了许多cool功能,用Java2D能做许多图形特效,合理使用一些API可以帮助实现和c++类似的性能: GraphicsConfiguration.createCompatibleImage(int width, int height, int transparency)GraphicsConfiguration.createCompatibleVolatileIm原创 2007-05-14 16:00:00 · 1447 阅读 · 0 评论 -
Java程序性能之四
学会使用java.util.concurrent包,在开发服务器端程序更为重要,要了解的是Java应用服务器的基本框架,Java服务器大量采用线程技术,很多对象要被多个线程同时访问,采用synchronized等技术会影响性能,下边是使用并发包的两个小例子: 使用AtomicInteger记录在线的用户数,下边是我们项目中使用的一段代码: private原创 2007-05-16 19:19:00 · 870 阅读 · 0 评论 -
Java程序性能之二
Java程序给开发人员留下了性能低下,速度慢的印象,也许下边的问题在写程序中要问问自己: 确认正确的使用缓冲IO流了吗?BufferedInputStream ,BufferedOutputStream ,BufferedReader,BufferedWriter . 确认使用Swing创建GUI的时候使用SwingWorker了吗? 确认在程序尤其是Web或原创 2007-05-12 14:23:00 · 1467 阅读 · 0 评论 -
正确使用java.util.logging包
java.util.logging包提供了强大的日志输出功能,正确和有效的使用这些功能需要一些技巧: 了解不同的Level, Level.FINE, LEVEL.FINER,LEVEL.FINEST用来调试和跟踪程序,比如打印一些调试信息,异常等。Level.INFO将打印信息到控制台。 使用Logger.isLoggable(Level)方法检测当前的Level,以此原创 2007-05-06 12:14:00 · 2769 阅读 · 0 评论 -
Java游戏开发日志(2007-6-7)
在游戏中使用Swing控件添加对话框,例如登陆窗口,菜单等。如果使用JPanel控件作为所有控件的容器,应该使用下列的代码禁用Swing默认的双缓存:panel.setDoubleBuffered(false);想让登陆窗口透明,先将JPanel控件设置为透明,使用下列的代码:panel.setOpaque(false);使用下边的代码绘制登陆窗口:Graphics2D g原创 2007-06-07 14:21:00 · 1193 阅读 · 0 评论 -
了解数组类型和使用java.util.Arrays类
Java的数组类型有一些特性值得注意,而如果经常使用数组类型,有必要了解java.util.Arrays这个类,它提供了几个有用的方法,下边是一段代码,使用了这个类的一些方法: int[] a1 = {1, 2, 3, 4, 5}; int[] a2 = {1, 2, 3, 4, 5}; System.out.println("a1 == a2:/t"原创 2007-04-29 10:40:00 · 1593 阅读 · 0 评论