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 { }
相关文章推荐
- yate学习--yateclass.h--class YATE_API ObjList : public GenObject
- yate学习--yateclass.h--class YATE_API GenObject
- yate学习--yateclass.h--class YATE_API SocketAddr : public GenObject
- yate学习--yateclass.h--class YATE_API NamedString : public String
- yate学习--yatengine.h--class YATE_API MessageReceiver : public GenObject
- yate学习--yateclass.h--class YATE_API Socket : public Stream
- gradle学习二 利用javassist api修改class字节码
- jqueryAPI学习之add(),addBack(),addClass(),after()学习
- yate学习--yateclass.h--class YATE_API Runnable
- yate学习--yateclass.h--class YATE_API NamedList : public String
- yate学习--yateclass.h--class YATE_API Thread : public Runnable
- yate学习--yateclass.h--class YATE_API NamedCounter : public String
- iOS学习----------详解FFMPEG API
- c++跨平台技术学习(三)--使用标准API
- 一边走路一边学习 关于struct和class的区别等几个知识点总结
- 【cuda学习笔记】2.纹理对象API的使用,实现sobel边缘检测
- spring boot 学习(三)API注解记录及测试
- ACE_Reactor学习2 Reactor类API的功能分类
- API DEMO 学习
- backbone1.0.0 — March 20, 2013API学习(Backbone.View)