我也想知道static的调用,为啥直接用类名就可以调用,我们知道static修饰的变量值是存放在数据段中,而我们要访问某一变量,首先要找到变量所依附的载体,换句话说就是要找到一个已存在的路径或者地址,而我们直接通过类名来访问的,而类应该是没有专门的一个地址吧,但是如何实现访问的呢
解决方案 »
- 一个IO流的问题,请大家帮我解释一下
- getClass().getClassLoader() 返回 null
- 关于java打印问题
- 关于sQL条件中包含条件时
- 有个有关线程的问题理解不了!
- 在保存对话框中如何设置被选择的文件名为默认的?
- 用jbuilder连sql server,出现DataSet has no unique row identifiers错误
- JDBC难题,有源代码,100分求个明白!!!!求个解决方法!!!
- 分特分特!!!!为什么现在的connection refused!!!大虾救命阿;((
- 谢谢大佬帮我看看哪里出问题了
- 如何利用正则表达式提取内容?
- Color中的getColor(string)怎么用啊
所以可以用对象 和类名 调用 是为了方便才加上 类名调用的
而非static属性,在获得类的实例,也就是new的时候才分配地址空间所以我们可以直接使用,而无需new一个对象出来。
我知道static是首先加载,但是加载了能说明啥子呢,只能说明为其分配了内存空间,但是我用时,我是如何知道这个空间的,在java中,我们访问任何数据都必需找到其地址,但是我们是如何通过类来找到的呢,一个类与satic的数据有啥关系呢,换个方面来说,如果是因为satict先加载的话,哪好,我等程序都加载以后,我用普通的类来调用其常规属性,也能访问了,但是结果确不是这样,
我记得不是非常清楚了 明天给予你详细的解答
今天给你举个小例子希望能帮助你理解
众所周知 java.lang这个包是不需要import就可以直接用的
里面有一个著名的System.out.println就是一个静态的方法
在你调用这个方法之前 java已经把 java.lang 加载到内存中去了 所以这个类你可以直接使用
其他的静态方法只是用不同的装载器装在罢了 原理是一样的
内存中已经有一份对象存在了 而你用类名.方法名就可以调用了
建议你看一下反射机制
不一定非要用new创建一个类的实例Class.forName()也可以创建一个类的实例
等我补充一下知识明天再给你详细解答这个问题哈 希望对你能有所帮助
在Java中你要使用一个类的或者类的变量首先这个类要被Java虚拟机加载,当Java虚拟机把类的.class文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.静态变量和静态方法是在类加载的时候就进行初始化了并且只初始化一次,所以可以用类类型的名字加上点来访问对象的静态变量.另外静态变量是放在方法区的而实例变量是放在堆区的(既它所属的实例对象所在堆的区间内).另外这个时候类只是被加载并没有被初始化,假如你要new个对象的话这个时候才会进行初始化.如果楼主还不明白的话建议你区看看孙卫琴的Java面向对象编程那本书有专门讲类的加载的那章节的,看完就会明白的不过别忘了给分啊