我的java学习笔记(12)关于反射(part 1)

1.能够分析类能力的程序称为反射。

2.在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。

3.这些保存信息的类被称为Class。

4.Object类中的getClass()方法将会返回一个Class类型的实例。

String s = "hello";Class c1 = s.getClass();5.如果类在一个包里,包的名字也作为类名的一部分。

6.获得类名的三种方法

a.

Date d = new Date();Class c1 = d.getClass();String name = v1.getName();

b.

String className = "java.util.Date";//这里字符串中存储必须为类名或接口名Class c1 = Class.forName(className);String name = c1.getName();

c.Class c1 = String.class;string name = c1.getName();7.一个Class对象实际上表示的是一个类型,,而这个类型未必一定是一种类。例如,int不是类,但是int.class是一个Class类型的对象。

8.虚拟机为每个类型管理一个Class对象。

9.newInstance方法可以创建一个实例对象,但注意该方法返回的是Object类型。

10.当程序运行过程中发生错误是,就会“抛出异常”。抛出异常比终止程序要灵活的多,这是因为可以提供一个“捕获”异常的处理器对异常情况进行处理。

11.异常有两种类型:未检出异常和已检查异常。

12.将可能抛出已检查异常的一个或多个方法调用代码放在try块中,然后在catch子句中提供处理代码。

try{…}catch(Exception e){e.printStrackTrace();}13.在java.lang.reflect包中有三个类Field、Method和Constuctor分别用于描述类的域、方法和构造器。三个类都有一个getName的方法,来返回项目的名称。

14.Field类有一个getType方法,用来返回描述域所属类型的Class对象。

15.Class类中的getFields、getMethods和getConstructors方法将分别返回类提供的public域、方法和类。

16.Class类中的getDeclaredFields、getDeclaredMethods和getDeclaredConstructors方法将分别返回类提供的全部域、方法和类。

实例代码

import java.util.*;import java.lang.reflect.*;public class test {public static void main(String[] args){String name;Scanner in = new Scanner(System.in);System.out.println("请输入类名:");name = in.next();try{Class c1 = Class.forName(name);Class superc1 = c1.getSuperclass();String modifiers = Modifier.toString(c1.getModifiers());if(modifiers.length() > 0)System.out.println(modifiers + " ");System.out.print("Class " + name);if(superc1 != null && superc1 != Object.class)System.out.println(" extends " + superc1.getName());System.out.print("\n{\n");printConstructors(c1);System.out.println();printMethods(c1);System.out.println();printFields(c1);System.out.println("}");}catch(ClassNotFoundException e){e.printStackTrace();}System.exit(0);}public static void printConstructors(Class c1){Constructor[] con = c1.getDeclaredConstructors();for(Constructor c : con){String name = c.getName();System.out.print(" ");String modifiers = Modifier.toString(c.getModifiers());if(modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print( name + "(");Class[] paramType = c.getParameterTypes();for(int i = 0;i < paramType.length; i++){if(i > 0)System.out.print(",");System.out.print(paramType[i].getName());}System.out.println(")");}}public static void printMethods(Class c1){Method[] methods = c1.getDeclaredMethods();for(Method m : methods){Class retType = m.getReturnType();String name = m.getName();System.out.print(" ");String modifiers = Modifier.toString(m.getModifiers());if(modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print(retType.getName() + " " + name + "(");Class[] paramTypes = m.getParameterTypes();for(int i = 0; i < paramTypes.length;i++){if(i > 0)System.out.print(",");System.out.print(paramTypes[i].getName());}System.out.println(")");}}public static void printFields(Class c1){Field[] fields = c1.getDeclaredFields();for(Field f:fields){Class type = f.getType();String name = f.getName();System.out.print(" ");String modifiers = Modifier.toString(f.getModifiers());if(modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print(type.getName() + " " + name);}}}

输出结果

请输入类名:java.lang.Stringpublic finalClass java.lang.String{ public java.lang.String([B,int,int) public java.lang.String([B,java.nio.charset.Charset) public java.lang.String([B,java.lang.String) public java.lang.String([B,int,int,java.nio.charset.Charset) public java.lang.String([B,int,int,java.lang.String) java.lang.String([C,boolean) public java.lang.String(java.lang.StringBuilder) public java.lang.String(java.lang.StringBuffer) public java.lang.String([B) public java.lang.String([I,int,int) public java.lang.String() public java.lang.String([C) public java.lang.String(java.lang.String) public java.lang.String([C,int,int) public java.lang.String([B,int) public java.lang.String([B,int,int,int) public boolean equals(java.lang.Object) public java.lang.String toString() public int hashCode() public int compareTo(java.lang.String) public volatile int compareTo(java.lang.Object) public int indexOf(java.lang.String,int) public int indexOf(java.lang.String) public int indexOf(int,int) public int indexOf(int) static int indexOf([C,int,int,[C,int,int,int) static int indexOf([C,int,int,java.lang.String,int) public static java.lang.String valueOf(int) public static java.lang.String valueOf(long) public static java.lang.String valueOf(float) public static java.lang.String valueOf(boolean) public static java.lang.String valueOf([C) public static java.lang.String valueOf([C,int,int) public static java.lang.String valueOf(java.lang.Object) public static java.lang.String valueOf(char) public static java.lang.String valueOf(double) public char charAt(int) private static void checkBounds([B,int,int) public int codePointAt(int) public int codePointBefore(int) public int codePointCount(int,int) public int compareToIgnoreCase(java.lang.String) public java.lang.String concat(java.lang.String) public boolean contains(java.lang.CharSequence) public boolean contentEquals(java.lang.CharSequence) public boolean contentEquals(java.lang.StringBuffer) public static java.lang.String copyValueOf([C) public static java.lang.String copyValueOf([C,int,int) public boolean endsWith(java.lang.String) public boolean equalsIgnoreCase(java.lang.String) public static transient java.lang.String format(java.util.Locale,java.lang.String,[Ljava.lang.Object;) public static transient java.lang.String format(java.lang.String,[Ljava.lang.Object;) public void getBytes(int,int,[B,int) public [B getBytes(java.nio.charset.Charset) public [B getBytes(java.lang.String) public [B getBytes() public void getChars(int,int,[C,int) void getChars([C,int) private int indexOfSupplementary(int,int) public native java.lang.String intern() public boolean isEmpty() public static transient java.lang.String join(java.lang.CharSequence,[Ljava.lang.CharSequence;) public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable) public int lastIndexOf(int) public int lastIndexOf(java.lang.String) static int lastIndexOf([C,int,int,java.lang.String,int) public int lastIndexOf(java.lang.String,int) public int lastIndexOf(int,int) static int lastIndexOf([C,int,int,[C,int,int,int) private int lastIndexOfSupplementary(int,int) public int length() public boolean matches(java.lang.String) private boolean nonSyncContentEquals(java.lang.AbstractStringBuilder) public int offsetByCodePoints(int,int) public boolean regionMatches(int,java.lang.String,int,int) public boolean regionMatches(boolean,int,java.lang.String,int,int) public java.lang.String replace(char,char) public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence) public java.lang.String replaceAll(java.lang.String,java.lang.String) public java.lang.String replaceFirst(java.lang.String,java.lang.String) public [Ljava.lang.String; split(java.lang.String) public [Ljava.lang.String; split(java.lang.String,int) public boolean startsWith(java.lang.String,int) public boolean startsWith(java.lang.String) public java.lang.CharSequence subSequence(int,int) public java.lang.String substring(int) public java.lang.String substring(int,int) public [C toCharArray() public java.lang.String toLowerCase(java.util.Locale) public java.lang.String toLowerCase() public java.lang.String toUpperCase() public java.lang.String toUpperCase(java.util.Locale) public java.lang.String trim() private final [C value private int hash private static final long serialVersionUID private static final [Ljava.io.ObjectStreamField; serialPersistentFields public static final java.util.Comparator CASE_INSENSITIVE_ORDER}

深重如溺入蓝色的海洋,无法呼吸。

我的java学习笔记(12)关于反射(part 1)

相关文章:

你感兴趣的文章:

标签云: