最后,还有一种特殊的文字称为类文字,它是通过获取类型名称并附加“
.class
”形成的;例如,String.class
。这指的是表示类型本身的对象(类型Class
)。
这个文字可以分配给哪种类型的变量?
如果可能,请举一个小例子。
答案 0 :(得分:48)
Class<String> c = String.class;
查看Javadoc for java.lang.Class
以了解您可以对这些小家伙做些什么 - 主要与反思相关
答案 1 :(得分:35)
要理解这一点,您必须了解 String 是 Class 类的实例(对象)。字符串文字(例如“我是字符串。”)是表示类 String 的实例(对象)的符号,而类文字(例如Hashtable.class)是表示的符号类类。
的实例答案 2 :(得分:21)
感谢这里的其他好答案,你知道它是什么,但这里是一个典型的用法例子,也可以澄清:
private static Logger log = Logger.getLogger(YourClassHere.class);
正如代码所示,这是我们初始化日志框架的一行(在本例中,我使用的是org.apache.log4j
包,但原则扩展到其他框架)。 getLogger()
方法需要一个类文字,因此它知道它的日志记录(即当前对象的类)。
答案 3 :(得分:10)
根据the JLS
15.8.2班级文学
类文字是一个表达式,由类,接口,数组或基本类型的名称组成,后跟
.
和标记class
。类文字的类型是Class
。它计算为由当前实例的类的定义类加载器定义的命名类型(或void
)的Class对象。
答案 4 :(得分:5)
Class Literals as Runtime-Type Tokens可以找到一些常见用途。
答案 5 :(得分:4)
文字本身是MyClass
。如果您编写MyClass.class
,则会获得对类对象的引用。如果您编写new MyClass()
,它会使用文字来获取MyClass.class
获得的类对象的实例。从实例中,您可以通过调用myClassInstance.getClass()
获得相同的类对象。
我不是100%肯定,但文字本身不能分配给任何变量。您可以做的是将类的名称作为字符串,并使用反射框架来创建实例。
答案 6 :(得分:2)
在例子中,它是这样的:
Class myClass = MyClass.class
或
MyClass.class.getResourceAsStream("config.properties");
答案 7 :(得分:1)
要理解这一点,您必须了解String
是instance (object)
superclass (parent class)
的{{1}}。
Object
&#39; class String
的值为instance (object)
(例如String literal
):
"I am a string."
而class | instance (object) | literal
------------------------------------------------
String | instance_name = | "I am a string."
&#39; class Object
的值是instance (object)
- (例如Class literal
),它指的是Hashtable.class
& #39; s class Hashtable
instance (object)
答案 8 :(得分:1)
当JVM加载您的应用程序类时,它会将它们存储为java.class.Class
个对象。
因此,内存中通常有几个类型Class
的实例代表您的类。所以你可以这样做:
Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class
bicycleClass.getName(); // returns your class name
bicycleClass.getDeclaredMethods(); // returns your (declared) class methods
答案 9 :(得分:-1)
package training;
import java.lang.reflect.Method;
public class Training {
public static void main(String[] args) {
// TODO Auto-generated method stub
Class<Training> myclass = Training.class;
Method[] myclassarr = myclass.getDeclaredMethods();
System.out.println(myclass);
System.out.println(myclass.getName());
for (int i = 0; i < myclassarr.length; i++) {
System.out.println(myclassarr[i]);
}
System.out.println();
Class<String> strobj = String.class;
System.out.println(strobj);
System.out.println(strobj.getName());
Method[] strobjarr = strobj.getDeclaredMethods();
for (int j = 0; j < strobjarr.length; j++) {
System.out.println(strobjarr[j]);
}
}
public void MethodA() {
}
public static void MethodB() {
}
}
输出:
class training.Training
training.Training
public static void training.Training.main(java.lang.String[])
public void training.Training.MethodA()
public static void training.Training.MethodB()
class java.lang.String
java.lang.String
public boolean java.lang.String.equals(java.lang.Object)
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.indexOf(java.lang.String,int)
public int java.lang.String.indexOf(java.lang.String)
public int java.lang.String.indexOf(int,int)
public int java.lang.String.indexOf(int)
static int java.lang.String.indexOf(char[],int,int,char[],int,int,int)
static int java.lang.String.indexOf(char[],int,int,java.lang.String,int)
public static java.lang.String java.lang.String.valueOf(int)
public static java.lang.String java.lang.String.valueOf(long)
public static java.lang.String java.lang.String.valueOf(float)
public static java.lang.String java.lang.String.valueOf(boolean)
public static java.lang.String java.lang.String.valueOf(char[])
public static java.lang.String java.lang.String.valueOf(char[],int,int)
public static java.lang.String java.lang.String.valueOf(java.lang.Object)
public static java.lang.String java.lang.String.valueOf(char)
public static java.lang.String java.lang.String.valueOf(double)
public char java.lang.String.charAt(int)
private static void java.lang.String.checkBounds(byte[],int,int)
public int java.lang.String.codePointAt(int)
public int java.lang.String.codePointBefore(int)
public int java.lang.String.codePointCount(int,int)
public int java.lang.String.compareToIgnoreCase(java.lang.String)
public java.lang.String java.lang.String.concat(java.lang.String)
public boolean java.lang.String.contains(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.StringBuffer)
public static java.lang.String java.lang.String.copyValueOf(char[])
public static java.lang.String java.lang.String.copyValueOf(char[],int,int)
public boolean java.lang.String.endsWith(java.lang.String)
public boolean java.lang.String.equalsIgnoreCase(java.lang.String)
public static java.lang.String java.lang.String.format(java.util.Locale,java.lang.String,java.lang.Object[])
public static java.lang.String java.lang.String.format(java.lang.String,java.lang.Object[])
public void java.lang.String.getBytes(int,int,byte[],int)
public byte[] java.lang.String.getBytes(java.nio.charset.Charset)
public byte[] java.lang.String.getBytes(java.lang.String) throws java.io.UnsupportedEncodingException
public byte[] java.lang.String.getBytes()
public void java.lang.String.getChars(int,int,char[],int)
void java.lang.String.getChars(char[],int)
private int java.lang.String.indexOfSupplementary(int,int)
public native java.lang.String java.lang.String.intern()
public boolean java.lang.String.isEmpty()
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.CharSequence[])
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.Iterable)
public int java.lang.String.lastIndexOf(int)
public int java.lang.String.lastIndexOf(java.lang.String)
static int java.lang.String.lastIndexOf(char[],int,int,java.lang.String,int)
public int java.lang.String.lastIndexOf(java.lang.String,int)
public int java.lang.String.lastIndexOf(int,int)
static int java.lang.String.lastIndexOf(char[],int,int,char[],int,int,int)
private int java.lang.String.lastIndexOfSupplementary(int,int)
public int java.lang.String.length()
public boolean java.lang.String.matches(java.lang.String)
private boolean java.lang.String.nonSyncContentEquals(java.lang.AbstractStringBuilder)
public int java.lang.String.offsetByCodePoints(int,int)
public boolean java.lang.String.regionMatches(int,java.lang.String,int,int)
public boolean java.lang.String.regionMatches(boolean,int,java.lang.String,int,int)
public java.lang.String java.lang.String.replace(char,char)
public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence)
public java.lang.String java.lang.String.replaceAll(java.lang.String,java.lang.String)
public java.lang.String java.lang.String.replaceFirst(java.lang.String,java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String)
public java.lang.CharSequence java.lang.String.subSequence(int,int)
public java.lang.String java.lang.String.substring(int)
public java.lang.String java.lang.String.substring(int,int)
public char[] java.lang.String.toCharArray()
public java.lang.String java.lang.String.toLowerCase(java.util.Locale)
public java.lang.String java.lang.String.toLowerCase()
public java.lang.String java.lang.String.toUpperCase()
public java.lang.String java.lang.String.toUpperCase(java.util.Locale)
public java.lang.String java.lang.String.trim()