关于static的访问题,与平常问的satic不一样,涉及到类的加载
我也想知道static的调用,为啥直接用类名就可以调用,我们知道static修饰的变量值是存放在数据段中,而我们要访问某一变量,首先要找到变量所依附的载体,换句话说就是要找到一个已存在的路径或者地址,而我们直接通过类名来访问的,而类应该是没有专门的一个地址吧,但是如何实现访问的呢
------解决方案--------------------这个你看字节码去吧。
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
------解决方案--------------------static 声名的 属性 所有的 对象 使用的就是 同一个 属性
所以可以用对象 和类名 调用 是为了方便才加上 类名调用的
------解决方案--------------------JAVA中 只有类和对象 有时后类也可以看做为对象 叫对象类,所以你直接用 类名去调用STATIC 的变量是可以的,就如同 对象调用属性一样.呵呵 这是个人理解.
------解决方案--------------------static 属性,在类加载的时候已经分配的地址空间
而非static属性,在获得类的实例,也就是new的时候才分配地址空间
所以我们可以直接使用,而无需new一个对象出来。
------解决方案--------------------static定义的属性或者方法属于类属性和类方法,在类加载时,这些属性和方法也就同时加载了,可以用类名直接调用.
------解决方案--------------------等待答案
------解决方案--------------------这个问题涉及到类的加载机制 ClassLoader 具体什么ClassLoader
我记得不是非常清楚了 明天给予你详细的解答
今天给你举个小例子希望能帮助你理解
众所周知 java.lang这个包是不需要import就可以直接用的
里面有一个著名的System.out.println就是一个静态的方法
在你调用这个方法之前 java已经把 java.lang 加载到内存中去了 所以这个类你可以直接使用
其他的静态方法只是用不同的装载器装在罢了 原理是一样的
内存中已经有一份对象存在了 而你用类名.方法名就可以调用了
建议你看一下反射机制
不一定非要用new创建一个类的实例Class.forName()也可以创建一个类的实例
等我补充一下知识明天再给你详细解答这个问题哈 希望对你能有所帮助
------解决方案--------------------大家都知道静态的变量是在程序运行时产生,程序结束时销毁。
变量已经生成了,你使用类名自然可以点到了。
其他的变量点不到是因为根本就还没生成
这是我个人的理解
------解决方案--------------------关注!
------解决方案--------------------我来说一下巴 就算没有明白也要给分啊呵呵!
在Java中你要使用一个类的或者类的变量首先这个类要被Java虚拟机加载,当Java虚拟机把类的.class文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.静态变量和静态方法是在类加载的时候就进行初始化了并且只初始化一次,所以可以用类类型的名字加上点来访问对象的静态变量.另外静态变量是放在方法区的而实例变量是放在堆区的(既它所属的实例对象所在堆的区间内).另外这个时候类只是被加载并没有被初始化,假如你要new个对象的话这个时候才会进行初始化.如果楼主还不明白的话建议你区看看孙卫琴的Java面向对象编程那本书有专门讲类的加载的那章节的,看完就会明白的不过别忘了给分啊