反射机制的应用举例

/*
 * 本程序演示了反射机制的一些使用方法。
 * 所有反射操作的入口点都是 java.lang.Class。
 * 通过java.lang.Class,我们可以得到关于类的所有内容,包括构造函数、属性和方法,而Java都有这些内容的数据类型,这些数据类型里有相应的方法,从而可以访问构造函数、属性和方法等内容,实现反射机制。
 */
package com.lwj.demo;

import java.lang.reflect.*;

public class ReflectDemo{
 public static void main(String[] args) throws Exception {
  
  //Class<?> objClass = java.lang.Character.class;
  //Class<?> objClass = Character.class;
  Class<?> objClass = new Character('a').getClass();//以上三条语句演示了如何通过类和对象得到Class Objects
  System.out.println("类名:" +objClass.getName()+"/n");//返回类的全名(包括所在的包)
  
  printClasses(objClass);//打印其中的member interfaces, classes, or enums
  
  Constructor<?>[] cs=objClass.getDeclaredConstructors();
  System.out.println(cs.length+"个构造函数:");
  printMembers(cs);
  
  Field[] fs=objClass.getDeclaredFields();
  System.out.println(fs.length+"个属性:");
  printMembers(fs);
  
  Method[] ms=objClass.getDeclaredMethods();
  System.out.println(ms.length+"个方法:");
  printMembers(ms);
 }
 
 private static void printClasses(Class<?> c) {
  System.out.format("Classes:%n");
  Class<?>[] clss = c.getDeclaredClasses();
  for (Class<?> cls : clss)
      System.out.format("  %s%n", cls.getCanonicalName());
  if (clss.length == 0)
      System.out.format("  -- No member interfaces, classes, or enums --%n");
  System.out.format("%n");
     }

 public static void printMembers(Member[] mbrs){
  for (Member mbr : mbrs) {
     if (mbr instanceof Field)
   System.out.format("  %s%n", ((Field)mbr).toGenericString());
      else if (mbr instanceof Constructor<?>)
   System.out.format("  %s%n", ((Constructor<?>)mbr).toGenericString());
      else if (mbr instanceof Method)
   System.out.format("  %s%n", ((Method)mbr).toGenericString());
  }
 }
 
}

运行结果为:

类名:java.lang.Character

Classes:
  java.lang.Character.CharacterCache
  java.lang.Character.Subset
  java.lang.Character.UnicodeBlock

1个构造函数:
  public java.lang.Character(char)
70个属性:
  public static final int java.lang.Character.MIN_RADIX
  public static final int java.lang.Character.MAX_RADIX
  public static final char java.lang.Character.MIN_VALUE
  public static final char java.lang.Character.MAX_VALUE
  public static final java.lang.Class<java.lang.Character> java.lang.Character.TYPE
  public static final byte java.lang.Character.UNASSIGNED
  public static final byte java.lang.Character.UPPERCASE_LETTER
  public static final byte java.lang.Character.LOWERCASE_LETTER
  public static final byte java.lang.Character.TITLECASE_LETTER
  public static final byte java.lang.Character.MODIFIER_LETTER
  public static final byte java.lang.Character.OTHER_LETTER
  public static final byte java.lang.Character.NON_SPACING_MARK
  public static final byte java.lang.Character.ENCLOSING_MARK
  public static final byte java.lang.Character.COMBINING_SPACING_MARK
  public static final byte java.lang.Character.DECIMAL_DIGIT_NUMBER
  public static final byte java.lang.Character.LETTER_NUMBER
  public static final byte java.lang.Character.OTHER_NUMBER
  public static final byte java.lang.Character.SPACE_SEPARATOR
  public static final byte java.lang.Character.LINE_SEPARATOR
  public static final byte java.lang.Character.PARAGRAPH_SEPARATOR
  public static final byte java.lang.Character.CONTROL
  public static final byte java.lang.Character.FORMAT
  public static final byte java.lang.Character.PRIVATE_USE
  public static final byte java.lang.Character.SURROGATE
  public static final byte java.lang.Character.DASH_PUNCTUATION
  public static final byte java.lang.Character.START_PUNCTUATION
  public static final byte java.lang.Character.END_PUNCTUATION
  public static final byte java.lang.Character.CONNECTOR_PUNCTUATION
  public static final byte java.lang.Character.OTHER_PUNCTUATION
  public static final byte java.lang.Character.MATH_SYMBOL
  public static final byte java.lang.Character.CURRENCY_SYMBOL
  public static final byte java.lang.Character.MODIFIER_SYMBOL
  public static final byte java.lang.Character.OTHER_SYMBOL
  public static final byte java.lang.Character.INITIAL_QUOTE_PUNCTUATION
  public static final byte java.lang.Character.FINAL_QUOTE_PUNCTUATION
  static final int java.lang.Character.ERROR
  public static final byte java.lang.Character.DIRECTIONALITY_UNDEFINED
  public static final byte java.lang.Character.DIRECTIONALITY_LEFT_TO_RIGHT
  public static final byte java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT
  public static final byte java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
  public static final byte java.lang.Character.DIRECTIONALITY_EUROPEAN_NUMBER
  public static final byte java.lang.Character.DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
  public static final byte java.lang.Character.DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
  public static final byte java.lang.Character.DIRECTIONALITY_ARABIC_NUMBER
  public static final byte java.lang.Character.DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
  public static final byte java.lang.Character.DIRECTIONALITY_NONSPACING_MARK
  public static final byte java.lang.Character.DIRECTIONALITY_BOUNDARY_NEUTRAL
  public static final byte java.lang.Character.DIRECTIONALITY_PARAGRAPH_SEPARATOR
  public static final byte java.lang.Character.DIRECTIONALITY_SEGMENT_SEPARATOR
  public static final byte java.lang.Character.DIRECTIONALITY_WHITESPACE
  public static final byte java.lang.Character.DIRECTIONALITY_OTHER_NEUTRALS
  public static final byte java.lang.Character.DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING
  public static final byte java.lang.Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE
  public static final byte java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
  public static final byte java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
  public static final byte java.lang.Character.DIRECTIONALITY_POP_DIRECTIONAL_FORMAT
  public static final char java.lang.Character.MIN_HIGH_SURROGATE
  public static final char java.lang.Character.MAX_HIGH_SURROGATE
  public static final char java.lang.Character.MIN_LOW_SURROGATE
  public static final char java.lang.Character.MAX_LOW_SURROGATE
  public static final char java.lang.Character.MIN_SURROGATE
  public static final char java.lang.Character.MAX_SURROGATE
  public static final int java.lang.Character.MIN_SUPPLEMENTARY_CODE_POINT
  public static final int java.lang.Character.MIN_CODE_POINT
  public static final int java.lang.Character.MAX_CODE_POINT
  private final char java.lang.Character.value
  private static final long java.lang.Character.serialVersionUID
  private static final int java.lang.Character.FAST_PATH_MAX
  public static final int java.lang.Character.SIZE
  static final boolean java.lang.Character.$assertionsDisabled
86个方法:
  public static boolean java.lang.Character.isJavaIdentifierStart(char)
  public static boolean java.lang.Character.isJavaIdentifierStart(int)
  public static boolean java.lang.Character.isJavaIdentifierPart(int)
  public static boolean java.lang.Character.isJavaIdentifierPart(char)
  public int java.lang.Character.hashCode()
  public static char java.lang.Character.reverseBytes(char)
  public boolean java.lang.Character.equals(java.lang.Object)
  public int java.lang.Character.compareTo(java.lang.Object)
  public int java.lang.Character.compareTo(java.lang.Character)
  public java.lang.String java.lang.Character.toString()
  public static java.lang.String java.lang.Character.toString(char)
  public static int java.lang.Character.charCount(int)
  public static int java.lang.Character.codePointAt(char[],int,int)
  public static int java.lang.Character.codePointAt(java.lang.CharSequence,int)
  public static int java.lang.Character.codePointAt(char[],int)
  static int java.lang.Character.codePointAtImpl(char[],int,int)
  public static int java.lang.Character.codePointBefore(java.lang.CharSequence,int)
  public static int java.lang.Character.codePointBefore(char[],int)
  public static int java.lang.Character.codePointBefore(char[],int,int)
  static int java.lang.Character.codePointBeforeImpl(char[],int,int)
  public static int java.lang.Character.codePointCount(char[],int,int)
  public static int java.lang.Character.codePointCount(java.lang.CharSequence,int,int)
  static int java.lang.Character.codePointCountImpl(char[],int,int)
  public static int java.lang.Character.offsetByCodePoints(java.lang.CharSequence,int,int)
  public static int java.lang.Character.offsetByCodePoints(char[],int,int,int,int)
  static int java.lang.Character.offsetByCodePointsImpl(char[],int,int,int,int)
  public static int java.lang.Character.toChars(int,char[],int)
  public static char[] java.lang.Character.toChars(int)
  public static int java.lang.Character.toLowerCase(int)
  public static char java.lang.Character.toLowerCase(char)
  static void java.lang.Character.toSurrogates(int,char[],int)
  public static char java.lang.Character.toUpperCase(char)
  public static int java.lang.Character.toUpperCase(int)
  static char[] java.lang.Character.toUpperCaseCharArray(int)
  static int java.lang.Character.toUpperCaseEx(int)
  public static java.lang.Character java.lang.Character.valueOf(char)
  public static int java.lang.Character.getType(int)
  public static int java.lang.Character.getType(char)
  public static boolean java.lang.Character.isHighSurrogate(char)
  public static boolean java.lang.Character.isLowSurrogate(char)
  public static boolean java.lang.Character.isValidCodePoint(int)
  public char java.lang.Character.charValue()
  public static int java.lang.Character.digit(int,int)
  public static int java.lang.Character.digit(char,int)
  public static char java.lang.Character.forDigit(int,int)
  public static byte java.lang.Character.getDirectionality(int)
  public static byte java.lang.Character.getDirectionality(char)
  public static int java.lang.Character.getNumericValue(int)
  public static int java.lang.Character.getNumericValue(char)
  private static int java.lang.Character.getPlane(int)
  public static boolean java.lang.Character.isDefined(char)
  public static boolean java.lang.Character.isDefined(int)
  public static boolean java.lang.Character.isDigit(char)
  public static boolean java.lang.Character.isDigit(int)
  public static boolean java.lang.Character.isISOControl(int)
  public static boolean java.lang.Character.isISOControl(char)
  public static boolean java.lang.Character.isIdentifierIgnorable(char)
  public static boolean java.lang.Character.isIdentifierIgnorable(int)
  public static boolean java.lang.Character.isJavaLetter(char)
  public static boolean java.lang.Character.isJavaLetterOrDigit(char)
  public static boolean java.lang.Character.isLetter(int)
  public static boolean java.lang.Character.isLetter(char)
  public static boolean java.lang.Character.isLetterOrDigit(int)
  public static boolean java.lang.Character.isLetterOrDigit(char)
  public static boolean java.lang.Character.isLowerCase(int)
  public static boolean java.lang.Character.isLowerCase(char)
  public static boolean java.lang.Character.isMirrored(int)
  public static boolean java.lang.Character.isMirrored(char)
  public static boolean java.lang.Character.isSpace(char)
  public static boolean java.lang.Character.isSpaceChar(int)
  public static boolean java.lang.Character.isSpaceChar(char)
  public static boolean java.lang.Character.isSupplementaryCodePoint(int)
  public static boolean java.lang.Character.isSurrogatePair(char,char)
  public static boolean java.lang.Character.isTitleCase(char)
  public static boolean java.lang.Character.isTitleCase(int)
  public static boolean java.lang.Character.isUnicodeIdentifierPart(int)
  public static boolean java.lang.Character.isUnicodeIdentifierPart(char)
  public static boolean java.lang.Character.isUnicodeIdentifierStart(int)
  public static boolean java.lang.Character.isUnicodeIdentifierStart(char)
  public static boolean java.lang.Character.isUpperCase(char)
  public static boolean java.lang.Character.isUpperCase(int)
  public static boolean java.lang.Character.isWhitespace(char)
  public static boolean java.lang.Character.isWhitespace(int)
  public static int java.lang.Character.toCodePoint(char,char)
  public static int java.lang.Character.toTitleCase(int)
  public static char java.lang.Character.toTitleCase(char)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值