什么是MyClass.class?

以下是MainClass.java中列出的代码。

public class MainClass {

public static void main(String[] args) {

System.out.println("main started...");

Class c = MyClass.class ;

//this class variable seems to be public static.

//But, as it is clearly visible in the MyClass,

//no reference variable is declared.

//My problem is that from where this class variable

//came from.

//i also check out the Object.java file, but it also don't

//have any public static class variable of Class class

//like there is

//out (instance of PrintStream class) in System class.

//Hope all u mindoverflow guys help me to sort out

//this probz.

try {

Class.forName( c.getName() ) ;

System.out.println("classloader of MyClass : " + MyClass.class.getClassLoader());

System.out.println("classloader of MyClass : " + String.class.getClassLoader());

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

System.out.println("main ended...");

}

}

class MyClass{

static{

System.out.println("static block of MyClass class.");

}

}

thnx coobird …我发现这篇文章很有用。:)

但是,关于litereals,我的知识仅限于:

int i = 5 ;  //here 5 is an integer literal

float f = 5.6f ; //here 5.6f is a float literal

我知道的唯一非原始的litereal

String str = "java" ;   //"java" is a String litereal

和类字面量,你和乔恩·斯基特(Jon Skeet)对我很清楚。


同意…因此,根据讨论,总字面量归类为:

  • 原始文字
  • 字符串文字
  • 类文字
  • 空值

还有更多的文字(使列表更长一些 )


public class MainClass {

public static void main(String[] args) {

System.out.println("main started...");

Class c = MyClass.class ;

try {

Class.forName( c.getName() ) ;

System.out.println("classloader of MyClass : " + MyClass.class.getClassLoader());

System.out.println("classloader of MyClass : " + String.class.getClassLoader());

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

System.out.println("main ended...");

}

}

import java.io.PrintStream;

public class MainClass

{

public MainClass()

{

}

public static void main(String args[])

{

System.out.println("main started...");

Class c = MyClass;

try

{

Class.forName(c.getName());

System.out.println((new StringBuilder("classloader of MyClass : ")).append(MyClass.getClassLoader()).toString());

System.out.println((new StringBuilder("classloader of MyClass : ")).append(java/lang/String.getClassLoader()).toString());

}

catch(ClassNotFoundException e)

{

e.printStackTrace();

}

System.out.println("main ended...");

}

static Class class$0;

static Class class$1;

}

回答:

它是“类文字”-一种获取Class<T>特定类型的简单方法。

有关更多详细信息,请参见Java语言规范的15.8.2节。

请注意,这不是该类的“领域”,而是一块特殊的语法糖。

由于类型擦除,您可能会遇到有关泛型的有趣限制。将TypeLiteral在吉斯推出提供了更多的信息和解决方法。

在实现方面,这取决于您要定位的字节码版本。如果使用-target

1.4(或以下),Class.forName()则将在类型初始化期间调用的静态方法中将对的调用插入到代码中。如果使用-target

1.5(或更高版本),则常量池将获得“类”条目。我不知道如何处理这个细节。

以上是 什么是MyClass.class? 的全部内容, 来源链接: utcz.com/qa/415216.html

回到顶部