黑马程序员技术交流社区
标题:
关于静态只能引用静态的方法和变量
[打印本页]
作者:
韩慧阳
时间:
2012-5-7 17:18
标题:
关于静态只能引用静态的方法和变量
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公司当初为了避免这个情况特意让静态只能引用静态的方法和变量,而非静态的可以引用所有。
作者:
谭景宾
时间:
2012-5-7 17:35
因为被static修饰的静态成员是随着类的加载而存在于内存当中的,
而非静态成员是new对象以后才存在于内存当中
也就是说静态成员存在于内存当中,非静态成员不一定存在,这个时候静态成员去访问非静态成员,怎么可能访问的到不存在的对象呢?
反之,非静态成员存在,静态成员就一定存在,所以非静态成员能访问得到静态成员
比如 学生a是静态的,学生b是非静态的
学生a先来到了教室,学生b还没有到教室,学生a当然不能跟学生b进行对话。
当学生b来到教室后,发现学生a已经在教室了,学生b当然可以跟学生a进行对话
简单的总结:先来的访问不到后来的。后来的可以访问先来的
作者:
林豪
时间:
2012-5-7 17:55
静态的在类加载时候就优先出现了,主函数是静态的,加载的时候主函数如果调用其他非静态函数,那么其他函数还没有出现,所以主函数会找不到调用的函数
所以要静态来修饰主函数调用的方法,如果实在不想用静态,你需要在主函数里创建个对象new class StringTest().sop();
作者:
曾_强
时间:
2012-5-7 17:59
哦楼上解释的很透彻
作者:
曾_强
时间:
2012-5-7 18:01
楼上解释得很透彻咯
作者:
林豪
时间:
2012-5-7 18:02
如果你看过C语言就知道了,C语言在用函数时候要声明,不然主函数认不出,Java如果没用静态修饰也没创建个新对象,那么主函数也会不知道是什么函数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2