博文

浅谈Java开发工具一路走来的历程(2013-05-08 11:06:00)

摘要:在学习编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
2008年的软件开发生命周期管理软件(software development lifecycle: SDLC)在2008年有了长足进展,JavaWorld的Java工具领域专家John Ferguson 为我们带来2008年Java领域自动构建框架,软件开发周期管理工具,测试工具,以及IDEs方面的总结。他指出java工具2008年的变化包括CI持续集成工具的改进,JVM脚本语言支持上升,以及对支持多核系统编程工具需求增加等。让我们开始吧!

Build automation

让我们从现代软件开发进程的核心部分开始:Build automation自动构建,整体来看,build automation包括持续集成(continuous integration :CI)工具,构建脚本build-scripting工具,代码质量控制工具,以及版本管理或者称为SCM存储管理工具。

build automation的第一个舞台是自动build脚本。传统工具类似于Apache Maven和Apache Ant,以及最新的Gant和Gradle,能够帮助创建build脚本。在2008年,我看到许多大型公司都开始使用Maven,被Maven能在内部软件组件中为多个团队之间提供标准化开发实践,和提供显著的连贯透明的架构所吸引。这个趋势明显将继续延续到2009年。

Maven:最新的和即将发布的功能

在2008年,Maven 2的最高版本2.0.9发布,Maven 2.0.9修正了bug和添加了一些新的功能,Maven拥有更好的稳定性,并提供很好的方式使用插件来驾驭依赖管理。比如,你能够使用Checkstyle 插件来更新Checkstyle的版本。

总而言之,Maven开发中最活跃的是专注于新的重要版本的发布:Maven 2.1,这个版本将于2009年初面世。新的版本将包含很多性能改进和最优化,包括为多模块项目提供更精细的build 规则......

阅读全文(1125) | 评论:0 | 复制链接

C编译BCB中实现动态创建一个按钮对象(2013-05-07 14:51:00)

摘要:在学习编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
另外由于BCB对内存管理或与系统、硬件的冲突,你的动态创建程序也许一点错误都没有,但就是编译不了;有时也许第一次通过了,第二次一样的程序却通过不了,出现这样那样的提示,最简单的办法就是注销一下系统,再试一下,多数就能解决了

BCB中提供了大量的VCL组件,有时难免要在程序中动态创建组件,VCL是用Object Pascal写的,她与C++语言还是存在着一些不同点的,要掌握正确的方法,不防我们先来看一下栈(stack)与堆(heap)的关系。

栈(stack)是存放函数的所有动态局部变量及函数调用和返回的有关信息的一块内存。栈的内存管理严格遵循先进后出的顺序,这一点正是实现函数调用所需要的。从栈中分配内存效率特别高。数据对象使用栈中的内存(如动态局部变量)比使用堆中内存会使程序运行更快。

堆(heap)是供malloc()、calloc()、realloc()和new等函数获取内存空间的一块内存。从堆中获取内存比从栈中要慢得多,但堆的内存管理却比栈灵活得多,任何时候你都可以从堆中获取(或释放)内存,我们可以按任意顺序进行。用来存放递归数据结构的内存几乎都要从堆中获取。用来存放字符串的内存通常也从堆中获取,尤其是对那些在程序运行时可能出现的很长的字符串。

从堆中获取的内存要用free()、delete来释放,它本身不会自动释放。

C编译的程序能产生如此优质的代码、程序运行的快速与对栈的正确运用是有关的,但Object Pascal中所有的对象都只能建构于堆中,无法和C++一样,能够在栈(在函数内创建类的对象)、数据区段(在函数外创建类的对象)、堆(用new等函数来创建类的对象)三种地方建立对象,所以VCL类的对象我们只能在堆中创建。

如创建一个按钮对象,我们可以这样来创建:

TButton *BTnMy= new Tbutton(From1);

可以写成如下程式:类......

阅读全文(1171) | 评论:0 | 复制链接

Java Swing新方法来处理键盘事件(2013-04-27 10:02:00)

摘要:在学习java编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
行为是一个实现了Action接口的类。在Action接口中定义了7个方法。其中最关键的是actionPerformed()方法。这个方法描述了这个行为的具体操作过程。

在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同的处理键盘事件的方法:在Jcomponent中,定义了registerKeyboardAction方法,使用这个方法来将需要处理的键盘事件以及处理事件的行为绑定在一起。Text类中具有keymap对象,同Jcomponent中的处理方法类似,这个对象保存着需要处理的键盘事件和对应的行为。

而在jdk1.3中,使用一种新的方法来处理键盘事件,它将jdk1.2的两种方法整合在一起。不需要区分被处理的是Jcomponent还是Text类型的组件。它定义了两个新的类:InputMap和ActionMap.他们均是简单的表或映射。一个InputMap将一个Keystroke对应到一个对象,ActionMap将一个对象对应到一个行为(Action)。通常InputMap中KeyStroke所对应的对象是一个字符串,通过这个字符串可以在ActionMap中查找到相应的行为。

InputMap和ActionMap中均有put方法。InputMap的put方法可以将Keystroke对应到一个对象,而ActionMap的put方法可以将一个对象对应到一个行为。

在每一个Jcomponent组件中,会有三个缺省的InputMap和一个缺省的ActionMap.他们可以通过调用getInputMap(int condition)和getActionMap()得到。三个InputMap分别是当组件本身拥有焦点时的InputMap(WHEN_FOCUSED),当组件的祖先拥有焦点时的InputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)和组件所在的窗体具有焦点时的InputMap(WHEN_IN_FOCUSED_WINDOW)......

阅读全文(891) | 评论:0 | 复制链接

详解C语言的”endl“函数实现(2013-04-26 14:51:00)

摘要:在学习编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
首先,endl是一个操作符(Manipulators),但我们必须知道endl是一个什么类型的变量。endl是跟在”<<“运算符后面,故endl应该是一个参数。其实endl是一个函数名,它是一个"<<"运算符重载函数中的参数,参数类型为函数指针。下面我们看下内部函数实现。

1 ostream& ostream::operator << ( ostream& (*op) (ostream&)) 2 { 3 // call the function passed as parameter with this stream as the argument

4 return (*op) (*this); 5 }

1 std::ostream& std::endl (std::ostream& strm) 2 { 3 // write newline

4 strm.put('\n'); 5 // flush the output buffer

6 strm.flush(); 7 // return strm to allow chaining

8 return strm; 9 }

可以看出,运算符重载函数中的函数参数为一个函数指针,其指向一个输入输出均为ostream类引用的函数。而endl正是这样一个函数。所以我们在运行"cout<<endl;"语句时,endl是一个函数参数,类型为函数指针。然后会执行”return (*endl) (*this);“语句,即执行endl函数。endl函数输出一个换行符,并刷新输出缓冲区。

这样我们知道在标准库中endl是作为一个函数实现的,显然我们也可以直接调用这一函数。我们看下......

阅读全文(1343) | 评论:0 | 复制链接

程序中的图像复制到非java应用程序实现(2013-04-23 13:49:00)

摘要:在学习编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
Java开发图形应用程序的朋友一定遇到过如何在程序中实现复制图像的功能。在jdk1.4以前,java本身就支持将程序中文字串复制给其它的非java应用程序使用,而将程序中的图像复制到非java应用程序简直难上加难。只到jdk1.4出来,这个问题才得以解决。

一般我们开发java application界面,主要用swing图形包。几乎所有的swing控件都是由JComponent继承而来的。如果我们要取得JComponent的图像,可以用以下方式:

Rectangle rect = comp.getBounds();

BufferedImage bufImage = new BufferedImage(rect.width,

rect.height,

BufferedImage.TYPE_INT_RGB);

Graphics g = bufImage.getGraphics();

g.translate(-rect.x, -rect.y);

comp.paint(g);

这样的话,图像就保存到BufferedImage对象当中了。

现在来看如何将这个BufferedImage复制到系统clipboard中。要做复制功能,一般是继承TransferHandler类,实现Transferable接口, 这样你的复制内容才能传到系统clipboard,为此我们来写一个ImageSelection类:

/**

*

Copyright: Copyright (c) 2002

* @author Turbo Chen

* @version 1.00

阅读全文(917) | 评论:0 | 复制链接

C++的真实趋势越倾向于精英化的两个关键缺陷(2013-04-18 16:15:00)

摘要:首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
C++是一门引起无数争议的语言。

眼下最常听到的声音则是C++将趋于没落,会被某某语言取代。

我很怀疑这种论调的起点是商业宣传,C++的真实趋势应该是越来越倾向于精英化。

精英化是指在可用可不用C++的领域中,C++将逐渐退出,

而所有剩下必须用C++的领域通常都是附加值比较高,难度较高的领域,比如:操作系统,数据库,大型网站后端等。

这一过程造成的现象就是在TIOBE上,C++的份额逐步下降。

但就像经济上挤泡沫一样,这倒不是C++衰落了,而是原本人们对C++的期望过高了。

早在1995年,美国的调查机构就曾经预测:“终端用户”编程从从业人员比率上将占94%,而“基础结构”编程从业人员只占1.5%不到。

(参见《软件成本估算:COCOMOII模型方法》)

C++本来就不适合“终端用户”这种涉众很多的项目,比如物流程序,而适合对性能要求较高的基础结构项目,比如OS,大型数据库等。

(根据Google的测试,C++的performance远高于其他语言)

只是当年OO很火的时候,大家又没有什么别的选择,就一窝蜂的用,实际上很多程序确实不适合用一个没有垃圾收集的程序来写。

这里有一份统计列表,大家可以自己看看,当前C++的主战场是那里。

The Programming Languages Beacon(这个表告诉我们:IT行业的骨头是C/C++做的)

这导致的结果就是修炼C++的程序员必须往高端走,你要么找不到工作,要么就找到很好的工作。

而不像其他语言,大差不差还能混口饭吃。

这个趋势不好绝对化,但估计在未来会被强化。TIOBE上C++的份额跌得越多,这个......

阅读全文(831) | 评论:0 | 复制链接

整理C++调试常用到的四个窍门笔记(2013-04-15 10:02:00)

摘要:首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
一、C++编程-调试标记

适用预处理#define定义一个或多个调试标记,在代码中把调试部分使用#ifdef和#endif进行管理。当程序最终调试完成后,只需要使用#undef标记,调试代码就会消失。常用的调试标记为DEBUG, 语句序列:

1. #define DEBUG

2. #ifdef DEBUG

3. 调试代码

4. #endif

二、C++编程-运行期间调试标记

在程序运行期间打开和关闭调试标记。通过设置一个调试bool标记可以实现。这对命令行运行的程序更为方便。例如下面代码:

1. #include

2. #include

3. using namespace std;

4. bool debug =false;

5. int main(int argc,char*argv[])

6. {

7. for(int i=0;i

三、C++编程-把变量和表达式转换成字符串

可是使用字符串运算符来实现转换输出定义

1. #define PR(x) cout<<#x”=”<

四、C++编程-C语言的assert()

该宏在中,,当使用assert时候,给他个参数,即一个判读为真的表达式。预处理器产生测试该断言的代码,如果断言不为真,则发出一个错误信息告诉断言是什么以及它失败一会,程序会终止。

1. #include< assert>

2. using namsapce st......

阅读全文(1008) | 评论:0 | 复制链接

谈谈IOS开发测试软件兼容性(2013-04-12 10:28:00)

摘要:首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
知道你之前有没有想象过,iOS 开发者在创造或者更新应用程序的时候,是怎样测试这个程序对于不同 iOS 版本的兼容性的,除了 iOS 系统,许多 iOS 开发者还会将程序推广到其他平台例如 WP7 或者 Android,那么需要测试的就更多了。下图就是开发者 David Smith 的测试设备,没错,一堆设备:四个 iPad,四个 iPod touch,四个 iPhone,用来测试不同种类 iOS 系统的兼容性,此外还有 Windows Phone 和 Kindle 等等。

这样 David 就可以从 iOS 3.1 一直测试到 iOS 5 了。其中 iOS 3.X 系统在测试的时候是相当有帮助的,因为 iOS 3.X 本质上是不可能复制出问题的。

很显然 David 是一个非常谨慎的开发者,而并不是所有开发者都像 David 一样。老设备和老系统慢慢会被淘汰掉,支持的程序越来越少这些都无可避免,相信许多使用老设备的朋友都深有体会。

这里要补充一点的是,苹果对 Mac 开发者有特别的待遇,开发者可以通过预约,在美国加州总部测试 Mac 与软件的兼容性,如果开发者离加州比较远,那么这个选择可不是什么明智之举。
从基础的学习到后面应用提高都非常的系统,无论你是本专业的还是跨专业的,都能有所收获,参加4个月的达内时光转眼已逝,伴随着喜悦,广州达内给你一个新的平台,一个崭新的开始。
(本文由广州达内为你分享;)
......

阅读全文(998) | 评论:0 | 复制链接

列举JAVA开发中需要注意的事项,你都知道吗?(2013-04-12 10:16:00)

摘要:首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;

java的类型自动提升规则

1、所有byte,short,char型的值将被提升到int型;

2、如果一个操作数为long型,计算结果就是long型;

3、如果一个操作数是float型,计算结果就是float型;

4、如果一个操作数是double型,计算结果就是double型。

我们不能把任何方法体内的变量声明为静态,例如下面这样是不行的

fun{

static int i = 0;

}

1、在静态的方法里只能直接调用同类中其他静态成员(包括变量和方法),而不能直接访问类中的非静态成员,这是因为,对于非静态成员,先要创建类的实例对象后才可使用,而静态成员在使用前是不需要实例化的;

2、静态方法不能以任何形式引用this或super关键字;

3、main()方法是静态的,因此jvm在执行main方法时,不创建main方法所在的类的实例对象,因此在main方法中,不能直接访问该类中的非静态成员。

1.final标记的类不能被继承;

2.其标记的方法不能被子类重写;

3.其标记的变量即变成常量,只能赋值一次,但这个常量也只能在这个类内部使用,不能在类的外部使用,且赋值只能在声明的时候显式赋值或在构造方法中赋值,构造方法里不含返回值的概念是不同于“void”的,对于"public void example()"这样的写法就不再是构造方法了,而变成了普通方法,很多人都会犯这种错,在定义构造方法时加了void,结果这个方法就不再自动调用了。

1.java只支持单继承,不允许单继承,但一个类可以被多个类继承;

2.可以有多重继承,即一个类可以继承某个类......

阅读全文(1239) | 评论:0 | 复制链接

在阐述Java程序员应当学习BlazeDS的几条理由(2013-04-11 13:57:00)

摘要:首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
在阐述Java程序员应当学习BlazeDS的几条理由时,我以一个假想的苏打分派系统来展示如何让已有的Java程序转变为RIA应用。通过这个例子,我同时还会讲解到BlazeDS在已有Java应用或新建Java应用中的多种不同用法。

开源

Flex软件开发工具箱(SDK)的核心是个开源框架,专门用来开发、维护那些在不同浏览器、不同操作系统下界面都相同的RIA应用。Flex发布采用的是Mozilla公共许可证(MozillaPublicLicense)。编译后的Flex应用在AdobeFlash平台下运行。

BlazeDS是连接Flex和Java的索桥,是项针对远程调用和消息传递的开源技术。在Java应用服务器上,它以servlet的形式存在,因此可以在任何标准Java网络应用中运用它。BlazeDS以LGPL(LesserGNUPublicLicense)公共许可证书发布。在发布BlazeDS的同时,Adobe还公布了AMF(ActionScriptMessageFormat)规格说明,BlazeDS、Java和Flex客户端间以这种简洁的二进制格式实现通信。

完善的社区支持

Flex社区非常活跃,社区贡献了大量项目。Flex.org,这个配以社区新闻的Adobe站点几乎每天都有新的社区贡献;Yahoo!上的Flex用户组的成员也已经超过了11000' ;&,"vIE' ;&,"GoogleCode上的Flexlib项目,已经提交了大量的开源UI组件。Swiz和Mate项目贡献了优化事件处理的框架;还有GorillaLogic贡献了自动化UI测试的FlexMonkeym项目。

带来广阔的就业前景

据Adobe的Flex“传道士”——JamesWard看来,Flex高级开发员的市场需求非常大,学习Flex能让你拥有极具市场竞争力的开发技能。

更高的业务效益回报

阅读全文(1089) | 评论:2 | 复制链接