免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 狼神萧枫
打印 上一主题 下一主题

怎样防止取到的数据为空? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-04-05 15:53 |只看该作者
原帖由 carset 于 2006-4-5 15:51 发表
那要看 int i 在什么位置。

如果在函数。。java 里叫做方法内部。则JVM不会自动给他初始化。就会抛出一个异常。

如果是在类内部。则会默认初始化为 0;

[code]
public class TestDefine {
       
        int i;
...

正确

论坛徽章:
0
12 [报告]
发表于 2006-04-05 15:56 |只看该作者
涉及到具体的基本类型赋值,写个很简单的测试就可以了。


  1. package source;

  2. public class TestDefine {
  3.        
  4.         int i;
  5.         boolean b;
  6.         char c;
  7.         String s;
  8.         float f;
  9.         double d;
  10.        
  11.         public static void main(String[] args){
  12.                
  13.                 new TestDefine();
  14.                
  15.         }
  16.   TestDefine(){  
  17.           System.out.println("i="+i);
  18.           System.out.println("b="+b);
  19.           System.out.println("c="+c);
  20.           System.out.println("s="+s);
  21.           System.out.println("f="+f);
  22.           System.out.println("d="+d);
  23.   }
  24. }

复制代码


输出
i=0
b=false
c=
s=null
f=0.0
d=0.0


发现 cu 一个BUG。我居然不能一起复制 上面几行。莫非因为 c=''?? 感兴趣的自己试一下。。

[ 本帖最后由 carset 于 2006-4-5 15:59 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2006-04-05 16:00 |只看该作者
。。。不是因为CU。因为我系统。。。。不能复制空字符。

论坛徽章:
0
14 [报告]
发表于 2006-04-05 16:01 |只看该作者
原帖由 perryhg 于 2006-4-5 13:33 发表
java和c++还有.net的Exception就是专门用来处理这种情况的,int的默认值是0,它也可能被赋值为0,如果因为程序出错,没有被附上值,就得到了默认值0,那么你就无法判断倒是是因为赋值得0还是出错得0,这个时候就要 ...



老大,这个不对吧,这种RuntimeException应该有一般编码判断而不应该捕获的,IOException才是处理那些程序员无法判断的情况

lz的那个问题:第一:成员属性会被自动初始化,而局部变量则需要手动初始化
第二:java是门强类型的语言,程序员有义务知道你的变量或者说属性是什么类型的,至于手动初始化成什么一般来讲参考自动初始化的那个。判断的话也可以以自动初始化的值来相对判断

至于原始变量自动初始化成什么,几乎所有java入门书都会有介绍

论坛徽章:
0
15 [报告]
发表于 2006-04-05 16:06 |只看该作者
原帖由 艾斯尼勒 于 2006-4-5 16:01 发表



老大,这个不对吧,这种RuntimeException应该有一般编码判断而不应该捕获的,IOException才是处理那些程序员无法判断的情况

lz的那个问题:第一:成员属性会被自动初始化,而局部变量则需要手动初始化
...


正解

编译时错误是不能被捕获的。我想应该是笔误。。

论坛徽章:
0
16 [报告]
发表于 2006-04-05 16:21 |只看该作者
原帖由 carset 于 2006-4-5 16:06 发表


正解

编译时错误是不能被捕获的。我想应该是笔误。。


不不不,不是这个意思,我的意思是说这种程序逻辑错误或者能够预料到的异常,应该由普通的代码进行判断
if()阿之类的,而不应该用try{}catch(){}块来捕获异常

事实上,如果你定义的方法如果throws RuntimeException了
调用的时候编译器根本不会要求你进行异常处理的

[ 本帖最后由 艾斯尼勒 于 2006-4-5 16:58 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2006-04-05 20:10 |只看该作者
原帖由 艾斯尼勒 于 2006-4-5 16:01 发表



老大,这个不对吧,这种RuntimeException应该有一般编码判断而不应该捕获的,IOException才是处理那些程序员无法判断的情况

lz的那个问题:第一:成员属性会被自动初始化,而局部变量则需要手动初始化
...


知道这种区别说明你对Exception的认识已经进入了新的高度了,你代码里面愿意catch RuntimeException的话谁也不会来阻止你,从这点来说我还是对的:wink:

不过既然是需要强制处理的Exception,就不推荐用RuntimeException以及它的子类,这样在编译期间就可以发现问题。有时候甚至我们需要把RuntimeException转换成必须强制处理的Exception,比如我们从System.in读取一个数字,用
try{
Integer.parseInt(input);
}catch(RuntimeException e){
    throw new MustCaughtException(e);
}

[ 本帖最后由 perryhg 于 2006-4-5 20:11 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2006-04-06 21:35 |只看该作者
谢谢大家的回复!

我的意思是:如果request.getParameter取来的数据是空的,也就是没有填,怎么办?
                char可以s=request.getParameter("name");
                   if(s==null) s="";

                int呢?

因为在SQL语句中,空值要明确给出空值 NULL ~~

论坛徽章:
0
19 [报告]
发表于 2006-04-06 21:56 |只看该作者
..这个好象是返回 false 吧.

论坛徽章:
0
20 [报告]
发表于 2006-04-06 21:56 |只看该作者
原帖由 狼神萧枫 于 2006-4-6 21:35 发表
谢谢大家的回复!

我的意思是:如果request.getParameter取来的数据是空的,也就是没有填,怎么办?
                char可以s=request.getParameter("name");
                   if(s==null) s=&quo ...



晕。。。以前所有帖都不是要的,这的确得怪你一开始问题没提清楚

s=request.getParameter("age");
if(s==null)
   sql = "insert into ........values(....,NULL,...)";

酱子可以解决,但显而易见方法并不好

java.sql.Types中有个static int NULL静态属性应该可以解决你的问题
偶sql基本忘光了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP