黑马程序员技术交流社区

标题: 静态问题 [打印本页]

作者: 蓦然回首3Y    时间: 2015-7-3 12:14
标题: 静态问题
class StringLianXi

{       
        public  StringLianXi(int a)
        {
                sop(a);
        }


          static int x;

        public static void main(String[] arr)
        {
               
                String s="abcdefgabcdefg";
                 StringLianXi slx=new StringLianXi(3);
                //sop(slx.stringLength(s));
               
               
                //stpr();
                slx.stringLength(s);
                System.out.println(x);
               
               
        }
        public int stringLength(String str)
        {
                x=str.length();
                //sop(x);
                return  x;
        }   }
为什么x 不定义成静态会编译失败呢?

作者: 孙嘉亮    时间: 2015-7-3 12:18
把x改为slx.x就可以了。
作者: 孙嘉亮    时间: 2015-7-3 12:23
其实你在stringLength()里return 了。直接打印slx.stringLength(s)就好了
作者: Diors    时间: 2015-7-3 12:38
因为静态方法不能访问非静态域,main()方法是静态的,main()访问了x,所以x必须定义成静态的
作者: 等你的季节-夏天    时间: 2015-7-3 13:22
谢谢分享
作者: 蓦然回首3Y    时间: 2015-7-3 16:26
main方法访问的都是静态的吗?

作者: 蓦然回首3Y    时间: 2015-7-3 17:07
弄明白了,谢谢大家的解答
作者: 终极黑马    时间: 2015-7-3 18:01
成员变量你不用类调用就把它定义为静态的!要不然静态的调用它会错!
作者: 慕容旺财    时间: 2015-7-4 12:59
因为你的x没有定义在stringLength()方法内部 所以是成员变量 对整个类中的成员函数都生效 那么对于主函数来说 首先你没把x的值返回到主函数 然后却直接打印了x 那么这个x就不是你stringLength里面的x 而是成员变量x 因为主函数是静态的 所以里面的用到的引用外边的东西(函数 变量)也要是静态的
作者: kime    时间: 2015-7-4 15:31
main是静态方法,不能调用非静态变量。变为System.out.println(slx.x);就可以了
作者: Love丶cd    时间: 2015-7-6 15:36
因为main函数是静态的,静态函数只能访问静态变量。这是我们应该知道的常识,建议你再好好看一下基础视频





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