JAVA中,非静态方法可以调用静态成员变量吗?
静态static方法中不能调用非静态(non-static)方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法。
Java里的静态变量相当于C语言里的全局变量,但使用时要指出所在的类,所以在非静态方法里使用静态变量时是没有问题的。
使用static修饰的方法被称为静态方法,该方法具有以下的特点:(1)静态方法只能调用静态方法和静态属性。
可以,静态方法里面掉不了非静态的。因为静态方法在类初始化的时候就有了,非静态方法还不存在。。
No 不对 应该是: 静态方法中不能引用非静态方法 ——理由很简单, 因为静态方法直接可以不经过实例化就可以使用。但是非静态方法必须借助一个实例才能使用。
Java反射机制获取内部类的静态成员
1、如果此 Field 对象强制实施 Java 语言访问控制,并且底层字段是不可访问的,则该方法将抛出一个 IllegalAccessException。如果底层字段是静态的,并且声明该字段的类尚未初始化,则初始化这个类。
2、静态方法不与特定实例关联,不能引用this,要得到当前类名,没有直接的办法。
3、 field.get(null); 普通属性获取值需要传入对象,但是静态属性不需要传入具体对象,传 null也可以获取该字段的值。
4、反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。
5、这种情况下简单的通过Class.forName().getInstance()就无法正确构造实例。幸好JAVA所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。
6、Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;其中class代表的时类对 象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组 成部分。
为什么JAVA中外部类不能直接访问静态内部类的成员?
在方法中定义的内部类是局部内部类,它只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,延长了其生命周期,使得方法在消亡时,其内部类仍可以访问该变量。另外,它同样也可以引用定义在外部类的变量和方法。
java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来的类叫外部类。在java中,我们不能用static修饰顶级类(top level class)。只有内部类可以为static。
注释掉的语句是不能执行的语句。关键理解这一句话,非静态内部类的创建必须有外部类对象的参与,不管是隐式的还是显示的。静态内部类和外部类没有关系,其创建不需要外部类对象的参与,也不能访问内部类的非静态方法。
这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。
最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。
内部类 就相当于一个外部类的成员变量,所以可以直接访问 外部变量 ,外部类不能直接访问内部类变量,必须通过创建内部类实例的方法访问,new InnerClass (32).m就是创建内部类实例访问内部类成员变量。