前面我们学会了如何获取一个类的类类型,那么基本的数据类型或者方法返回值是否也存在类类型呢?答案是肯定的,我们来看看怎么表示一个基本数据类型以及函数返回值的类类型:
Class c=int.class;//int的类类型
Class c2=String.class;//String类的类类型
Class c3=double.class;
Class c4=Double.class;//不同于上面double的类类型,这是double基本数据类型对应的包装类的类类型
Class c5=void.class;//函数返回值的类类型
System.out.println(c.getName());
System.out.println(c2.getName());
System.out.println(c3.getName());
System.out.println(c4.getSimpleName());//不包含包名
System.out.println(c5.getName());
}
运行结果如下:
int
java.lang.String
double
Double
void
我们如何获取一个类的基本信息呢?接下来我们来看看Class类的基本API:
public static void printClassMessage(Object obj) {
/*
* 打印类的信息,包括类的成员函数,返回值类型,参数
*/
//获取类的类类型
Class c=obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型
//获取类的名称
System.out.println("类的名称为"+c.getName());
Method[] ms=c.getMethods();
//Method类是方法对象,一个成员方法就是一个Mehtod对象,getMethods()方法获取的是所有public的函数,包括父类继承而来,c.getDeclaredMethods()用于获取该类自己声明的方法,不问访问权限
for(int i=0;i<ms.length;i++) {
Class returnType=ms[i].getReturnType();//得到的是返回值类型的类类型
System.out.println(returnType.getName());
System.out.print(ms[i].getName()+"(");//得到方法名
Class[] paramTypes=ms[i].getParameterTypes();//得到的是参数列表的类型的类类型
for (Class class1 : paramTypes) {
System.out.print(class1.getName()+",");//打印参数
}
System.out.println(")");
}
}
进行测试:
public static void main(String[] args) {
String s="hello";
ClassAPI.printClassMessage(s);
Integer n=1;
ClassAPI.printClassMessage(n);
}
运行结果:
类的名称为java.lang.String
boolean
equals(java.lang.Object,)
java.lang.String
toString()
int
hashCode()
int
compareTo(java.lang.String,)
int
compareTo(java.lang.Object,)
int
indexOf(java.lang.String,int,)
int
indexOf(java.lang.String,)
int
indexOf(int,int,)
int
indexOf(int,)
java.lang.String
valueOf(int,)
java.lang.String
valueOf(long,)
java.lang.String
valueOf(float,)
java.lang.String
valueOf(boolean,)
java.lang.String
valueOf([C,)
java.lang.String
valueOf([C,int,int,)
java.lang.String
valueOf(java.lang.Object,)
java.lang.String
valueOf(char,)
java.lang.String
valueOf(double,)
char
charAt(int,)
int
codePointAt(int,)
int
codePointBefore(int,)
int
codePointCount(int,int,)
int
compareToIgnoreCase(java.lang.String,)
java.lang.String
concat(java.lang.String,)
boolean
contains(java.lang.CharSequence,)
boolean
contentEquals(java.lang.CharSequence,)
boolean
contentEquals(java.lang.StringBuffer,)
java.lang.String
copyValueOf([C,)
java.lang.String
copyValueOf([C,int,int,)
boolean
endsWith(java.lang.String,)
boolean
equalsIgnoreCase(java.lang.String,)
java.lang.String
format(java.util.Locale,java.lang.String,[Ljava.lang.Object;,)
java.lang.String
format(java.lang.String,[Ljava.lang.Object;,)
void
getBytes(int,int,[B,int,)
[B
getBytes(java.nio.charset.Charset,)
[B
getBytes(java.lang.String,)
[B
getBytes()
void
getChars(int,int,[C,int,)
java.lang.String
intern()
boolean
isEmpty()
java.lang.String
join(java.lang.CharSequence,[Ljava.lang.CharSequence;,)
java.lang.String
join(java.lang.CharSequence,java.lang.Iterable,)
int
lastIndexOf(int,)
int
lastIndexOf(java.lang.String,)
int
lastIndexOf(java.lang.String,int,)
int
lastIndexOf(int,int,)
int
length()
boolean
matches(java.lang.String,)
int
offsetByCodePoints(int,int,)
boolean
regionMatches(int,java.lang.String,int,int,)
boolean
regionMatches(boolean,int,java.lang.String,int,int,)
java.lang.String
replace(char,char,)
java.lang.String
replace(java.lang.CharSequence,java.lang.CharSequence,)
java.lang.String
replaceAll(java.lang.String,java.lang.String,)
java.lang.String
replaceFirst(java.lang.String,java.lang.String,)
[Ljava.lang.String;
split(java.lang.String,)
[Ljava.lang.String;
split(java.lang.String,int,)
boolean
startsWith(java.lang.String,int,)
boolean
startsWith(java.lang.String,)
java.lang.CharSequence
subSequence(int,int,)
java.lang.String
substring(int,)
java.lang.String
substring(int,int,)
[C
toCharArray()
java.lang.String
toLowerCase(java.util.Locale,)
java.lang.String
toLowerCase()
java.lang.String
toUpperCase()
java.lang.String
toUpperCase(java.util.Locale,)
java.lang.String
trim()
void
wait()
void
wait(long,int,)
void
wait(long,)
java.lang.Class
getClass()
void
notify()
void
notifyAll()
java.util.stream.IntStream
chars()
java.util.stream.IntStream
codePoints()
类的名称为java.lang.Integer
int
numberOfLeadingZeros(int,)
int
numberOfTrailingZeros(int,)
int
bitCount(int,)
boolean
equals(java.lang.Object,)
java.lang.String
toString(int,int,)
java.lang.String
toString()
java.lang.String
toString(int,)
int
hashCode(int,)
int
hashCode()
int
min(int,int,)
int
max(int,int,)
int
reverseBytes(int,)
int
compareTo(java.lang.Integer,)
int
compareTo(java.lang.Object,)
byte
byteValue()
short
shortValue()
int
intValue()
long
longValue()
float
floatValue()
double
doubleValue()
java.lang.Integer
valueOf(java.lang.String,int,)
java.lang.Integer
valueOf(int,)
java.lang.Integer
valueOf(java.lang.String,)
java.lang.String
toHexString(int,)
int
compare(int,int,)
java.lang.Integer
decode(java.lang.String,)
int
reverse(int,)
int
sum(int,int,)
int
parseInt(java.lang.String,)
int
parseInt(java.lang.String,int,)
long
toUnsignedLong(int,)
int
compareUnsigned(int,int,)
int
divideUnsigned(int,int,)
java.lang.Integer
getInteger(java.lang.String,java.lang.Integer,)
java.lang.Integer
getInteger(java.lang.String,int,)
java.lang.Integer
getInteger(java.lang.String,)
int
highestOneBit(int,)
int
lowestOneBit(int,)
int
parseUnsignedInt(java.lang.String,)
int
parseUnsignedInt(java.lang.String,int,)
int
remainderUnsigned(int,int,)
int
rotateLeft(int,int,)
int
rotateRight(int,int,)
int
signum(int,)
java.lang.String
toBinaryString(int,)
java.lang.String
toOctalString(int,)
java.lang.String
toUnsignedString(int,)
java.lang.String
toUnsignedString(int,int,)
void
wait()
void
wait(long,int,)
void
wait(long,)
java.lang.Class
getClass()
void
notify()
void
notifyAll()
这样我们就把String类和Integer类的名称以及包含的方法的信息都获取到了