2012-04-16 3 views
0

Рассмотрим этот код:Может ли метод getClass() использоваться для доступа к статическим переменным?

class A { 
    static int i=3; 
} 

public class TT extends A { 
    public static void main(String[] args) { 
     System.out.println(new A().getClass().i); 
    } 
} 

Может метод getClass() использоваться для доступа к статическим переменным в этом контексте?

+2

Просто использовать а.и., чтобы получить статический член. –

ответ

9

Не так, нет. getClass() возвращает a Class<?>, а i не является членом Class. Вы можете использовать getClass(), за которым следует отражение, чтобы получить значение поля, но это совсем не ясно, чего вы пытаетесь достичь здесь - когда в примере, который вы дали (это все, что нам нужно пройти) просто используя A.i будет проще и понятнее.

0

Возможно, этот код отвечает на ваш вопрос:

package com.cc.test; 
import java.lang.reflect.Field; 
public class TestMain { 

    public static void main(String[] args) throws Exception { 
     Class theClass = Class.forName("com.cc.test.TestMain$MyClass"); 
     Field theField = theClass.getField("myField"); 
     int theValue = theField.getInt(null); // null only works if myField is static 
     System.out.println(theValue); // prints 99 
    } 

    private static class MyClass { 
     public static int myField = 99; 
    } 
}