栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA反射

java反射(reflect)
java框架设计的灵魂
反射

	Test t = new Test();
	t.test();

类的类类型(class type)创建实例对象,

java是面对对象
万物节对象
基础数据类型(int,byte,long,short,char,double,float,boolean)
类是不是对象?
类也是对象,这个对象的创建是在classLoad时由JVM创建。
public class A{
}
静态加载和动态加载
通过new的方式创建对象,属于静态加载
Excel excel = new Excel();
一定要先通过编译。
 

动态加载,通过反射的方式创建对象。可以绕过编译

eg:
entity.Student:

package enity;

public class Student {
	public void test(String a,int b){
		System.out.println("Student.test()-----");
	}
	public void test1(String a,int b,int c){
		System.out.println("Student.test()");
	}
	public void test(int a,int b){
		System.out.println("a+b="+(a+b));
	}
}

test.TestClass:

package test;

import java.lang.reflect.Method;

import enity.Student;

public class TestClass {
	public static void main(String[] args) throws Exception {
		 Student stu = new Student();
//		 stu.test();
		//由三种方式得到Student类的类类型
		//1,由对象的getClass()方法获取类类型
		Class c1 = stu.getClass();
		System.out.println(c1);
		//2,通过类名.class获取,说明每一个类都有一个class的静态属性
		Class c2 = Student.class;
		System.out.println(c1==c2);
		//3,
		Class c3 = Class.forName("enity.Student");
		System.out.println(c3);
		System.out.println(c1==c3);
		
		//通过类的类类型实例化对象
//		Student stu1 = (Student)c1.newInstance();
//		stu1.test();
		//通过反射调用方法
		Method m = c1.getMethod("test");//得到c1类中的test方法,返回的是Method对象
		//调用方法
		m.invoke(stu);//反射调用stu对象中的m方法
		
		try {
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

test.TestMethod:

package test;

import java.lang.reflect.Method;

import enity.Student;

public class TestMethod {
	
	public static void getMethods(Object obj){
		//通过obj.getClass()获得该对象的类类型
		Class c = obj.getClass();
		System.out.println("完整的类名:"+c.getName());
		System.out.println("简单的类名:"+c.getSimpleName());
		//通过c得到该对象中所有的方法
		//c.getMethods();//包括从父类继承过来的方法,private不能得到
		Method[] methods = c.getDeclaredMethods();//得到该类中所有的方法,不问访问权限,不能得到父类继承的方法
		for (Method method : methods) {
			String name = method.getName();//得到方法名
			Class c1 = method.getReturnType();//得到方法的返回值类型
			int role = method.getModifiers();//得到方法的访问权限
			Class[] cs = method.getParameterTypes();//得到方法所有的参数,
			System.out.print("方法名:"+role+" "+c1.getSimpleName()+" "+name+"(");
			for (int i=0;i 
使用反射完成一个简单的办公软件的启动 

Excel.java

class Excel implements IOffice{
	public void start(){
		System.out.println("excel....start.....");
	}
}

IOffice.java

interface IOffice{
	public void start();
}  

Office.java

public class Office{
	public static void main(String[] args){
		
		//动态加载
		
		try{
			Class c = Class.forName(args[0]);
			//通过c创建该类的实例对象
			IOffice io = (IOffice)c.newInstance();
			io.start();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

PPT.java

class PPT implements IOffice{
	public void start(){
		System.out.println("PPT...start....");
	}
}

Word.java

class Word implements IOffice{
	public void start(){
		System.out.println("word...start....");
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305859.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号