java doc中提到了以下两点:
- “类对象由 Java 虚拟机在加载类时自动构造,并通过调用类加载器中的 defineClass 方法
- 类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
我的问题是:类方法和类变量是否属于java中的“java.lang.class”对象?
java doc中提到了以下两点:
我的问题是:类方法和类变量是否属于java中的“java.lang.class”对象?
是的。java.lang.Class 的每个实例都允许访问该类的类变量和方法。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
1. Class methods
是类Class variable
的静态成员,属于类,被类的所有对象共享。
2. 属于对象non-static variables and methods in a class
。每个对象都有自己的这些非静态成员。
3. java.lang.Class<T>
代表一个正在运行classes
的interfaces
Java应用程序。
4. 类对象包含类的运行时表示。系统中的每个对象都是某个类的一个实例,每个类都有这些描述符对象之一。类描述符在运行时不可修改。
是的。
这可能会有所帮助.... Java 中的每个对象都属于某个类。这就是为什么由所有其他类继承的 Object 类定义该getClass()
方法的原因。
getClass()
, 或 class-literal -Foo.class
返回一个 Class 对象,其中包含有关该类的一些元数据:
所有类都有从 Object 类继承的方法。
下面的代码遍历 SomeClass 的所有公共变量和方法并输出它们。
您会从输出中注意到 someVariable 和 someMethod() 属于我们的类,而所有其他的都属于 Object 类。
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test
{
public static void main( String args[] )
{
for ( Field field : SomeClass.class.getFields() )
{
System.out.println( field );
}
for ( Method method : SomeClass.class.getMethods() )
{
System.out.println( method );
}
}
class SomeClass
{
public String someVariable;
public void someMethod()
{
}
}
}
输出:
public java.lang.String com.Test$SomeClass.someVariable
public void com.mailings.classes.Test$SomeClass.someMethod()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()