仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3353|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计JAVA几个罕见毛病简析

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:43:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。毛病1,空指针毛病java.lang.NullPointerException

利用基础的JAVA数据范例,变量的值要末已是默许值,假如没有对其一般赋值,程序便不克不及经由过程编译,因而利用基础的JAVA数据范例(double,float,boolean,char,int,long)一样平常不会引发空指针非常。因而可知,空指针非常次要跟与对象的操纵相干。

上面先列出了大概产生空指针非常的几种情形及响应办理计划:

不论对象是不是为空就间接入手下手利用。
(JSP)代码段1:
out.println(request.getParameter("username"));
形貌:
代码段1的功效非常复杂,就是输入用户输出的表域"username"的值。

申明:
看上往,下面的语句找不出甚么语法毛病,并且在年夜多半情形下也遇不到甚么成绩。可是,假如某个用户在输出数据时并没有供应表单域"username"的值,或经由过程某种路子绕过表单间接输出时,此时request.getParameter("username")的值为空(不是空字符串,是空对象null。),out对象的println办法是没法间接对空对象操纵,因而代码段1地点的JSP页面将会抛出"java.lang.NullPointerException"非常。

即便对象大概为空时,也挪用java.lang.Object或Object对象自己的一些办法如toString(),equals(Objectobj)等操纵。
(JSP)代码段2:

StringuserName=request.getParameter("username");
If(userName.equals("root"))
{....}


形貌:
代码段2的功效是检测用户供应的用户名,假如是用户称号为"root"的用户时,就实行一些出格的操纵。

申明:
在代码段2中,假如有效户没有供应表单域"username"的值时,字符串对象userName为null值,不克不及够将一个null的对象与另外一个对象间接对照,一样,代码段2地点的JSP页面就会抛出(java.lang.NullPointerException)空指针毛病。

(JSP)代码段3:
StringuserName=session.getAttribute("session.username").toString();

形貌:
代码段3的功效是将session中session.username的值掏出,并将该值赋给字符串对象userName。

申明:
在一样平常情形下,假如在用户已举行某个会话,则不会呈现甚么成绩;可是,假如此时使用服务重视新启动,而用户还没有从头登录,(也多是用户封闭扫瞄器,可是仍翻开本来的页面。)那末,此时该session的值就会生效,同时招致session中的session.username的值为空。对一个为null的对象的间接实行toString()操纵,就会招致体系抛出(java.lang.NullPointerException)空指针非常。

办理计划:
为了确保举行操纵或援用的对象非空,倘使我们要对某对象举行操纵或援用,我们起首往反省该对象是不是已实例化且不为空;而且在体系中到场针对对象为空时情形的处置。

如:接纳String对象保留用户提交的了局;在假如触及对象的操纵时,先检测其是不是为空后,反省到对象为空后,可再选择举行以下任一种处置体例:

处置体例1)反省到对象为空时,设置对象值为空字符串或一个默许值;
处置体例2)检测到对象为空时,基本不实行某操纵,间接跳转到其他处置中。
处置体例3)反省到对象为空时,提醒用户操纵有毛病。
将代码段2按以上体例举行改写,失掉:
体例1:

StringuserName=request.getParameter("username");
//该变量值为空时,转化为默许空字符串
If(userName==null)
userName="";
If(userName.equals("root"))
{..........}


体例2:

StringuserName=request.getParameter("username");
//该变量值为空时,转化为默许空字符串,不实行有关操纵。
If(usreName!=null)
{
If(userName.equals("root"))
{..........}
}





体例3:

StringuserName=request.getParameter("username");
//该变量值为空时,转化为默许空字符串,不实行有关操纵。
If(usreName==null)
{
//提醒用户输出信息为空
}





实践中,下面供应到三种处置体例也一样合用于其他非常的处置:

非常处置体例1)反省到非常呈现,设置对象值为空字符串或一个默许值;
非常处置体例2)检测到非常呈现,基本不实行某操纵,间接跳转到其他处置中。
非常处置体例3)反省到非常呈现,提醒用户操纵有毛病。

2。格局化数字毛病java.lang.NumberFormatException剖析
(JSP)代码段3:

Strings_memberid=request.getParameter("memberid");
inti_memberid=Integer.parseInt(s_memberid);
形貌:
以上代码段的感化是将用户提交的表单域memberid的值转化为整数。

申明:
假如用户输出准确的数字如:1082,不会有甚么成绩。但是,假如用户输出T1082时,因为T1082不是正当的数字格局,JAVA没法将其转化为符合的数字,招致抛出java.lang.NumberFormatException数字格局化非常。

办理计划:
在任何用到字符串转化为数字时,捕获非常,对非常情形举行处置按非常处置体例1:反省到非常产生,即赋给某变量一个默许值;(大概在某些情形下招致一其他程序毛病[例如说其他模块中并未处置您所付与的默许值情形,大概招致一些非常或毛病呈现。])按非常处置体例3:反省到非常产生,提醒用户利用准确的数字格局输出。(完成略微贫苦一点,可是将毛病反对在您的模块前[即您供应给其他模块的值均是平安的]。)按这类办法对程序举行改写,在编程时略微贫苦一点,但这切实其实会您的模块加倍强健。将代码段3按以上请求举行改写,失掉:

Strings_memberid=request.getParameter("memberid");
inti_memberid;
try
{
i_memberid=Integer.parseInt(s_memberid);
...
}
catch(NumberFormatExceptionnfe)
{
//体例1:(复杂,间接给该编号为一个默许值0;)
i_memberid=0;
//体例2:(很大略的做法,倡议利用更友爱的提醒体例)
out.println("<script>alert(您供应的用户编号有误,请从头输出。;history.go(-1);</script>");
}

3,字符串越界毛病java.lang.StringIndexOutOfBoundsException等字符串类相干毛病
代码段4:

Strings_all_power="1010011";
Strings_access_power=s_all_power.substring(3,4);

形貌:
以上代码段功效的功效是猎取字符串s_all_power中的第4个字符。

申明:
一样平常情形下,程序不会有成绩,假如因为某种缘故原由,s_all_power长度变短,程序就会抛出字符串毛病。

办理计划:对字符串举行截取(substring,charAt)、转换为字节数组(getBytes),字符数组转换为字符串(valueOf)操纵时,先对操纵字符串对象的存在性(是不是为空)及长度举行反省后,再举行操纵。

改写失掉:

Strings_all_power="1010011";
if(s_all_power.length>4)
Strings_access_power=s_all_power.substring(3,4);

4。类界说未找到毛病java.lang.NoClassDefFoundError
缘故原由:

因为该程序挪用到的JAVA类文件没有准确上传;
办理计划:
将JAVA类文件从头上传。

JAVA类文件已上传,但使用服务器并未检测到,倡议将JSP页面从头更新。
办理计划:
将JSP页面更新并上传;或将使用程序服务器举行从头启动。

5,JAVA毛病java.lang.Error

缘故原由:

1.对体系所会见内部资本,未实行封闭操纵,招致内部资本大批华侈,终极大概招致体系没法一般运转;
2.对体系所会见的内部资本封闭次数太多,内部体系没法一般处置;
3.体系会见的内部资本呈现非常情形。
办理计划:

1.会见内部资本前,起首反省该资本(如数据库)是不是可一般毗连或操纵。
2.会见内部资本时,假如举行了毗连,必定举行封闭操纵,并仅举行一次封闭操纵。
3.只管在统一操纵中共享内部资本,以削减该操纵对资本的消耗,进步程序的实行效力。

C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)
小魔女 该用户已被删除
沙发
发表于 2015-1-21 13:21:01 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
板凳
发表于 2015-1-26 20:07:59 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
逍遥一派 该用户已被删除
地板
 楼主| 发表于 2015-2-4 19:46:06 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-19 08:17:34 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
若相依 该用户已被删除
6#
发表于 2015-3-5 15:56:15 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
老尸 该用户已被删除
7#
发表于 2015-3-6 08:45:46 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
深爱那片海 该用户已被删除
8#
发表于 2015-3-12 22:37:53 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
变相怪杰 该用户已被删除
9#
发表于 2015-3-13 09:10:08 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
分手快乐 该用户已被删除
10#
发表于 2015-3-20 17:59:47 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
不帅 该用户已被删除
11#
发表于 2015-3-25 02:25:53 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
飘飘悠悠 该用户已被删除
12#
发表于 2015-4-1 09:10:56 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小女巫 该用户已被删除
13#
发表于 2015-4-3 00:11:02 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
谁可相欹 该用户已被删除
14#
发表于 2015-4-6 10:04:42 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
小妖女 该用户已被删除
15#
发表于 2015-4-9 20:53:54 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
乐观 该用户已被删除
16#
发表于 2015-4-21 18:12:30 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
只想知道 该用户已被删除
17#
发表于 2015-5-1 21:36:29 | 只看该作者
是一种为 Internet发展的计算机语言
简单生活 该用户已被删除
18#
发表于 2015-5-6 22:09:24 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
飘灵儿 该用户已被删除
19#
发表于 2015-7-7 17:21:33 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
再现理想 该用户已被删除
20#
发表于 2015-7-20 17:50:53 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表