package java0;
import com.sun.org.apache.xpath.internal.SourceTree;
import org.junit.Test;
import java.lang.annotation.ElementType;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionTest {
@Test
public void test1() {
Person p1 = new Person("TOM", 11);
p1.age=10;
System.out.println(p1.toString());
p1.show();
}
@Test
public void test2() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class clazz = Person.class;
Constructor cons = clazz.getConstructor(String.class, int.class);
Object obj = cons.newInstance("TOM", 11);
Person p=(Person)obj;
System.out.println(p.toString());
Field age = clazz.getDeclaredField("age");
age.set(p,10);
System.out.println(p);
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,"hahahaha");
System.out.println(p1);
Method showNation = clazz.getDeclaredMethod("showNation", String.class);
showNation.setAccessible(true);
String nation = (String) showNation.invoke(p1, "中国");
System.out.println(nation);
}
@Test
public void test3() throws ClassNotFoundException {
Class clazz1 = Person.class;
System.out.println(clazz1);
Person p1=new Person();
Class clazz2 = p1.getClass();
System.out.println(clazz2);
Class clazz3 = Class.forName("java0.Person");
System.out.println(clazz3);
System.out.println(clazz1==clazz2);
System.out.println(clazz1==clazz3);
ClassLoader classLoader = ReflectionTest.class.getClassLoader();
Class clazz4 = classLoader.loadClass("java0.Person");
System.out.println(clazz4);
System.out.println(clazz1=clazz4);
}
@Test
public void test4(){
Class c1=Object.class;
Class<Comparable> comparableClass = Comparable.class;
Class<String[]> aClass = String[].class;
Class<int[][]> aClass1 = int[][].class;
Class<ElementType> elementTypeClass = ElementType.class;
Class<Override> overrideClass = Override.class;
Class<Integer> integerClass = int.class;
Class<Void> voidClass = void.class;
Class<Class> classClass = Class.class;
int[] a=new int[10];
int[] b=new int[100];
Class<? extends int[]> aClass2 = a.getClass();
Class<? extends int[]> aClass3 = b.getClass();
System.out.println(aClass2==aClass3);
}
}
package java0;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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 classLoader2 = classLoader1.getParent();
System.out.println(classLoader2);
ClassLoader classLoader3 = String.class.getClassLoader();
System.out.println(classLoader3);
}
@Test
public void test2() throws IOException {
Properties pros=new Properties();
ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("jdbc1.properties");
pros.load(is);
String user=pros.getProperty("user");
String password=pros.getProperty("password");
System.out.println(user+"---"+password);
}
}
package java0;
import org.junit.Test;
import java.util.Random;
public class NewInstanceTest {
@Test
public void test1() throws IllegalAccessException, InstantiationException {
Class<Person> clazz = Person.class;
Person person = clazz.newInstance();
System.out.println(person);
}
@Test
public void test2() throws IllegalAccessException, InstantiationException, ClassNotFoundException {
for(int i=0;i<100;i++){
int num = new Random().nextInt(3);
String classPath="";
switch (num){
case 0:
classPath="java.util.Date";
break;
case 1:
classPath="java.lang.Object";
break;
case 2:
classPath="java0.Person";
break;
}
Object instance = getInstance(classPath);
System.out.println(instance);
}
}
public Object getInstance(String classPath) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class<?> aClass = Class.forName(classPath);
return aClass.newInstance();
}
}
package java2;
import java1.Person;
import org.junit.Test;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class FieldTest {
@Test
public void test1(){
Class<Person> 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<Person> clazz = Person.class;
Field[] declaredFields = clazz.getDeclaredFields();
for(Field f:declaredFields){
int modifiers = f.getModifiers();
System.out.print(Modifier.toString(modifiers)+"\t");
Class<?> type = f.getType();
System.out.print(type.getName()+"\t");
String name = f.getName();
System.out.println(name);
System.out.println();
}
}
}
package java2;
import java1.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<Person> 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<Person> clazz = Person.class;
Method[] declaredMethods = clazz.getDeclaredMethods();
for(Method m:declaredMethods){
Annotation[] annotations = m.getAnnotations();
for(Annotation a: annotations){
System.out.println(a);
}
System.out.print(Modifier.toString(m.getModifiers())+"\t");
System.out.print(m.getReturnType().getName()+"\t");
System.out.print(m.getName());
System.out.print("(");
Class<?>[] parameterTypes = m.getParameterTypes();
if(parameterTypes.length>0){
for(int i=0;i<parameterTypes.length;i++){
if(i == parameterTypes.length - 1){
System.out.print(parameterTypes[i].getName() + " args_" + i);
break;
}
System.out.print(parameterTypes[i].getName() + " args_" + i + ",");
}
}
System.out.print(")");
Class<?>[] exceptionTypes = m.getExceptionTypes();
if(exceptionTypes.length>0){
System.out.print("throws");
for(int i=0;i<exceptionTypes.length;i++){
if(i==exceptionTypes.length-1){
System.out.println(exceptionTypes[i].getName());
break;
}
System.out.println(exceptionTypes[i].getName()+",");
}
}
System.out.println();
}
}
}
package java2;
import java1.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() throws NoSuchMethodException {
Class<Person> 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<Person> clazz = Person.class;
Class<? super Person> superclass = clazz.getSuperclass();
System.out.println(superclass);
}
@Test
public void test3(){
Class<Person> clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();
System.out.println(genericSuperclass);
}
@Test
public void test4(){
Class<Person> 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<Person> 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<Person> clazz = Person.class;
Package aPackage = clazz.getPackage();
System.out.println(aPackage);
}
@Test
public void test7(){
Class<Person> personClass = Person.class;
Annotation[] annotations = personClass.getAnnotations();
for(Annotation annos:annotations){
System.out.println(annos);
}
}
}
package java2;
import java1.Person;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionTest {
@Test
public void testField() throws IllegalAccessException, InstantiationException, NoSuchFieldException {
Class<Person> clazz = Person.class;
Person p = 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 IllegalAccessException, InstantiationException, NoSuchFieldException {
Class<Person> clazz = Person.class;
Person p = clazz.newInstance();
Field name = clazz.getDeclaredField("name");
name.setAccessible(true);
name.set(p,"Tom");
System.out.println(name.get(p));
}
@Test
public void testMethod() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class<Person> clazz = Person.class;
Person p = 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 returnValue1 = showDesc.invoke(Person.class);
System.out.println(returnValue1);
}
@Test
public void testConstructor() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<Person> clazz = Person.class;
Constructor<Person> declaredConstructor = clazz.getDeclaredConstructor(String.class);
declaredConstructor.setAccessible(true);
Person tom = declaredConstructor.newInstance("Tom");
System.out.println(tom);
}
}
package java0;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface human{
String getBelief();
void eat(String food);
}
class superMan implements human{
@Override
public String getBelief() {
return "I believe I can fly!";
}
@Override
public void eat(String food) {
System.out.println("我喜欢吃"+food);
}
}
class ProxyFactory{
public static Object getProxyInstance(Object obj){
MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
myInvocationHandler.bind(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),myInvocationHandler);
}
}
class MyInvocationHandler implements InvocationHandler{
private Object obj;
public void bind(Object obj){
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnValue = method.invoke(obj, args);
return returnValue;
}
}
public class ProxyTest {
public static void main(String[] args) {
superMan superMan = new superMan();
human proxyInstance = (human) ProxyFactory.getProxyInstance(superMan);
String belief = proxyInstance.getBelief();
System.out.println(belief);
proxyInstance.eat("麻食");
System.out.println("********************");
NikeClothFactory nikeClothFactory = new NikeClothFactory();
ClothFactory proxyInstance1 = (ClothFactory) ProxyFactory.getProxyInstance(nikeClothFactory);
proxyInstance1.produceCloth();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2021-04-17 html修改视频速度
2021-04-17 javascript (三)