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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩慧阳 中级黑马   /  2012-5-7 17:18  /  1675 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class StringTest
{
    public static void sop(String str)
    {
        System.out.println(str);
    }
    public static void main(String[] args)
    {
        String s="    123 123   ";
        sop("..."+s+"...");
        s=helloTrim(s);
        sop("..."+s+"...");
            
     }
    public  static String helloTrim(String str)
    {
         int start=0,end=str.length()-1;
         while(start<=end&&str.charAt(start)==' ')
         {
               start++;
               System.out.print(""+start);
         }
         while(start<=end&&str.charAt(end)==' ')
{
               end--;
        System.out.print(""+end);
        }
return str.substring(start,end+1);
    }
}
在这段代码中为什么方法要用static呢??因为主方法必须是静态的,所以在主类中调用的该类中的方法只能是静态的。如果想把这些方法
写成非静态的,那么只能在该类中写静态的内部类,再创建内部类对象。或者在主类外创建外部类再创建对象调用。
为什么静态只能引用静态的方法和变量,而非静态的可以引用所有呢?因为静态的变量或方法在类呗声明初始化时候,在堆空间已经分配好了,
所有这个类的对象都操作这个值,而非静态变量是有一个对象就有一个对应的变量。如果静态变量能操作非静态的变量会让JVM分配和使用发
生混淆,sun公司当初为了避免这个情况特意让静态只能引用静态的方法和变量,而非静态的可以引用所有。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
因为被static修饰的静态成员是随着类的加载而存在于内存当中的,
而非静态成员是new对象以后才存在于内存当中
也就是说静态成员存在于内存当中,非静态成员不一定存在,这个时候静态成员去访问非静态成员,怎么可能访问的到不存在的对象呢?
反之,非静态成员存在,静态成员就一定存在,所以非静态成员能访问得到静态成员

比如 学生a是静态的,学生b是非静态的
学生a先来到了教室,学生b还没有到教室,学生a当然不能跟学生b进行对话。
当学生b来到教室后,发现学生a已经在教室了,学生b当然可以跟学生a进行对话

简单的总结:先来的访问不到后来的。后来的可以访问先来的

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态的在类加载时候就优先出现了,主函数是静态的,加载的时候主函数如果调用其他非静态函数,那么其他函数还没有出现,所以主函数会找不到调用的函数
所以要静态来修饰主函数调用的方法,如果实在不想用静态,你需要在主函数里创建个对象new class StringTest().sop();

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
曾_强 来自手机 中级黑马 2012-5-7 17:59:48
板凳
哦楼上解释的很透彻
回复 使用道具 举报
曾_强 来自手机 中级黑马 2012-5-7 18:01:51
报纸
楼上解释得很透彻咯
回复 使用道具 举报
如果你看过C语言就知道了,C语言在用函数时候要声明,不然主函数认不出,Java如果没用静态修饰也没创建个新对象,那么主函数也会不知道是什么函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马