A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓦然回首3Y 中级黑马   /  2015-7-3 12:14  /  477 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 不定义成静态会编译失败呢?

10 个回复

倒序浏览
把x改为slx.x就可以了。
回复 使用道具 举报
其实你在stringLength()里return 了。直接打印slx.stringLength(s)就好了
回复 使用道具 举报
因为静态方法不能访问非静态域,main()方法是静态的,main()访问了x,所以x必须定义成静态的
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
main方法访问的都是静态的吗?
回复 使用道具 举报
弄明白了,谢谢大家的解答
回复 使用道具 举报
成员变量你不用类调用就把它定义为静态的!要不然静态的调用它会错!
回复 使用道具 举报
因为你的x没有定义在stringLength()方法内部 所以是成员变量 对整个类中的成员函数都生效 那么对于主函数来说 首先你没把x的值返回到主函数 然后却直接打印了x 那么这个x就不是你stringLength里面的x 而是成员变量x 因为主函数是静态的 所以里面的用到的引用外边的东西(函数 变量)也要是静态的
回复 使用道具 举报
main是静态方法,不能调用非静态变量。变为System.out.println(slx.x);就可以了
回复 使用道具 举报
因为main函数是静态的,静态函数只能访问静态变量。这是我们应该知道的常识,建议你再好好看一下基础视频
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马