//using DB.Interface;
//using DB.MySql;
//using DB.SqlServer;
using DB.Interface;
using System;
using System.Reflection;
namespace Reflection1
{
class Program
{
static void Main(string[] args)
{
#region MyRegion
Console.WriteLine("---------------------------------");
//IDBHelper mysqlDBHelper = new MySqlHelper();
//mysqlDBHelper.Query();
//动态加载
Assembly assembly = Assembly.Load("DB.MySql");
foreach (var module in assembly.GetModules())
{
Console.WriteLine(module.FullyQualifiedName);
foreach (var type in module.GetTypes())
{
Console.WriteLine(type.FullName);
foreach (var ctor in type.GetConstructors())
{
Console.WriteLine(ctor.Name);
}
foreach (var method in type.GetMethods())
{
Console.WriteLine(method.Name);
}
}
}
Console.WriteLine("---------------------------------");
/* IL metaData:元数据:清单
* ∧ ∧
* | |
C# -> 编译器 ->DLL/EXE->CLR/JIT->机器码
*/
//使用反射
Assembly assembly1 = Assembly.Load("DB.MySql");
Type type1 = assembly1.GetType("DB.MySql.MySqlHelper"); //必须是完整类型名称
object oDBHelper = Activator.CreateInstance(type1);
// oDBHelper.Query(); //报错 oDBHelper就是MySqlHelper的实例, 但是编译时是个object
dynamic dbHelper = oDBHelper; //dynamic避开编译器检查. 编译器只认可编译时类型, 编译时是个object
dbHelper.Query(); //编译通过
IDBHelper idBHelper = oDBHelper as IDBHelper;
idBHelper.Query(); //编译通过
#endregion
Console.WriteLine("-----------Factory----------------------");
IDBHelper idBHelper2 = SimpleFactory.CreatDBHelper();
idBHelper2.Query();
}
}
}
using DB.Interface;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using System.Configuration;
namespace Reflection1
{
public class SimpleFactory
{
private static string IDBHelperConfig = ConfigurationManager.AppSettings["IDBHelperConfig"];
public static IDBHelper CreatDBHelper()
{
//<add key="IDBHelperConfig" value="DB.MySql,DB.MySql.MySqlHelper"/>
Assembly assembly1 = Assembly.Load(IDBHelperConfig.Split(',')[0]); // 命名空间
Type type1 = assembly1.GetType(IDBHelperConfig.Split(',')[1]); //必须是完整类型名称, DB.MySql.MySqlHelper
object oDBHelper = Activator.CreateInstance(type1);
// oDBHelper.Query(); //报错 oDBHelper就是MySqlHelper的实例, 但是编译时是个object
//dynamic dbHelper = oDBHelper; //dynamic避开编译器检查. 编译器只认可编译时类型, 编译时是个object
//dbHelper.Query(); //编译通过
IDBHelper idBHelper = oDBHelper as IDBHelper;
idBHelper.Query(); //编译通过
return idBHelper;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DB.Interface
{
public interface IDBHelper
{
void Query();
}
}
using DB.Interface;
using System;
using System.Collections.Generic;
using System.Text;
namespace DB.MySql
{
public class MySqlHelper : IDBHelper
{
public MySqlHelper()
{
Console.WriteLine("{0}被构造", this.GetType().Name);
}
public void Query()
{
Console.WriteLine("{0}.Query", this.GetType().Name);
}
}
}
using DB.Interface;
using System;
using System.Collections.Generic;
using System.Text;
namespace DB.SqlServer
{
public class SqServerlHelper : IDBHelper
{
public SqServerlHelper()
{
Console.WriteLine("{0}被构造", this.GetType().Name);
}
public void Query()
{
Console.WriteLine("{0}.Query", this.GetType().Name);
}
}
}
package com.zg.reflaction;
/**
* @Auther: zhaoss
* @Date: 2022/8/7 - 08 - 07 - 18:51
* @Description: com.zg.reflaction
* @version: 1.0
*/
public class Person {
private Integer id = 1;
private String name = "zg";
private String gender="男";
public Person() {
System.out.println("Public 无参构造函数");
}
public Person(Integer id, String name, String gender) {
this.id = id;
this.name = name;
this.gender = gender;
System.out.println("Public 带参构造函数");
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public void GotoSchool()
{
System.out.println("去上学了!!!!");
}
}
package com.zg.reflaction;
import javax.naming.Context;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @Auther: zhaoss
* @Date: 2022/8/7 - 08 - 07 - 18:55
* @Description: com.zg.reflaction
* @version: 1.0
*/
public class ReflactionTest {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
//Person person = new Person();
// Class<? extends Person> aClass = person.getClass();
// System.out.println(aClass);
/*
我们创建了一个类,通过 编译(javac.exe),生成对应的.class文件,
之后使用java.exe(JVM的类加载器来完成)加载此.class文件,此.class文件加载到内存以后,
就是一个运行时类,存放在缓存区,这个运行时类就是一个Class的实例。
java.lang.class是反射的源头。
它有如下几个特点:
1.每一个运行时类只加载一次
2.有了Class的实例之后,我们才可以进行如下的操作:
2.1)创建对应的运行时类的对象
2.2)获取对应的运行时类的完整结构(属性、方法、构造器、内部类、父类、所在包、注解、异常…)
2.3)调用对应的运行时类的指定的结构(属性、方法、构造器)
2.4)反射的应用:动态代理。
在正常方式下:我们需要引入需要的“包类”名称——通过new实例化——取得实例化的对象
反射方式:实例化对象——getClass()方法——得到完整的“包类”名称。
这相当于是一个倒序的过程。
如何获取Class实例呢?
Class只有在实例后才能开始进行反射。下面是实例化的四种方式:
1.调用运行时类本身的.class属性
getName(); //获取全名 例如:com.bean.Book
getSimpleName() //获取类名 例如:Book
*/
Class<Person> clazz1 = Person.class;
System.out.println("clazz1:"+clazz1.getName());
Class<String> clazz2 = String.class; //需要无参构造
System.out.println("clazz2:"+clazz2.getName());
//2.通过运行时类的对象获取
Person person = new Person();
Class<? extends Person> clazz3 = person.getClass();
System.out.println("clazz3:"+clazz3.getName());
//3,通过Class的静态方法获取(反射的动态性)
String s = "com.zg.reflaction.Person";
Class<?> clazz4 = Class.forName(s);
//clazz4.newInstance();
System.out.println("clazz4:"+clazz4.getName());
//4.通过类的加载器
// ClassLoader classLoader = this.getClass().getClassLoader();
// Class<?> clazz5 = classLoader.loadClass(s);
// System.out.println(clazz5.getName());
// //通过反射获取无参无返回值成员方法[包含私有]并使用
// Constructor<Person> constructor = clazz1.getDeclaredConstructor(Context.class);
// //访问私有构造必须
// constructor.setAccessible(true);
//获取所有的构造函数
Constructor<?>[] constructors = clazz1.getDeclaredConstructors();
System.out.println(constructors);
for (Constructor c : constructors
) {
System.out.println("构造参数分别是:"+c);
System.out.println("修饰符分别是:"+ c.getModifiers());
}
/*
修饰符
0--默认不写 1--public 2--private 4--protected
8--static 16--final 32--synchronized
64--volatile 128--transient 256--native
512--interface 1024--abstract
*/
//获取单个构造函数
// try {
// Constructor constructor = clazz1.getConstructor(String.class);
// System.out.println(constructor);
// } catch (NoSuchMethodException e){
// e.printStackTrace();
// }
//获取包
Package aPackage = clazz1.getPackage();
System.out.println("包是:"+aPackage);
//获取接口:getInterfaces()
//获取父类:getSuperclass()
//获取方法,注意:它会将系统自带的方法也得到
Method[] methods = clazz2.getMethods();
for (Method m : methods
) {
System.out.println("方法分别是:"+m);
}
//getDeclaredMethods() //获取所有的方法,注意:它不会获取系统自带的方法
Method[] methods1 = clazz2.getDeclaredMethods();
for (Method m : methods1
) {
System.out.println("去除系统方法分别是:"+m);
}
//获取单个方法:
Method gotoSchool = clazz3.getMethod("GotoSchool");
gotoSchool.invoke(clazz3.newInstance(),null);
/*
获取字段
公开(Public)
getFields() //获取所有的公开字段
getField(String name) //参数可以指定字段 获取单个public字段
所有
getDeclaredFields() //获取所有的字段
getDeclaredField(String name) //获取单个字段 参数可以指定字段
*/
//实例化对象
//第一种方式
Person person1 = clazz1.newInstance();
//第二种方式:
Constructor constructor = clazz1.getDeclaredConstructor(); //获得无参构造
Object obj = constructor.newInstance(); //实例化book对象
//设置访问属性
// clz.setAccessible(true) //可访问
// clz.setAccessible(false) //不可访问
Field gender = clazz1.getDeclaredField("gender");
gender.setAccessible(true);
System.out.println(gender);
/*
使用方法
method.invoke(Object obj,Object... args)
obj:如果是实例方法,则放个该方法的类对象给它
obj:静态方法,写null
args:方法的参数值,没有写null,或不写都行
*/
Method gotoSchool2 = clazz3.getMethod("GotoSchool");
gotoSchool2.invoke(clazz3.newInstance(),null);
}
}
结果:
"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.3\lib\idea_rt.jar=31859:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;E:\javaCode\springhelloworld\nettytest\target\classes" com.zg.reflaction.ReflactionTest
clazz1:com.zg.reflaction.Person
clazz2:java.lang.String
Public 无参构造函数
clazz3:com.zg.reflaction.Person
clazz4:com.zg.reflaction.Person
[Ljava.lang.reflect.Constructor;@4554617c
构造参数分别是:public com.zg.reflaction.Person()
修饰符分别是:1
构造参数分别是:public com.zg.reflaction.Person(java.lang.Integer,java.lang.String,java.lang.String)
修饰符分别是:1
包是:package com.zg.reflaction
方法分别是:public 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.UnsupportedEncodingException
方法分别是:public 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.InterruptedException
方法分别是:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
方法分别是:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
方法分别是:public 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 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)
去除系统方法分别是:static int java.lang.String.indexOf(char[],int,int,char[],int,int,int)
去除系统方法分别是:static int java.lang.String.indexOf(char[],int,int,java.lang.String,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)
去除系统方法分别是:private static void java.lang.String.checkBounds(byte[],int,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.UnsupportedEncodingException
去除系统方法分别是:public byte[] java.lang.String.getBytes()
去除系统方法分别是:public void java.lang.String.getChars(int,int,char[],int)
去除系统方法分别是:void java.lang.String.getChars(char[],int)
去除系统方法分别是:private int java.lang.String.indexOfSupplementary(int,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)
去除系统方法分别是:static int java.lang.String.lastIndexOf(char[],int,int,java.lang.String,int)
去除系统方法分别是:public int java.lang.String.lastIndexOf(java.lang.String,int)
去除系统方法分别是:public int java.lang.String.lastIndexOf(int,int)
去除系统方法分别是:static int java.lang.String.lastIndexOf(char[],int,int,char[],int,int,int)
去除系统方法分别是:private int java.lang.String.lastIndexOfSupplementary(int,int)
去除系统方法分别是:public int java.lang.String.length()
去除系统方法分别是:public boolean java.lang.String.matches(java.lang.String)
去除系统方法分别是:private boolean java.lang.String.nonSyncContentEquals(java.lang.AbstractStringBuilder)
去除系统方法分别是: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 无参构造函数
去上学了!!!!
Public 无参构造函数
Public 无参构造函数
private java.lang.String com.zg.reflaction.Person.gender
Public 无参构造函数
去上学了!!!!
Process finished with exit code 0
该示例展示了Java中如何利用反射动态加载类,并实现接口调用。程序首先通过`Assembly.Load`加载指定DLL,然后通过`Activator.CreateInstance`创建对象,并使用`as`或`dynamic`关键字实现接口调用。此外,还演示了通过配置文件动态创建接口实现的简单工厂模式。
2486

被折叠的 条评论
为什么被折叠?



