android java dot 类语法 MainActivity.class.getSimpleName();

Tim*_*Tim 1 java android

我不断遇到这种语法,但找不到任何解释。

private static final String TAG = MainActivity.class.getSimpleName();
Log.i(TAG,”some log statement”);
Run Code Online (Sandbox Code Playgroud)

class关键字是什么意思MainActivity.class.getSimpleName();

此代码的外观和使用方式的完整图片

public class MainActivity extends AppCompatActivity {

    //What does "class" signify in the following MainActivity.class.getSimpleName();
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "onCreate()");
    }
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*myB 6

private static final String TAG = MainActivity.class.getSimpleName();

只需获取类的“简单名称” MainActivity,恰好是"MainActivity". 一个人可以写

private static final String TAG = "MainActivity";

同样,但是如果您以后决定重命名该类,则必须注意还要更改该字符串常量,因为如果您忘记了它,编译器不会告诉您。

请注意,它SomeClass.class为您提供了一个描述本身的对象,请参阅https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

因此,Someclass.class.getSimpleName()除了日志记录外,很少有用。但是,如果您有一个对象,则可以通过调用 来查找有关其类型的信息someObject.getClass()。这为您Class提供了对象的 ,然后您可以使用它来查询对象类型的属性,例如声明了哪些方法或完整的类名 ( getCanonicalName()) 是什么。

在 Java 中,这种技术称为“反射”。阅读更多关于它的信息,例如在这里,或在这里

也许还需要注意的是,作为一个“普通”的程序员,你不需要对instanceof操作符以外的反射有太多了解。然而,一些框架严重依赖反射。例如,Java 持久性 API (JPA) 提供程序或依赖注入 (DI) 框架;实际上,通过在代码中放置注释来控制的大多数工具都需要反射来在运行时查找和处理它们。