API之Class学习

对于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 {

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值