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

时间:2016-10-27 13:54:07

标签: java android

我一直遇到这种语法,但我无法找到任何解释。

head -n 20 ratings.csv |  awk '{print $0"000"}'
000rId,movieId,rating,timestamp
000,3.5,1112486027
0009,3.5,1112484676
0002,3.5,1112484819
0007,3.5,1112484727
0000,3.5,1112484580
00012,3.5,1094785740
00051,4.0,1094785734
00023,4.0,1112485573
00053,4.0,1112484940
00060,4.0,1112484826
00093,4.0,1112484703
00096,4.0,1112484767
00018,4.0,1112484798
00037,3.5,1094785709
00067,3.5,1112485980
00041,4.0,1112484603
00089,3.5,1112485557
00093,3.5,1112484661
00053,3.0,1094785691

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

class关键字的含义是什么?

全面了解此代码的外观和使用方式

MainActivity.class.getSimpleName();

5 个答案:

答案 0 :(得分:3)

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中,这种技术被称为"反射"。详细了解它,例如herehere

也许还要注意,作为一个正常的'程序员,你不需要了解instanceof运算符以外的反射。但是,一些框架在很大程度上依赖于反思。例如,Java Persistency API(JPA)提供程序或依赖注入(DI)框架;实际上,您通过在代码中添加注释来控制的大多数工具都需要反射来在运行时查找和处理它们。

答案 1 :(得分:2)

  

MainActivity.class.getSimpleName();

中的class关键字是什么?

MainActivity.class是获取表示已识别Java类的the Class object的语法。

  

这是否会创建一个名为getSimpleName()的内联方法;添加到MainActivity?

没有。 getSimpleName() is a method on Class

答案 2 :(得分:1)

JVM加载的每个类都有一个class对象。 class对象实际上是一个单例,它包含该类的所有静态字段和方法。您可以使用您发布的语法ClassName.class来引用它。

答案 3 :(得分:1)

.class语法

  

如果类型可用但没有实例,则可以   通过附加" .class"获得一个班级到类型的名称。这个   也是获取基本类型Class的最简单方法。

由于MainActivity类型可用,但没有实例,您可以通过附加" .class"来获取原始类型的MainActivity。这是链接:Retrieving Class Objects

boolean b;
Class c = b.getClass();   // compile-time error

Class c = boolean.class;  // correct

然后你可以调用getSimpleName()来返回一个表示基础类名称的字符串。在您的情况下," MainActivity"。

这比硬编码更好[&34; MainActivity"因为如果您重构代码并更改类名,则不必更改TAG的值,该值用于记录和调试。

答案 4 :(得分:0)

java.lang.Class.getSimpleName()返回源代码中给定的基础类的简单名称。如果基础类是匿名的,则返回一个空字符串。