例子1
Person
package com. atguigu. java3;
public class Person {
private String name;
public int age;
public Person ( ) {
}
public Person ( String name, int age) {
this . name = name;
this . age = age;
}
private Person ( String name) {
this . name = name;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public int getAge ( ) {
return age;
}
public void setAge ( int age) {
this . age = age;
}
@Override
public String toString ( ) {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
public void show ( ) {
System. out. println ( "你好,我是一个人" ) ;
}
private String showNation ( String nation) {
System. out. println ( "我的国籍是:" + nation) ;
return nation;
}
}
ReflectionTest
package com. atguigu. java3;
import org. junit. Test;
import java. lang. reflect. Constructor;
import java. lang. reflect. Field;
import java. lang. reflect. Method;
public class ReflectionTest {
@Test
public void test1 ( ) {
Person p1 = new Person ( "Tom" , 12 ) ;
p1. age= 10 ;
System. out. println ( p1. toString ( ) ) ;
p1. show ( ) ;
}
@Test
public void test2 ( ) throws Exception{
Class clazz = Person. class ;
Constructor cons = clazz. getConstructor ( String. class , int . class ) ;
Object obj = cons. newInstance ( "Tom" , 12 ) ;
Person p = ( Person) obj;
System. out. println ( p. toString ( ) ) ;
Field age = clazz. getDeclaredField ( "age" ) ;
age. set ( p, 10 ) ;
System. out. println ( p. toString ( ) ) ;
Method show = clazz. getDeclaredMethod ( "show" ) ;
show. invoke ( p) ;
System. out. println ( "**********" ) ;
Constructor cons1 = clazz. getDeclaredConstructor ( String. class ) ;
cons1. setAccessible ( true ) ;
Person p1 = ( Person) cons1. newInstance ( "Jerry" ) ;
System. out. println ( p1) ;
Field name = clazz. getDeclaredField ( "name" ) ;
name. setAccessible ( true ) ;
name. set ( p1, "HanMeimei" ) ;
System. out. println ( p1) ;
Method showNation = clazz. getDeclaredMethod ( "showNation" , String. class ) ;
showNation. setAccessible ( true ) ;
showNation. invoke ( p1, "中国" ) ;
}
}
例子2
package com. atguigu. java3;
import org. junit. Test;
public class ReflectionTest {
@Test
public void test1 ( ) {
Person p1 = new Person ( "Tom" , 12 ) ;
p1. age= 10 ;
System. out. println ( p1. toString ( ) ) ;
p1. show ( ) ;
}
@Test
public void test2 ( ) throws Exception {
Class clazz1 = Person. class ;
System. out. println ( clazz1) ;
Person p1 = new Person ( ) ;
Class clazz2 = p1. getClass ( ) ;
System. out. println ( clazz2) ;
Class clazz3 = Class. forName ( "com.atguigu.java3.Person" ) ;
System. out. println ( clazz3) ;
System. out. println ( clazz1 == clazz2) ;
System. out. println ( clazz1 == clazz3) ;
ClassLoader classLoader = ReflectionTest. class . getClassLoader ( ) ;
Class clazz4 = classLoader. loadClass ( "com.atguigu.java3.Person" ) ;
System. out. println ( clazz4) ;
}
}
例子3
package com. atguigu. java3;
import org. junit. Test;
public class ClassLoaderTest {
@Test
public void test1 ( ) {
ClassLoader classLoader = ClassLoaderTest. class . getClassLoader ( ) ;
System. out. println ( classLoader) ;
ClassLoader classLoader1 = classLoader. getParent ( ) ;
System. out. println ( classLoader1) ;
ClassLoader classLo2 = classLoader1. getParent ( ) ;
System. out. println ( classLo2) ;
ClassLoader classLoader3 = String. class . getClassLoader ( ) ;
System. out. println ( classLoader3) ;
}
}
例子4
ClassLoaderTest
package com. atguigu. java3;
import org. junit. Test;
import java. io. FileInputStream;
import java. util. Properties;
public class ClassLoaderTest {
@Test
public void test2 ( ) throws Exception{
Properties pros = new Properties ( ) ;
FileInputStream fis = new FileInputStream ( "src\\jdbc.properties" ) ;
pros. load ( fis) ;
String user = pros. getProperty ( "user" ) ;
String password = pros. getProperty ( "password" ) ;
System. out. println ( user) ;
System. out. println ( password) ;
}
}
jdbc.properties
user= wsf王少锋
password= abc123
例子5
package com. atguigu. java3;
import org. junit. Test;
public class NewInstanceTest {
@Test
public void test1 ( ) throws Exception{
Class clazz = Person. class ;
Object obj = clazz. newInstance ( ) ;
System. out. println ( obj) ;
}
}
例子6
package com. atguigu. java3;
import org. junit. Test;
import java. util. Random;
public class NewInstanceTest {
@Test
public void test2 ( ) {
int num = new Random ( ) . nextInt ( 3 ) ;
String classPath1 = "" ;
switch ( num) {
case 0 :
classPath1 = "java.util.Date" ;
break ;
case 1 :
classPath1 = "java.sql.Date" ;
break ;
case 2 :
classPath1 = "com.atguigu.java3.Person" ;
break ;
}
try {
Object obj = getInstance ( classPath1) ;
System. out. println ( obj) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
}
public Object getInstance ( String classPath) throws Exception{
Class clazz = Class. forName ( classPath) ;
return clazz. newInstance ( ) ;
}
}
例子7
Creature
package com. atguigu. java;
import java. io. Serializable;
public class Creature < T> implements Serializable {
private char gender;
public double weight;
private void breath ( ) {
System. out. println ( "生物呼吸" ) ;
}
public void eat ( ) {
System. out. println ( "生物吃东西" ) ;
}
}
MyAnnotation
package com. atguigu. java;
import java. lang. annotation. Retention;
import java. lang. annotation. RetentionPolicy;
import java. lang. annotation. Target;
import static java. lang. annotation. ElementType. * ;
@Target ( { TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE} )
@Retention ( RetentionPolicy. RUNTIME)
public @interface MyAnnotation {
String value ( ) default "hello" ;
}
MyInterface
package com. atguigu. java;
public interface MyInterface {
void info ( ) ;
}
Person
package com. atguigu. java;
@MyAnnotation ( value = "hi" )
public class Person extends Creature< String> implements Comparable< String> , MyInterface{
private String name;
int age;
public int id;
public Person ( ) {
}
@MyAnnotation ( value = "abc" )
private Person ( String name) {
this . name = name;
}
Person ( String name, int age) {
this . name = name;
this . age = age;
}
@MyAnnotation
private String show ( String nation) {
System. out. println ( "我的国籍是:" + nation) ;
return nation;
}
public String display ( String interests) {
return interests;
}
@Override
public void info ( ) {
System. out. println ( "我是一个人" ) ;
}
@Override
public int compareTo ( String o) {
return 0 ;
}
}
获取类的属性,权限修饰符,变量名…
package com. atguigu. java2;
import com. atguigu. java. Person;
import org. junit. Test;
import java. lang. reflect. Field;
import java. lang. reflect. Modifier;
public class FieldTest {
@Test
public void test1 ( ) {
Class clazz = Person. class ;
Field[ ] fields = clazz. getFields ( ) ;
for ( Field f : fields) {
System. out. println ( f) ;
}
System. out. println ( "**************************" ) ;
Field[ ] declaredFields = clazz. getDeclaredFields ( ) ;
for ( Field f : declaredFields) {
System. out. println ( f) ;
}
}
@Test
public void test2 ( ) {
Class clazz = Person. class ;
Field[ ] declaredFields = clazz. getDeclaredFields ( ) ;
for ( Field f : declaredFields) {
int modifiers = f. getModifiers ( ) ;
System. out. println ( Modifier. toString ( modifiers) ) ;
Class type = f. getType ( ) ;
System. out. println ( type. getName ( ) ) ;
String fName = f. getName ( ) ;
System. out. println ( fName) ;
System. out. println ( "*********" ) ;
}
}
}
获取子类中的所有方法和其注解,形参列表
package com. atguigu. java2;
import com. atguigu. java. Person;
import org. junit. Test;
import java. lang. annotation. Annotation;
import java. lang. reflect. Method;
import java. lang. reflect. Modifier;
public class MethodTest {
@Test
public void test1 ( ) {
Class clazz = Person. class ;
Method[ ] methods = clazz. getMethods ( ) ;
for ( Method m: methods) {
System. out. println ( m) ;
}
System. out. println ( ) ;
Method[ ] declaredMethods = clazz. getDeclaredMethods ( ) ;
for ( Method m: declaredMethods) {
System. out. println ( m) ;
}
}
@Test
public void test2 ( ) {
Class clazz = Person. class ;
Method[ ] declaredMethods = clazz. getDeclaredMethods ( ) ;
for ( Method m: declaredMethods) {
Annotation[ ] annos = m. getAnnotations ( ) ;
for ( Annotation a: annos) {
System. out. println ( a) ;
}
System. out. println ( Modifier. toString ( m. getModifiers ( ) ) + "\t" ) ;
System. out. println ( m. getReturnType ( ) . getName ( ) + "\t" ) ;
System. out. println ( m. getName ( ) + "\t" ) ;
Class[ ] parameterTypes = m. getParameterTypes ( ) ;
if ( ! ( parameterTypes == null && parameterTypes. length== 0 ) ) {
for ( int i= 0 ; i< parameterTypes. length; i++ ) {
System. out. println ( parameterTypes[ i] . getName ( ) + " args_ " + i) ;
}
}
Class[ ] exceptionTypes = m. getExceptionTypes ( ) ;
if ( ! ( exceptionTypes== null && exceptionTypes. length== 0 ) ) {
System. out. println ( "throws " ) ;
for ( int i= 0 ; i< exceptionTypes. length; i++ ) {
System. out. println ( exceptionTypes[ i] . getName ( ) + "," ) ;
}
}
}
}
}
获取子类中的所有构造器,获取运行时的父类,获取运行时带泛型的父类,获取运行时类的带泛型的父类的泛型,获取运行时类的接口,获取运行时类声明的注解
package com. atguigu. java2;
import com. atguigu. java. Person;
import org. junit. Test;
import java. lang. annotation. Annotation;
import java. lang. reflect. Constructor;
import java. lang. reflect. ParameterizedType;
import java. lang. reflect. Type;
public class OtherTest {
@Test
public void test1 ( ) {
Class clazz = Person. class ;
Constructor[ ] constructors = clazz. getConstructors ( ) ;
for ( Constructor c: constructors) {
System. out. println ( c) ;
}
System. out. println ( ) ;
Constructor[ ] declaredConstructors = clazz. getDeclaredConstructors ( ) ;
for ( Constructor c: declaredConstructors) {
System. out. println ( c) ;
}
}
@Test
public void test2 ( ) {
Class clazz = Person. class ;
Class superclass = clazz. getSuperclass ( ) ;
System. out. println ( superclass) ;
}
@Test
public void test3 ( ) {
Class clazz = Person. class ;
Type genericSuperclass = clazz. getGenericSuperclass ( ) ;
System. out. println ( genericSuperclass) ;
}
@Test
public void test4 ( ) {
Class clazz = Person. class ;
Type genericSuperclass = clazz. getGenericSuperclass ( ) ;
ParameterizedType paramType = ( ParameterizedType) genericSuperclass;
Type[ ] actualTypeArguments = paramType. getActualTypeArguments ( ) ;
System. out. println ( actualTypeArguments[ 0 ] . getTypeName ( ) ) ;
}
@Test
public void test5 ( ) {
Class clazz = Person. class ;
Class[ ] interfaces = clazz. getInterfaces ( ) ;
for ( Class c: interfaces) {
System. out. println ( c) ;
}
System. out. println ( ) ;
Class[ ] interfaces1 = clazz. getSuperclass ( ) . getInterfaces ( ) ;
for ( Class c: interfaces1) {
System. out. println ( c) ;
}
}
@Test
public void test6 ( ) {
Class clazz = Person. class ;
Package pack = clazz. getPackage ( ) ;
System. out. println ( pack) ;
}
@Test
public void test7 ( ) {
Class clazz = Person. class ;
Annotation[ ] annotations = clazz. getAnnotations ( ) ;
for ( Annotation annos: annotations) {
System. out. println ( annos) ;
}
}
}
例子8
package com. atguigu. java2;
import com. atguigu. java. Person;
import org. junit. Test;
import java. lang. reflect. Field;
public class ReflectionTest {
@Test
public void testField ( ) throws Exception{
Class clazz = Person. class ;
Person p = ( Person) clazz. newInstance ( ) ;
Field id = clazz. getField ( "id" ) ;
id. set ( p, 1001 ) ;
int PId = ( int ) id. get ( p) ;
System. out. println ( PId) ;
}
@Test
public void testField1 ( ) throws Exception{
Class clazz = Person. class ;
Person p = ( Person) clazz. newInstance ( ) ;
Field name = clazz. getDeclaredField ( "name" ) ;
name. setAccessible ( true ) ;
name. set ( p, "Tom" ) ;
System. out. println ( name. get ( p) ) ;
}
}
例子9
package com. atguigu. java2;
import com. atguigu. java. Person;
import org. junit. Test;
import java. lang. reflect. Method;
public class ReflectionTest {
@Test
public void testMethod ( ) throws Exception{
Class clazz = Person. class ;
Person p = ( Person) clazz. newInstance ( ) ;
Method show = clazz. getDeclaredMethod ( "show" , String. class ) ;
show. setAccessible ( true ) ;
Object returnValue = show. invoke ( p, "CHN" ) ;
System. out. println ( returnValue) ;
System. out. println ( "***************如何调用静态方法************" ) ;
Method showDesc = clazz. getDeclaredMethod ( "showDesc" ) ;
showDesc. setAccessible ( true ) ;
Object returnVal = showDesc. invoke ( Person. class ) ;
System. out. println ( returnVal) ;
}
}
例子10
package com. atguigu. java2;
import com. atguigu. java. Person;
import org. junit. Test;
import java. lang. reflect. Constructor;
public class ReflectionTest {
@Test
public void testConstructor ( ) throws Exception{
Class clazz = Person. class ;
Constructor constructor = clazz. getDeclaredConstructor ( String. class ) ;
constructor. setAccessible ( true ) ;
Person per = ( Person) constructor. newInstance ( "Tom" ) ;
System. out. println ( per) ;
}
}