黑马程序员技术交流社区

标题: 静态变量一会能直接用,一会又需要new()了,求解 [打印本页]

作者: 颜晓峰    时间: 2013-3-8 11:33
标题: 静态变量一会能直接用,一会又需要new()了,求解
本帖最后由 颜晓峰 于 2013-3-11 14:34 编辑

我在WPF项目里建了一个类Tools

Tools类中有几个静态变量:
public class Tools
    {
        public static int ckb_ischecked;
        public static string s_userName;
        public static string s_psd;

    }
我在其他地方调用,第一次如此调用:
string s = Tools.s_userName;

OK,妥妥的,没问题;
然后我希望能忽略其中的空白字符,于是
s.Trim();

悲剧了,出现提示:

请问这是怎么回事呢,静态变量不是可以直接使用么,就像string s = Tools.s_userName;一样,为什么加了个Trim();就不行呢?
静态变量难道只能赋值用?如果我在这里实例化的话,其中的内容不都没了?


作者: whs_nk    时间: 2013-3-8 15:49
是不是哪里粗心了?以下这段简单代码运行完全正确,楼主可以试下

截图00.jpg (36.32 KB, 下载次数: 43)

截图00.jpg

作者: 颜晓峰    时间: 2013-3-8 20:54
本帖最后由 颜晓峰 于 2013-3-8 21:02 编辑
whs_nk 发表于 2013-3-8 15:49
是不是哪里粗心了?以下这段简单代码运行完全正确,楼主可以试下


我的类中userName不能像你一样直接赋值,因为这个值有很多可能,你直接赋值就是格式化了。不会出现我的问题。你如果按我一样的方式试一试就会有问题的。

作者: 颜晓峰    时间: 2013-3-8 21:16
我知道问题所在了!之所以会出现该提示,并不是没有实例化的问题,而是Tools.s_userName的值为null。就如疑难解答提示中的第二条一样。静态变量不需要实例化,出现该问题就是值NULL的问题了,null不能赋值给string变量,自然就出错了!谢谢大家,弄了半天,终于弄清楚了。。。不容易啊,求加分分~~
作者: 曾玉锋    时间: 2013-3-8 23:05
public class Tools
    {
        public static int ckb_ischecked;
        public static string s_userName; //在这里只是声明了string类型的变量,并没有给它在内存中分配空间,所以是空引用(null)
        public static string s_psd;
    }
我在其他地方调用,第一次如此调用:
string s = Tools.s_userName;//s=null ;
OK,妥妥的,没问题;
然后我希望能忽略其中的空白字符,于是
s.Trim(); // null .....异常



作者: 罗志强    时间: 2013-3-9 09:19
我知道你那个UserName是程序中赋值的,出现上面的原因是,UserName为null,说明你程序还没运行到赋值代码就已经给其他变量赋值了,这是你设计思路上有些问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2