fkjava

BlogJava 首页 新随笔 联系 聚合 管理
  49 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

2012年9月14日 #

 

 

一般默认情况下,Eclipse的代码提示功能是比MicrosoftVisualStudio的差很多的,主要是Eclipse本身有很多选项是默认关闭的,要开发者自己去手动配置。如果开发者不清楚的话,就不知道Eclipse的代码提示功能一样能像MicrosoftVisualStudio的代码提示功能一样强大。

先举个简单的例子说明问题所在,例如在Eclipse,代码里面,打个foreachswitch等这些,是无法得到代码提示的,其他的就更不用说了,而在MicrosoftVisualStudio里面是得到非常友好的代码提示的。实际上,Eclipse代码里面的代码提示功能默认的一般是点“.”,一般是有了点“.”才会有代码提示。

 

原理:“Auto Activation triggers for java”这个选项就是指触发代码提示的的选项,把“.”改成“.abcdefghijklmnopqrstuvwxyz(,”的意思,就是指遇到26个字母和.,(这些符号就触发代码提示功能了。增强Eclipse的代码提示功能,具体怎么样来配置?下面开始说步骤:

 

1.打开Eclipse,然后“window”→“Preferences

2.选择“java”,展开,“Editor”,选择“Content Assist”。

3.选择“Content Assist”,然后看到右边,右边的“Auto-Activation”下面的“Auto Activation triggers for java”这个选项。其实就是指触发代码提示的就是“.”这个符号.

4.Auto Activation triggers for java”这个选项,在“.”后加abc字母,方便后面的查找修改。然后“apply”,点击“OK”。

5.然后,“File”→“Export”,在弹出的窗口中选择“Perferences”,点击“下一步”。

6.选择导出文件路径,本人导出到桌面,输入“test”作为文件名,点击“保存”。

7.在桌面找到刚在保存的文件“test.epf,右键选择“用记事本打开”。

8.可以看到很多配置Eclipse的信息。

9.按“ctrl+F”快捷键,输入“.abc”,点击“查找下一个”。

10.查找到“.abc”的配置信息.

11.把“.abc”改成“.abcdefghijklmnopqrstuvwxyz(,”,保存,关闭“test.epf”。

12.回到Eclipse界面,“File”→“Import”,在弹出的窗口中选择“Perferences”,点击“下一步”,选择刚在已经修改的“test.epf”文件,点击“打开”,点击“Finish”。该步骤和上面的导出步骤类似。

13.最后当然是进行代码测试了。随便新建一个工程,新建一个类。在代码输入switchforeach等进行测试。你立即会发现,果然出了提示,而且无论是敲哪个字母都会有很多相关的提示了,很流畅很方便。

 

总结:“Auto Activation triggers for java”这个选项就是指触发代码提示的的选项,把“.”改成“.abcdefghijklmnopqrstuvwxyz(,”的意思,就是指遇到26个字母和.,(这些符号就触发代码提示功能了。顺便说一下,修改类名,接口名等以不同颜色高亮的,可以这样配置在“java”→“enditor”→“syntac”,右边展开“java”→“classes”,勾上“Enable”这个选项,选择自己喜欢的颜色即可。当然还有其他相关的颜色配置。具体就不说啦。其实,在“Preferences”这个东西,有很多可以配置的东西,使得Eclipse优化的,具体的就要各个人根据自己个人喜好去配置

您正在看的文章来自疯狂软件教育中心 www.fkjava.org

信息咨询:Q564205990               星老师

posted @ 2012-09-24 15:15 疯狂软件 阅读(366) | 评论 (0)编辑 收藏

 

首先,对编码知识进行简要的说明,请务必理解后再看下面的代码。发送中文字符请求时,如果使用get方式,运行正常;而使用post方法则会出现乱码。这是由于异步对象XMLHttpRequest在处理返回的responseText的时候,是按UTF-8编码进行解码的。

如果你原来的网页编码是gb2312的话,当然会发生编码的冲突了;如果你原来的网页编码是utf-8,那么就不会出现中文乱码的问题了。

出现了中文乱码该怎么办呢?通常的解决办法是用escape()对发送的数据进行编码,然后在返回的responseText上再用unescape()进行解码。然而在JavaScript编程中通常不推荐使用escape()unescape(),而推荐使用encodeURI()decodeURI()。请看下面的“表单验证实例”,或许对你学习编码知识有一定的帮助。

 

第一、jQueryload(url,[data],[callback])方法

 

语法说明:url为异步请求的地址,data用来向服务器传送请求数据,为可选参数。一旦data参数启用,整个请求过程将以post的方式进行,否则默认为get方式。如果希望在get方式下也传递数据,可以在url地址后面用类似“dataname1=data1&dataName2=data2”的方法。

callbackAjax加载成功后运行的回调函数。另外使用load()方法返回的数据,不再需要考虑是文本还是XMLjQuery都会自动进行处理。好了,下面马上使用load()方法实现“自动表单验证”实例。首先是,html框架,5个例子都是一样的,如下:

1. <form>  

2. 用户昵称:<input type="text" onblur="startCheck(this)" name="User" id="User"><span id="UserResult"></span><br />  

3. 输入密码:<input type="password" name="passwd1"><br />  

4. 确认密码:</td><td><input type="password" name="passwd2"><br />  

5. <input type="submit" value="注册" class="button">  

6. <input type="reset" value="重置" class="button">  

7. </form> 

必要说明:

1onblur="startCheck(this)" 这是JavaScript代码(简称js) ,意思是text文本框失去焦点时触发自定义函数startCheck(),this是指代text文本框的值。

2<span id="UserResult"></span>用来存放异步对象返回的结果。

1. jQuery代码如下: 

2. 

3. <script language="javascript" src="jquery.min.js"></script>  

4. <script language="javascript">  

5. function startCheck(oInput){  

6.     //首先判断是否有输入,没有输入直接返回,并提示  

7.     if(!oInput.value){  

8.         oInput.focus(); //聚焦到用户名的输入框  

9.         document.getElementById("UserResult").innerHTML = "User cannot be empty.";  

10.         return;  

11.     }  

12.     oInput=$.trim(oInput.value); //使用jQuery$.trim()方法过滤左右空格  

13.     var sUrl = "action.asp?user=" + oInput;  

14.     sUrl=encodeURI(sUrl); //使用encodeURI()编码,解决中文乱码问题  

15.     $("#UserResult").load(sUrl,function(data){  

16.         $("#UserResult").html(decodeURI(data)); //使用decodeURI()解码  

17.         }  

18.     );  

19. }  

20. </script> 

必要说明:

1、使用jQuery时,都必须加载jquery.min.js文件,可以到http://jquery.com/官网下载最新的版本。

2、判断是否有输入时,用的全是JavaScript语法。

3、对传递给“处理页”的参数进行encodeURI编码,以解决中文乱码问题。

4load()中的function函数是为了对返回结果进行decodeURI解码,以解决中文乱码问题。

5、对$.trim()$("#UserResult")htmljQuery语法不理解的,可以参考jQuery中文手册。本站提供下载。

1. action.asp处理页代码如下: 

2. 

3. <%  

4. if(Request("user")="eko") then  

5. Response.Write "Sorry, " & Request("user") & " already exists."  

6. else  

7. Response.Write Request("user")&" is ok."  

8. end if  

9. %>

必要说明:

1action.asp处理页的编码是GB2312,如果把"Sorry..already exists..is ik"等英文改为中文,请看下面的说明。

2、使用post方法会出现乱码,这是由于异步对象XMLHttpRequest在处理返回的responseText的时候,是按UTF-8编码进行解码的。

3、所以post方式的话,必须把action.asp页另存为时,第三项的编码由 ANST 改为 UTF-8 (请务必记住!!)

 

第二、使用$.get(url,[data],[callback])$.post(url,[data],[callback])方法

 

语法说明:尽管load()方法可以实现getpost两种方式,但很多时候开发者还是希望能够指定发送方式,并且处理服务器返回的值。jQuery提供了$.get()$.post()两种方法,分别针对这两种请求方式。

其中,url为请求地址,data为请求数据的列表,是可选参数,callback为请求成功后的回调函数,该函数接受两个参数,第一个参数为服务器返回的数据,第二个参数为服务器的状态,是可选参数。$.post()中的type为请求数据的类型,可以是htmlxmljson等。 “可自动校验表单实例”的jQuery代码如下,html如上所述。

1. <script language="javascript" src="jquery.min.js"></script>  

2. <script language="javascript">  

3. function createQueryString(){  

4.     var username=$("#User").val();  

5.     //组合成对象的形式  

6.     var queryString={user:username};  

7.     return queryString;  

8.     }  

9. function startCheck(oInput){  

10.     //首先判断是否有输入,没有输入直接返回,并提示  

11.     if(!oInput.value){  

12.         oInput.focus(); //聚焦到用户名的输入框  

13.         document.getElementById("UserResult").innerHTML = "User cannot be empty.";  

14.         return;  

15.     }  

16.     oInput=$.trim(oInput.value); //使用jQuery$.trim()方法过滤左右空格  

17.     $.get("action.asp",createQueryString(),  

18.         function(data){  

19.             $("#UserResult").html(data);  

20.     });  

21. }  

22. </script>

必要说明:

1、对$.trim()$("#UserResult")htmlval()jQuery语法不理解的,可以参考jQuery中文手册。本站提供下载。

2、自定义函数createQueryString(),是对传入“处理页”的参数,进行处理。一种常规的方法。

3、因为是以get方式处理,说明这里不需要进行编码和解码。下面以post方式处理,则需要编码和解码了,代码如下

1. function createQueryString(){  

2.     //使用encodeURI()编码解决中文乱码问题  

3.     var username=encodeURI($("#User").val());  

4.     //组合成对象的形式  

5.     var queryString={user:username};  

6.     return queryString;  

7.     }  

8. function startCheck(oInput){  

9.     //首先判断是否有输入,没有输入直接返回,并提示  

10.     if(!oInput.value){  

11.         oInput.focus(); //聚焦到用户名的输入框  

12.         document.getElementById("UserResult").innerHTML = "User cannot be empty.";  

13.         return;  

14.     }  

15.     oInput=$.trim(oInput.value); //使用jQuery$.trim()方法过滤左右空格  

16.     $.post("action.asp",createQueryString(),  

17.         function(data){  

18.             $("#UserResult").html(decodeURI(data));  

19.     });  

20. }  

21. </script>

 

第三、使用$.ajax()方法

 

语法说明:尽管load()$.get()$.post()非常方便实用,但却不能控制错误和很多交互的细节,可以说这3种方法对Ajax的可控性较差。jQuery提供了一个强大的函数$.ajax(options)来设置Ajax访问服务器的各个细节,它的语法十分简单,就是设置Ajax的各个选项,然后指定相应的值。“可自动校验表单”实例代码如下:

1. <script language="javascript" src="jquery.min.js"></script>  

2. <script language="javascript">  

3. function createQueryString(){  

4.    //使用encodeURI()编码解决中文乱码问题  

5.     var username=encodeURI($("#User").val());  

6.     //组合成对象的形式  

7.     var queryString={user:username};  

8.     return queryString;  

9. }  

10. function startCheck(oInput){  

11.     //首先判断是否有输入,没有输入直接返回,并提示  

12.     if(!oInput.value){  

13.     oInput.focus(); //聚焦到用户名的输入框  

14.     document.getElementById("UserResult").innerHTML = "User cannot be empty.";  

15.     return;  

16.     }  

17.     oInput=$.trim(oInput.value); //使用jQuery$.trim()方法过滤左右空格  

18.     $.ajax({  

19.         type: "GET",  

20.         url: "action.asp",  

21.         data: createQueryString(),  

22.         success: function(data){  

23.             $("#UserResult").html(decodeURI(data));  

24.         }  

25.     });  

26. }  

27. </script>

必要说明:

1、代码基本同上,只是$.ajax(options)稍有不同,对于其参数不理解可以参考jQuery中文手册。

2、给个建议,无论是get方式还是post方式,都习惯进行编码,以防出现中文乱码的问题。

3、再强调一下,无论使用哪种程序,如果遇到问题了,都可以参考相关的手册说明,这是建站所必需的。

上面的实例使用了jQueryload()方法、$.get()$.post()$.ajax()4种方法,都要考虑中文乱码的问题,下面推荐一个方法,进一步简化jQuery代码,呵呵。

 

第四、表单插件

 

表单插件(Form Plugin)是一款功能非常强大的插件,在jQuery官方网站上目前为4星级推荐,下载后为jquery.form.js文件。该插件提供获取表单数据、重置表单项目、使用Ajax提交数据等一系列功能,深受开发人员的喜爱。使用表单插件,再次重写“表单校验实例”,完整代码如下:

1. <form id="myform" action="action.asp">  

2. 用户昵称:<input type="text" onblur="startCheck(this)" name="User" id="User"><input type="button" value=" " class="button"><span id="UserResult"></span><br />  

3. 输入密码:<input type="password" name="passwd1"><br />  

4. 确认密码:</td><td><input type="password" name="passwd2"><br /><br />  

5. <input type="submit" value="注册" class="button"><input type="reset" value="重置" class="button">  

6. </form>

HTML框架加了一个“检查”的按钮(使用手动校验的方法)jQuery如下:

1. <script language="javascript" src="jquery.min.js"></script>  

2. <script language="javascript" src="jquery.form.js"></script>  

3. <script language="javascript">  

4. function startCheck(oInput){  

5.     //首先判断是否有输入,没有输入直接返回,并提示  

6.     if(!oInput.value){  

7.         oInput.focus(); //聚焦到用户名的输入框  

8.         document.getElementById("UserResult").innerHTML = "User cannot be empty.";  

9.         return;  

10.     }  

11. }  

12. $(function(){  

13.     $("input[type=button]").click(function(){  

14.         var options={  

15.             target: "#UserResult"  

16.         };  

17.         //表单的Ajax  

18.         $("#myform").ajaxSubmit(options);  

19.     });  

20. });  

21. </script>

必要说明:

 

1、使用表单插件,必须加载jquery.form.js文件。

 

2、按Ajax方式提交数据,可以使用表单插件的ajaxSubmit(options)来按照Ajax的方式直接提交表单或者使用ajaxform(options)方法,通常在页面加载完成时执行,用来将表单统一Ajax化,并且提交表单依然使用传统的submit按钮,只不过进行的是Ajax提交。其中参数options$.ajax(options)的参数基本相同。

   您正在看的文章来自疯狂软件教育中心 www.fkjava.org

   信息咨询:Q564205990               星老师

posted @ 2012-09-22 11:22 疯狂软件 阅读(986) | 评论 (0)编辑 收藏

Java中常见的违规编码

 

 一、Eclipse编译器提供源代码格式输入

    Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码)。你可以使用下面的这些快捷键进行操作。

    Ctrl + Shift + F--源代码格式

    Ctrl + Shift + O--组织输入并删除未使用的代码

    代替手动调用这两个函数,只需根据Eclipse自动格式和自动组织选项,可以随时保存文件。

    操作步骤,在Eclipse中进入Window -> Preferences -> Java -> Editor -> Save Actions,然后以选定的方式保存,最后检查Format source code + Organize imports.

    二、避免多个返回(退出点)

    依照你的方法,确保只有一个退出点。不要在同一个地方或多个地方使用返回。比如,下面的代码,NOT RECOMMENDED(不建议),这是因为有多个退出点(返回语句)。

    1.private boolean isEligibleint age{

    2. ifage > 18{

    3.    return true;

    4. }else{

    5.    return false;

    6. }

    7.}

    下面的代码有所提升,这是更高版本的。

    1.private boolean isEligibleint age{

    2. boolean result;

    3. ifage > 18{

    4.    result = true;

    5. }else{

    6.    result = false;

   7. }

    8. return result;

    9.}

三、简化if-else

    我写了几个实用的方法作为参考,检查语句条件并且基于该条件返回值。比如,考虑到isEligible方法,正如你之前所看到的:

    1.private boolean isEligibleint age{

    2. boolean result;

    3. ifage > 18{

    4.    result = true;

    5. }else{

    6.    result = false;

    7. }

    8. return result;

    9.}

    整个方法以一个单一的return语句重新编写:

    1.private boolean isEligibleint age{

    2.3.return age > 18;

    4.5.}

    四、不要给Boolean, Integer或者String创建新的实例

    避免给Boolean,Integer,String创建新的实例。比如,使用new Booleantrue),Boolean,valueOftrue)。修改后的语句与之前的效果基本相同,除了在性能上有所提升。

    五、使用大括号模块语句

    永远别忘了使用大括号模块语句比如ifforwhile.这样做的好处是当你在修改模块级语句时减少了模糊代码并且避免引进bug的机会。

    不建议:

    1.ifage > 18

    2. result = true;

    3.else

    4. result = false;

    建议:

    1.ifage > 18{

    2. result = true;

    3.}else{

    4. result = false;

    5.}

    六、以final类型标记方法参数,任何时候都适用

    请记住,以final类型标记方法参数,任何时候都适用。这样做的好处在于当你不小心修改参数值时,编译器会给你警告,同时它还能以更好的方式优化编译器代码字节。

    建议:

    private boolean isEligiblefinal int age{ }

    七、在UPPERCASE中命名public static final字段

    UPPERCASE中命名public static final字段(通常也被称之为常量)。这个可以让你轻松区分常量字段和局部变量之间的不同。

    不建议:

    public static final String testAccountNo = "12345678";

    建议:

    public static final String TEST_ACCOUNT_NO = "12345678";,

    八、组合成单一的if语句

    在尽可能多的情况下,把多个if语句组合成单一的if语句,比如下面的代码:

    1.ifage > 18{

    2. if voted == false{

    3.    // eligible to vote.

    4. }

    5.}

    合并成单一的if语句:

    1.ifage > 18 && !voted{

    2. // eligible to vote

    3.}

    九、Switch应该有default

    始终给Switch语句添加default.

    十、使用常量来避免重复定义相同的字符串值

    如果你在多个地方必须使用字符串,那么使用常量来避免重复定义拥有相同值的字符串。

    比如,看下面的代码:

    1.private void someMethod(){

    2. logger.log"My Application" + e);

    3. …

    4. …

    5. logger.log"My Application" + f);

    6.}

    string literal"我的应用"可以作为常量并且能在代码中使用。

    1.public static final String MY_APP = "My Application";

    2.

    3.private void someMethod(){

    4. logger.logMY_APP + e);

    5. …

    6. …

    7. logger.logMY_APP + f);

8.}

    您正在看的文章来自疯狂软件教育中心 www.fkjava.org

    信息咨询:Q564205990               星老师

posted @ 2012-09-21 14:45 疯狂软件 阅读(182) | 评论 (0)编辑 收藏

 

2012年中国移动互联网大会上,欧朋浏览器总经理宋麟在名为“移动互联网的未来”的主题演讲中表示,新一代网络标准HTML5对于移动浏览器性能和用户体验的提升有重要意义,虽然目前国内HTML5存在一定虚火,但最晚到明年年中HTML5技术会趋向成熟。伴随着HTML5标准的普及,或将带来整个浏览器行业的重新洗牌。

  “HTML5作为一个技术而言,是最符合互联网精神的一项技术。”宋麟说。作为一个开放的网络标准,HTML5具有跨平台、多设备、及时更新等多项优势,在统一的HTML5标准下,移动浏览器可以在不同平台、不同设备上实现一致的用户体验。对开发者和用户而言,HTML5都能带来极大便利;同时,HTML5的开放性使其不会被任何一家企业垄断,有利于促进整个行业的良性发展。

  虽然HTML5目前存在性能不够完善、盈利模式不清晰等许多争议,但宋麟认为HTML5与移动互联网的未来密切相关,伴随HTML5技术标准的成熟,移动浏览器将更好地承担平台的功能。

  从去年年底到今年年中,国内主流移动浏览器厂商先后推出支持HTML5标准的产品,并展开在HTML5跑分上的比拼。“现阶段HTML5在国内有点被过度吹捧。”宋麟认为,“主要表现在目前HTML5技术无论是用户体验还是性能支持上都还不是十分成熟。”作为HTML5标准的发明人,Opera欧朋与全球其他领先企业都把HTML5研发作为现阶段的重点,预计到明年年中,HTML5标准将得到初步的普及。

谈及HTML5标准普及对移动互联网市场竞争带来的影响,宋麟认为HTML5既是全行业的机会,也会对现有市场格局带来冲击。“变局中有人会跑赢,也会有被淘汰。”宋麟表示。         您正在看的文章来自疯狂软件教育中心 www.fkjava.org

信息咨询:Q564205990              星老师

posted @ 2012-09-20 11:26 疯狂软件 阅读(168) | 评论 (0)编辑 收藏

 最近,经过几次课,算是复习,也算是学习吧。修补了一些,以前自学时的漏洞,熟悉了一些关于JAVA的基础知识。以下是,这几天的一个简单的总结。

1.Java的环境JDK(Java development Kit)

Sun公司http//www.oracle.com的网页上有各种版本的Jdk,供用户下载使用。安装jdk后,一定要修改环境变量。就实际上而言,说修改不如说是添加环境变量。最后进入cmd界面验证JDK首安装成功!若安装不成功,oracle公司的网页上也有一些列的解决方案。

2.Java的类名

Java是大小写敏感的一种语言,只能以字母开头,可以含有下划线和数字,不能使用关键字和保留字。

Java 关键字列表 (依字母排序 51):

abstract, assert,boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum,extends, final, finally, float, for, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while

Java 保留字列表 (依字母排序 14) : Java保留字是指现有Java版本尚未使用 但以后版本可能会作为关键字使用。

byValue, cast, false, future, generic, inner, operator, outer, rest, true, var goto const,null

类名在使用中习惯将每个单词首字母大写。且于文件名相同。

3.Java的数据类型

一般而言,Java的数据类型可分为基本类型和引用类型

基本类型:

boolean 布尔值,作二元判断 true, false

byte 8位有符号整数 最小值-128,最大值127

short 16位有符号整数 最小值-32768,最大值32767

int 32位有符号整数 最小值-2147483648,最大值2147483647

long 64位有符号整数 最小值-9223372036854775808,最大值 9223372036854775807

float 32位浮点数 1.4E-45~3.4028235E38

double 64位浮点数 4.9E-324~1.7976931348623157E308

char 16Unicode字符 不适用

基本类型(Primitive Types)也称作内置类型,是其他类型的基础。所有的其他类型(包括Java核心库和用户自定义类型)都是通过基本类型扩展而来的。这些类型是我们描述对象最基本的方式。比如:判断是否使用boolean;衡量大小、长度使用各种整型(包括short, int, long)和浮点数(floatdouble);表达字符使用char;而处理二进制数据块使用byte

引用类型

有数组和对象,究其根本数组也是对象

最后不得不提一下String

String s="abc";//s不为对象

String s=new String("abc");//s为一个对象

4.对象与类

类:类似于生物界的门纲目科属种的分类,在Java语言中,只有类这个概念,而可以通过父类和子类的方式来表达这种层次家哪的关系。比如,我们可以说食物是一个类,而面食就是一个子类。

对象:就像是一个类的一个实例,比如我们说电脑,这就是一个类,泛指电脑这类东西,而我们说,这台电脑,这就是一个实例了,就是一个对象。当然,类也可以是看不见摸不着的东西,比如说语言就是一个类,而中国普通话就是一个对象。

类名 对象名=new 类名();//实例化对象的格式

总之,类相当于一个概念,而类就是这个概念下的一个实体。

5.参数传递

Java中参数传递的方式和C中一样,可分为两类:值传递和引用传递

值传递

int a=10;//定义一个变量

fun b=new fun();//假设已有一个类为fun,实例化一个对象b;

b.function(a);//a的值传递给b的方法

值传递中,只会传递原有变量的值,传递之后,会有一块新的你内存存储变量值,其后的一切动作均与原来变量无关。

引用传递

fun f1=new fun();//实例化一个对象b

fun f2=new fun();//实例化一个对象b

f1=f2;//f2的值赋给f1

引用传递中f1f2相当于C中指针,分别指向一个对象的首地址。f1=f2则是将f2指向的地址赋给f1。传递了一个地址。

6.构造方法

构造方法是在实例化对象时,由系统自动运行的函数,且只运行一次。每一个对象均有其构造方法,系统自动为类配有一个无参的构造方法,若程序员自己写有构造方法,则系统的构造方法失效。

7.方法的重载

public class student{

public void student(){};

public void student(Book book){};

public void student(Book book,Computer computer){};

}

这里有三个方法的名字相同,可是他们却可以执行不用的功能,只要参数的个数,类型,次序不同就可以写出一个新的名字相同的方法。这就是一种重载,当然前面所提到的构造方法,也可以重载。

8.this关键字

public class student{

String name;

public void setName(String name){

this.name=name;

}

}

这里的this关键字就指向类的头。不同的类的this关键字指向自身的头。

   您正在看的文章来自疯狂软件教育中心 www.fkjava.org

   信息咨询:Q   564205990           星老师

posted @ 2012-09-18 15:49 疯狂软件 阅读(196) | 评论 (0)编辑 收藏

 

package sy;

 

import java.awt.Color;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

 

import javax.imageio.ImageIO;

import javax.swing.BorderFactory;

import javax.swing.JPanel;

 

public class PanelTest extends JPanel {

public BufferedImage image;

   @Override

protected void paintComponent(Graphics g) {

// TODO Auto-generated method stub

super.paintComponent(g);

BufferedImage subImage=this.image.getSubimage(30, 30, 100, 100);

g.drawImage(subImage,100,100,100,100,null);

int color_point=subImage.getRGB(24, 4);

        Color color=new Color(color_point);

        System.out.println(color_point);

        System.out.print(color.getGreen());

}

   public PanelTest()

   {

   try {

this.image=ImageIO.read(new File("D:/black.jpg"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

   this.setSize(300, 200);

   this.setLocation(100, 100);

   this.setBorder(BorderFactory.createTitledBorder("title"));

 // repaint();

   }

}

posted @ 2012-09-17 17:19 疯狂软件 阅读(1776) | 评论 (0)编辑 收藏

 

   Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Command(命令模式)模式是比较常用的一个模式.

   Command命令模式: Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。将一个请求封装为一个对象,从而使你不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

   优点: 解耦了调用者和接受者之间联系。调用者调用一个操作,接受者接受请求执行相应的动作,因为使用Command模式解耦,调用者无需知道接受者任何接口。

   缺点: 造成出现过多的具体命令类

 

   在此写了7java类来描述说明Command设计模式的实现方式;

 1 Control.java        命令控制者对象类 (命令控制器在这里至关重要,相当于遥控器的作用)

 2 Tv.java             命令接收者对象类

 3 Command.java        命令接口类

 4 CommandChannel.java 频道切换命令类

 5 CommandOff.java     关机命令类

 6 CommandOn.java      开机命令类

 7 CommandTest.java    带有main方法的测试类(命令发送者)

 

===============   1 Control.java

package command;

//命令控制者

public class Control {

 private Command onCommand, offCommand, changeChannel;

 public Control(Command on, Command off, Command channel) {

    onCommand = on;

    offCommand = off;

    changeChannel = channel;

 }

 public void turnOn() {

    onCommand.execute();

 }

 public void turnOff() {

    offCommand.execute();

 }

 public void changeChannel() {

    changeChannel.execute();

 }

}

===============   1 end

 

===============   2 Tv.java

package command;

//命令接收者

public class Tv {

 public int currentChannel = 0;

 public void turnOn() {

    System.out.println("The televisino is on.");

 }

 public void turnOff() {

    System.out.println("The television is off.");

 }

 public void changeChannel(int channel) {

    this.currentChannel = channel;

    System.out.println("Now TV channel is " + channel);

 }

}

===============   2 end

 

===============   3 Command.java

package command;

//命令接口

public interface Command {

 void execute();

}

===============   3 end

 

===============   4 CommandChannel.java

package command;

//频道切换命令

public class CommandChannel implements Command {

 private Tv myTv;

 private int channel;

 public CommandChannel(Tv tv, int channel) {

    myTv = tv;

    this.channel = channel;

 }

 public void execute() {

    myTv.changeChannel(channel);

 }

}

===============   4 end

 

===============   5 CommandOff.java

package command;

//关机命令

public class CommandOff implements Command {

 private Tv myTv;

 public CommandOff(Tv tv) {

    myTv = tv;

 }

 public void execute() {

    myTv.turnOff();

 }

}

===============   5 end

 

===============   6 CommandOn.java

package command;

//开机命令

public class CommandOn implements Command {

 private Tv myTv;

 public CommandOn(Tv tv) {

    myTv = tv;

 }

 public void execute() {

    myTv.turnOn();

 }

}

===============   6 end

 

===============   7 CommandTest.java

package command;

//命令发送者

public class CommandTest{

 public static void main(String[] args){

    //命令接收者

    Tv myTv = new Tv();

    //开机命令

    CommandOn on = new CommandOn(myTv);

    //关机命令

    CommandOff off = new CommandOff(myTv);

    //频道切换命令

    CommandChannel channel = new CommandChannel(myTv, 2);

    //命令控制对象

    Control control = new Control( on, off, channel);

    //开机

    control.turnOn();

    //切换频道

    control.changeChannel();

    //关机

    control.turnOff();

 }

}

===============   7 end

 

 Command模式通常可应用到以下场景:

 1 Multi-level undo(多级undo操作)

    如果系统需要实现多级回退操作,这时如果所有用户的操作都以command对象的形式实现,系统可以简

    单地用stack来保存最近执行的命令,如果用户需要执行undo操作,系统只需简单地popup一个最近的

    command对象然后执行它的undo()方法既可。

 

 2 Transactional behavior(原子事务行为)

    借助command模式,可以简单地实现一个具有原子事务的行为。当一个事务失败时,往往需要回退到执

    行前的状态,可以借助command对象保存这种状态,简单地处理回退操作。

 

 3 Progress bars(状态条)

    假如系统需要按顺序执行一系列的命令操作,如果每个command对象都提供一个

    getEstimatedDuration()方法,那么系统可以简单地评估执行状态并显示出合适的状态条。

 

 4 Wizards(导航)

    通常一个使用多个wizard页面来共同完成一个简单动作。一个自然的方法是使用一个command对象来封

    wizard过程,该command对象在第一个wizard页面显示时被创建,每个wizard页面接收用户输入并设

    置到该command对象中,当最后一个wizard页面用户按下“Finish”按钮时,可以简单地触发一个事件

    调用execute()方法执行整个动作。通过这种方法,command类不包含任何跟用户界面有关的代码,可以

    分离用户界面与具体的处理逻辑。

 

 5 GUI buttons and menu itemsGUI按钮与菜单条等等)

    Swing系统里,用户可以通过工具条按钮,菜单按钮执行命令,可以用command对象来封装命令的执行。

 

 6 Thread pools(线程池)

    通常一个典型的线程池实现类可能有一个名为addTask()public方法,用来添加一项工作任务到任务

    队列中。该任务队列中的所有任务可以用command对象来封装,通常这些command对象会实现一个通用的

    接口比如java.lang.Runnable

 

 7 Macro recording(宏纪录)

    可以用command对象来封装用户的一个操作,这样系统可以简单通过队列保存一系列的command对象的状

    态就可以记录用户的连续操作。这样通过执行队列中的command对象,就可以完成"Play back"操作了。

 

 8 Networking

    通过网络发送command命令到其他机器上运行。

 

 9 Parallel Processing(并发处理)

    当一个调用共享某个资源并被多个线程并发处理时。

    您正在看的文章来自疯狂软件教育中心 www.fkjava.org

    信息咨询:Q564205990             星老师

posted @ 2012-09-16 17:36 疯狂软件 阅读(458) | 评论 (0)编辑 收藏

 

 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。

  一、读取xml配置文件

  ()新建一个java bean

  package chb.demo.vo;

  public class HelloBean {

  private String helloWorld;

  public String getHelloWorld() {

  return helloWorld;

  }

  public void setHelloWorld(String helloWorld) {

  this.helloWorld = helloWorld;

  }

  }

  ()构造一个配置文件

  

  

  

  

  

  Hello!chb!

  

  

  

  ()读取xml文件

  1.利用ClassPathXmlApplicationContext

  ApplicationContext context = new ClassPathXmlApplicationContext("beanConfig.xml");

  HelloBean helloBean = (HelloBean)context.getBean("helloBean");

  System.out.println(helloBean.getHelloWorld());

  2.利用FileSystemResource读取

  Resource rs = new FileSystemResource("D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/beanConfig.xml");

  BeanFactory factory = new XmlBeanFactory(rs);

  HelloBean helloBean = (HelloBean)factory.getBean("helloBean");

  System.out.println(helloBean.getHelloWorld());

  值得注意的是:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常

  二、读取properties配置文件

  这里介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取

  ()利用spring读取properties 文件

  我们还利用上面的HelloBean.java文件,构造如下beanConfig.properties文件:

  helloBean.class=chb.demo.vo.HelloBean

  helloBean.helloWorld=Hello!chb!

  属性文件中的"helloBean"名称即是Bean的别名设定,.class用于指定类来源。

  然后利用org.springframework.beans.factory.support.PropertiesBeanDefinitionReader来读取属性文件

  BeanDefinitionRegistry reg = new DefaultListableBeanFactory();

  PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg);

  reader.loadBeanDefinitions(new ClassPathResource("beanConfig.properties"));

  BeanFactory factory = (BeanFactory)reg;

  HelloBean helloBean = (HelloBean)factory.getBean("helloBean");

  System.out.println(helloBean.getHelloWorld());

  ()利用java.util.Properties读取属性文件

  比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:

  ip=192.168.0.1

  port=8080

  则,我们可以用如下程序来获得服务器配置信息:

  InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ipConfig.properties");

  Properties p = new Properties();

  try {

  p.load(inputStream);

  } catch (IOException e1) {

  e1.printStackTrace();

  }

System.out.println("ip:"+p.getProperty("ip")+",port:"+p.getProperty("port"));

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

     信息咨询:Q564205990           星老师

posted @ 2012-09-15 16:30 疯狂软件 阅读(178) | 评论 (0)编辑 收藏

 

1,byte[]的长度

   

    写了一个从文件里读字符串的函数:

   

    public static String readFileString fFileName{//, String fEncoding {

   

    char[] buffer = new char[1024];

   

    StringBuilder text = new StringBuilder();

   

    InputStreamReader reader = null;

   

    try {

   

    reader = new InputStreamReadernew FileInputStreamfFileName));

   

    while reader.readbuffer, 0, 1024)!=-1{

   

    text.appendbuffer); <==有错

   

    }

   

    }

   

    catchException e{

   

    e.printStackTrace();

   

    }

   

    finally{

   

    ifreader!=null{

   

    try {

   

    reader.close();

   

    } catch IOException e {

   

    // TODO Auto-generated catch block

   

    e.printStackTrace();

   

    }

   

    }

   

    }

   

    return text.toString();

   

    }

   

    粗看这段代码没有问题。但是读出的字符总比实际要多。问题在text.appendbuffer)。 buffer是一个1024char数组。每次append固定的1024char.改成就好了。

   

    reader = new InputStreamReadernew FileInputStreamfFileName));

   

    int readed;

   

    while ((readed = reader.readbuffer, 0, 1024))!=-1{

   

    text.appendnew Stringbuffer, 0, readed));

   

    }

   

    2,优先级的错误

   

    Log.dTAG, "location="+where+", "+locationService==null?"null":locationService.getLocation());

   

    这行代码的本意是如果locationService==null,就输出"null",避免NullPointerException.但实际上仍然发生NullPointerException.原来"+"的优先级大于"?",所以上面代码实际上是:

   

    Log.dTAG, "location="+where+", "+locationService==null?"null":locationService.getLocation())

   

    括号里的当然不会是null.改成

   

    Log.dTAG, "location="+where+", "+locationService==null?"null":locationService.getLocation()));

   

就好了。

     您正在看的文章来自疯狂软件教育中心 www.fkjava.org

         信息咨询:Q564205990                星老师

posted @ 2012-09-14 14:15 疯狂软件 阅读(261) | 评论 (0)编辑 收藏