static只能用来修饰类成员与代码块么?还能不能修饰其他的?
我能理解为static声明的基本类型常量在静态域,声明的对象引用也在静态域,但具体的对象实例在堆、常量池里么?
另外,在类里面定义静态成员后,再创建该类的对象,并不简简单单是将类里那个静态成员对象的引用赋给新创建的对象里的静态成员吧(虽然内存是共享的)?我在测试代码时就遇到了一些问题。
你这个没点豆子送是没人给你回答的啊!!!
楼主,因为你的问题涉及到Java虚拟机,这方面的知识我已经记不清了,怕回答不了你的问题。我建议你去看一下,<深入理解 Java 虚拟机>周志明,如果你找不到pdf,可以私信我你的邮箱,我发给你pdf文档,或者你可以把测试代码贴一下,把遇到的问题写一写,我看能不能帮到你。最后也是很重要的:学习有问题是好事,不要管那些人,"没豆子没人给你回答",都是P话,希望你多学多问,只是我能力有限,jvm帮不到你。
static 语义:静态的
修饰对象:方法、变量、代码块
访问方式:通过类名直接访问
修饰方法:称之为静态方法,静态方法为类所有,在创建对象之前就已存在,无需创建对象即可使用。使用方法: 类名.方法名();
修饰方法总结:1、静态方法只能直接调用静态方法
2、静态方法可以被静态方法直接调用,也可以被非静态方法直接调用
3、非静态方法既可以直接调用静态方法,也可以直接调用非静态方法
4、被static修饰的方法,不能使用关键字this./super.(静态方法出现在创建对象之前,使用会指代不明)
5、静态方法可以被继承,但只能被静态方法覆盖,没有多态的特性
6、类的内部,直接通过方法名访问;类的外部,借助类名访问
修饰变量:分两类:修饰属性
定义位置:类中,方法的外面,与成员变量对其
访问方式:类名.属性名
修饰属性:称之为静态属性,为全类共享,每个成员都有一份,一个对象值的改变会影响另一个对象值的改变
注意事项:static只能修饰属性性值的变量,不能修饰局部变量
修饰代码块:称之为静态代码块
执行地位:类加载时触发静态代码块的执行
注意事项:静态代码块和静态属性初始化的执行依据先后顺序进行
相关补充:1、类加载:当程序第一次用到某个类时,虚拟机会将类的相关信息一次性加载到内存(类加载只进行一次)
2、类加载的时机:父子类第一次创建对象时会触发类加载、第一次访问静态成员时会触发类加载、Class.forName("全限定名")
3、无继承关系的对象第一次创建过程:静态属性--->静态代码块--->成员变量--->动态代码块--->构造方法--->成员变量--->动态代码块--->.