java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

最近做一个药店的项目,项目是由SSH框架写的,由于一直对反射和注解不是很了解,所以,对于刚接触框架的我来说,写项目实在是困难,正好今天有时间,顺便写了介个小案例。用来实践。利用反射,得到该类的所有属性、所有方法、所有构造函数:

<b>public static void </b>main(String[] args) <b>throws </b>ClassNotFoundException, InvocationTargetException, IllegalAccessException {
Class clazz = Class.forName(<b>"java.lang.String"</b>);
    Field[] fields = clazz.getFields();
    Method[] methods = clazz.getMethods();
    Constructor[] constructors = clazz.getConstructors();

    <b>for </b>(Field field:fields){
        System.<b>out</b>.println(field);
    }
    <b>for </b>(Method method:methods){
        System.<b>out</b>.println(method);
    }
    <b>for </b>(Constructor constructor: constructors){
        System.<b>out</b>.println(constructor);
    }

    System.<b>out</b>.println(<b>"</b><b>以下是判断</b><b>java.lang.String</b><b>的类别</b><b>"</b>);
    System.<b>out</b>.println(clazz.isAnnotation());
    System.<b>out</b>.println(clazz.isArray());
    System.<b>out</b>.println(clazz.isEnum());
    System.<b>out</b>.println(clazz.isInterface());
    System.<b>out</b>.println(clazz.isLocalClass());
    System.<b>out</b>.println(clazz.isMemberClass());
    System.<b>out</b>.println(clazz.isPrimitive());
    System.<b>out</b>.println(clazz.isSynthetic());
    System.<b>out</b>.println(clazz.isInstance(<b>new </b>String()));

}

输出结果:public static final java.util.Comparator java.lang.String.CASE_INSENSITIVE_ORDERpublic boolean java.lang.String.equals(java.lang.Object)public java.lang.String java.lang.String.toString()public int java.lang.String.hashCode()public int java.lang.String.compareTo(java.lang.String)public int java.lang.String.compareTo(java.lang.Object)public int java.lang.String.indexOf(java.lang.String,int)public int java.lang.String.indexOf(java.lang.String)public int java.lang.String.indexOf(int,int)public int java.lang.String.indexOf(int)public static java.lang.String java.lang.String.valueOf(int)public static java.lang.String java.lang.String.valueOf(long)public static java.lang.String java.lang.String.valueOf(float)public static java.lang.String java.lang.String.valueOf(boolean)public static java.lang.String java.lang.String.valueOf(char[])public static java.lang.String java.lang.String.valueOf(char[],int,int)public static java.lang.String java.lang.String.valueOf(java.lang.Object)public static java.lang.String java.lang.String.valueOf(char)public static java.lang.String java.lang.String.valueOf(double)public char java.lang.String.charAt(int)public int java.lang.String.codePointAt(int)public int java.lang.String.codePointBefore(int)public int java.lang.String.codePointCount(int,int)public int java.lang.String.compareToIgnoreCase(java.lang.String)public java.lang.String java.lang.String.concat(java.lang.String)public boolean java.lang.String.contains(java.lang.CharSequence)public boolean java.lang.String.contentEquals(java.lang.CharSequence)public boolean java.lang.String.contentEquals(java.lang.StringBuffer)public static java.lang.String java.lang.String.copyValueOf(char[])public static java.lang.String java.lang.String.copyValueOf(char[],int,int)public boolean java.lang.String.endsWith(java.lang.String)public boolean java.lang.String.equalsIgnoreCase(java.lang.String)public static java.lang.String java.lang.String.format(java.util.Locale,java.lang.String,java.lang.Object[])public static java.lang.String java.lang.String.format(java.lang.String,java.lang.Object[])public void java.lang.String.getBytes(int,int,byte[],int)public byte[] java.lang.String.getBytes(java.nio.charset.Charset)public byte[] java.lang.String.getBytes(java.lang.String) throws java.io.UnsupportedEncodingExceptionpublic byte[] java.lang.String.getBytes()public void java.lang.String.getChars(int,int,char[],int)public native java.lang.String java.lang.String.intern()public boolean java.lang.String.isEmpty()public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.CharSequence[])public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.Iterable)public int java.lang.String.lastIndexOf(int)public int java.lang.String.lastIndexOf(java.lang.String)public int java.lang.String.lastIndexOf(java.lang.String,int)public int java.lang.String.lastIndexOf(int,int)public int java.lang.String.length()public boolean java.lang.String.matches(java.lang.String)public int java.lang.String.offsetByCodePoints(int,int)public boolean java.lang.String.regionMatches(int,java.lang.String,int,int)public boolean java.lang.String.regionMatches(boolean,int,java.lang.String,int,int)public java.lang.String java.lang.String.replace(char,char)public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence)public java.lang.String java.lang.String.replaceAll(java.lang.String,java.lang.String)public java.lang.String java.lang.String.replaceFirst(java.lang.String,java.lang.String)public java.lang.String[] java.lang.String.split(java.lang.String)public java.lang.String[] java.lang.String.split(java.lang.String,int)public boolean java.lang.String.startsWith(java.lang.String,int)public boolean java.lang.String.startsWith(java.lang.String)public java.lang.CharSequence java.lang.String.subSequence(int,int)public java.lang.String java.lang.String.substring(int)public java.lang.String java.lang.String.substring(int,int)public char[] java.lang.String.toCharArray()public java.lang.String java.lang.String.toLowerCase(java.util.Locale)public java.lang.String java.lang.String.toLowerCase()public java.lang.String java.lang.String.toUpperCase()public java.lang.String java.lang.String.toUpperCase(java.util.Locale)public java.lang.String java.lang.String.trim()public final void java.lang.Object.wait() throws java.lang.InterruptedExceptionpublic final void java.lang.Object.wait(long,int) throws java.lang.InterruptedExceptionpublic final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic final native java.lang.Class java.lang.Object.getClass()public final native void java.lang.Object.notify()public final native void java.lang.Object.notifyAll()public default java.util.stream.IntStream java.lang.CharSequence.chars()public default java.util.stream.IntStream java.lang.CharSequence.codePoints()public java.lang.String(byte[],int,int)public java.lang.String(byte[],java.nio.charset.Charset)public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingExceptionpublic java.lang.String(byte[],int,int,java.nio.charset.Charset)public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingExceptionpublic java.lang.String(java.lang.StringBuilder)public java.lang.String(java.lang.StringBuffer)public java.lang.String(byte[])public java.lang.String(int[],int,int)public java.lang.String()public java.lang.String(char[])public java.lang.String(java.lang.String)public java.lang.String(char[],int,int)public java.lang.String(byte[],int)public java.lang.String(byte[],int,int,int)以下是判断java.lang.String的类别falsefalsefalsefalsefalsefalsefalsefalsetrue利用反射,得到该类的构造函数,并通过构造函数来创建该类的对象!!

<b>public static void </b>main(String[] args) <b>throws </b>IllegalAccessException, InvocationTargetException, InstantiationException {
    String string = <b>"shuxue"</b>;    Class classs = string.getClass();    Constructor[] constructors = classs.getConstructors();    <b>for </b>(Constructor constructor : constructors){        Parameter[] parameters = constructor.getParameters();        <b>if </b>(parameters.<b>length </b>== 1) {            <b>for </b>(Parameter parameter : parameters){                <b>if </b>(parameter.getType().equals(<b>"String"</b>.getClass()))                System.<b>out</b>.println(constructor.newInstance(<b>"sad"</b>));            }        }    }}
输出结果:
sad
利用反射,得到该类的方法,并通过反射去执行方法:
<b>public static void </b>main(String[] args) <b>throws </b>InvocationTargetException, IllegalAccessException {    String string = <b>"shuxue"</b>;    Class classs = string.getClass();    Method[] methods = classs.getMethods();    <b>for</b>(Method method:methods){        <b>if </b>(method.getName().equals(<b>"length"</b>)){            System.<b>out</b>.println(method.invoke(string));        }        <b>if </b>(method.getName().equals(<b>"endsWith"</b>)){            System.<b>out</b>.println(method.invoke(string,<b>"s"</b>));            System.<b>out</b>.println(method.invoke(string,<b>"e"</b>));        }    }}
输出结果:
falsetrue6
通过上面的小案例可以知道:反射可以在程序运行的时候,得到该类的所有属性,方法和构造函数。并且通过反射可以执行类中的方法和构造函数!如果有注解的话,还可以得到他的注解,Sturct2就是用反射的机制形成的框架!学习反射能很好的帮助我们去学习SSH框架和java!!!

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。