您的位置:首页 > 编程语言 > Java开发

API之Class学习

2017-07-16 21:04 148 查看
对于API中的类型信息部分,只是学习了API中一部分的方法

package com.wonders.week01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.text.SimpleDateFormat;

/**
* 以JDK1.7为基础
* Class类
* (1)带有泛型Class<T>
* (2)实现了接口:
* java.io.Serializable,
* java.lang.reflect.GenericDeclaration,
* java.lang.reflect.Type,
* java.lang.reflect.AnnotatedElement
* (3)构造方法:private Class():只有JVM才可以创建Class
* @author liyongyong
*
*/
public class ClassTest {

public static void main(String[] args) {

/*
* public String toString()
* (1)非静态方法,返回值类型String类型,无参数
* (2)使用类名.class的方式创建Class的对象,然后调用toString方法
* (3)如果Class是一个interface接口,则返回interface 接口的名(包含包名)
* (3)如果Class是一个class类,则返回class 类的名(包含包名)
*/
String str1 = ClassTest.class.toString();
System.out.println(str1);//class com.wonders.week01.ClassTest
String str2 = IClass.class.toString();
System.out.println(str2);//interface com.wonders.week01.IClass

/*
* public static Class<?> forName(String className)
* (1)当类不存在时,该方法会抛出ClassNotFoundException异常
* (2)静态方法,参数必须指定为类名包含包名在内,否则会报ClassNotFoundException异常
*/
try {
Class<?> class1 = Class.forName("com.wonders.week01.ClassTest");
System.out.println(class1);//class com.wonders.week01.ClassTest
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
Class<?> class2 = Class.forName("com.wonders.week01.IClass");
System.out.println(class2);//interface com.wonders.week01.IClass
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

/*
* public T newInstance()
* (1)无参数
* (2)创建一个类对象的新实例
* (3)可能会抛出InstantiationException, IllegalAccessException,ClassNotFoundException异常
*/
try {
//创建ClassTest类的实例对象classTest
ClassTest classTest = (ClassTest) Class.forName("com.wonders.week01.ClassTest").newInstance();
System.out.println(classTest);//com.wonders.week01.ClassTest@1506bde8
System.out.println(classTest.print());//99
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

/*
* public native Class<? super T> getSuperclass()
* (1)作用:返回一个类的父类,形式:class 父类的全名称
*/
Class<? super Tiger> class2 = Tiger.class.getSuperclass();
System.out.println(class2); //class com.wonders.week01.Animal

/*
* public ClassLoader getClassLoader()
* (1)非 静态方法,返回值是ClassLoader对象,无参数
* (2)作用:得到该类的类加载器
*/
ClassLoader classLoader = ClassTest.class.getClassLoader();
System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@500c05c2

/*
* public TypeVariable<Class<T>>[] getTypeParameters()
* (1)返回TypeVariable对象的数组,比如TypeVariable<Class<ClassTest>>[]
*/
System.out.println(ClassTest.class.getTypeParameters());

/*
* public Type getGenericSuperclass()
* (1)作用:返回该类的顶级父类名称
* (2)返回值的类型是java.lang.reflect.Type的对象
* (3)返回值形式:class  顶级类名(包含包名)
*/
Type type =  ClassTest.class.getGenericSuperclass();
System.out.println(type);//class java.lang.Object

/*
* public Package getPackage()
* (1)返回值类型是Package对象
* (2)返回值是该类所在的包的全称
*/
Package p1 = ClassTest.class.getPackage();
System.out.println(p1);//package com.wonders.week01

/*
* public native Class<?>[] getInterfaces()
* (1)返回类型是一个Class的数组
* (2)返回值是该类所实现的所有接口
*/
Class<?>[] interfaceClass = Class.class.getInterfaces();
for (int i = 0; i < interfaceClass.length; i++) {
System.out.println(interfaceClass[i]);
/*interface java.io.Serializable
interface java.lang.reflect.GenericDeclaration
interface java.lang.reflect.Type
interface java.lang.reflect.AnnotatedElement*/
}

/*
* public Type[] getGenericInterfaces()
* (1)返回值是一个Type类型的数组
* (2)返回值是该类的顶级接口
*/
Type[] types = String.class.getGenericInterfaces();
for (int i = 0; i < types.length; i++) {
System.out.println(types[i] + "------------");
/*interface java.io.Serializable------------
java.lang.Comparable<java.lang.String>------------
interface java.lang.CharSequence------------*/
}

/*
*  public native Class<?> getComponentType()
*  (1)返回值类型是Class类型的对象
*  (2)返回值是一个数组所代表的组件类型的值或者一个类不是数组类那么这个方法就会返回null
*/
Class class1 = String.class.getComponentType();
System.out.println(class1);//null

/*
* public Class<?>[] getClasses()
* (1)返回值类型是一个Class的数组
* (2)返回值是该对象所属类的所有public的类和接口的数组
* (3)返回值的形式:
* class 包名.类名$内部类名
* interface 包名.类名$接口名
*/
Class[] tiger = Tiger.class.getClasses();
for (int i = 0; i < tiger.length; i++) {
System.out.println(tiger[i]);
/*class com.wonders.week01.Tiger$A
interface com.wonders.week01.Tiger$IA*/
}

/*
* public Field[] getFields() throws SecurityException
* (1)返回值类型是java.lang.reflect.Field的数组
* (2)返回值是该对象所在类或者接口中的public的域
*/
Field[] fields = Tiger.class.getFields();
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i]);
/*public java.lang.String com.wonders.week01.Tiger.name
public java.lang.String com.wonders.week01.Tiger.age
public java.lang.String com.wonders.week01.Tiger.address*/
}

/*
* public Method[] getMethods() throws SecurityException
* (1)返回值类型是java.lang.reflect.Method类型的数组
* (2)返回值是该类下面的所有public方法
*/
Method[] methods = SimpleDateFormat.class.getMethods();
for (Method method : methods) {
System.out.println(method);
}

/*
* public Constructor<?>[] getConstructors() throws SecurityException
* (1)返回值类型是 java.lang.reflect.Constructor<T>
* (2)返回值是该类下面的所有public的构造方法的数组
*/
Constructor[] constructors = Tiger.class.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
/*public com.wonders.week01.Tiger()
public com.wonders.week01.Tiger(java.lang.String)*/
}

/*
* public Field getField(String name)
* (1)throws NoSuchFieldException, SecurityException
* (2)如果存在该成员变量,则会返回该成员变量,
* 形式:权限修饰符 包名.类名.成员变量名
*/
try {
Field field = Tiger.class.getField("name");
System.out.println(field);
//          Field field1 = Tiger.class.getField("furColor");
//          System.out.println(field1);//java.lang.NoSuchFieldException
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}

/*
* public Method getMethod(String name, Class<?>... parameterTypes)
* (1)throws NoSuchMethodException, SecurityException
* (2)第一个参数是一个字符串类型(方法名字),第二个参数是一个Class类型(参数的类型)
* (3)返回值是方法的具体名字包含参数列表
*/
try {
Method m = Tiger.class.getMethod("eat", String.class);
System.out.println(m);
//public void com.wonders.week01.Tiger.eat(java.lang.String)
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}

/*
* public Class<?>[] getDeclaredClasses()
* (1)throws SecurityException
* (2)返回值类型是一个Class类型数组
* (3)返回值是该对象所在类中的所有接口和类,除了inherited修饰的的类和接口
*/
Class[] classes = Tiger.class.getDeclaredClasses();
for (Class class3 : classes) {
System.out.println("=" + class3);
/*=class com.wonders.week01.Tiger$A
=class com.wonders.week01.Tiger$C
=class com.wonders.week01.Tiger$D
=interface com.wonders.week01.Tiger$IA*/
}

/*
* public Field[] getDeclaredFields()
* (1)throws SecurityException
* (2)返回值类型是Field类型数组
* (3)返回值是该对象所在类中的所有成员变量,除了inherited修饰的成员变量
*/
Field[] fields2 = Tiger.class.getDeclaredFields();
for (Field field : fields2) {
System.out.println(field);
/*public java.lang.String com.wonders.week01.Tiger.name
private java.lang.String com.wonders.week01.Tiger.age
protected java.lang.String com.wonders.week01.Tiger.address
java.lang.String com.wonders.week01.Tiger.furColor*/
}

/*
* public Method[] getDeclaredMethods()
* (1)throws SecurityException
* (2)返回值类型是Method类型数组
* (3)返回值是该对象所在类中的所有方法,除了inherited修饰的方法
*/
Method[] methods2 = Tiger.class.getDeclaredMethods();
for (Method method : methods2) {
System.out.println(method);
//          public void com.wonders.week01.Tiger.eat(java.lang.String)
}

/*
*  public Constructor<?>[] getDeclaredConstructors()
*  (1)throws SecurityException
*  (2)返回值类型是Constructor类型数组
*  (3)返回值是该对象所在类中的所有构造方法
*  形式: 权限修饰符   包名.构造方法名(参数列表)
*/
Constructor[] constructors2 = Tiger.class.getDeclaredConstructors();
for (Constructor constructor : constructors2) {
System.out.println(constructor+"@");
/*public com.wonders.week01.Tiger(java.lang.String)@
private com.wonders.week01.Tiger(java.lang.String,java.lang.String)@
public com.wonders.week01.Tiger()@*/
}

/*
* public Field getDeclaredField(String name)
* (1)throws NoSuchFieldException, SecurityException
*/
Field field;
try {
field = Tiger.class.getDeclaredField("name");
System.out.println(field);
//public java.lang.String com.wonders.week01.Tiger.name
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}

/*
* public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
* (1)throws NoSuchMethodException, SecurityException
* (2)返回值类型是Method类
*/
try {
Method method = Tiger.class.getDeclaredMethod("eat", String.class);
System.out.println(method);
//public void com.wonders.week01.Tiger.eat(java.lang.String)
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}

}

public int print(){
return 99;
}
}


package com.wonders.week01;

public class Tiger extends Animal{

public String name;
private String age;
protected String address;
String furColor;

public Tiger(){

}
private Tiger(String name,String age){
this.name = name;
this.age = age;
}

public Tiger(String name){
this.name = "zhangsan";
}

public void eat(String food){

}
public class A {

}

private class C{

}

protected class D{

}

public interface IA{

}

}


package com.wonders.week01;

public interface IClass {

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  api java class