zoukankan      html  css  js  c++  java
  • java反射

    人贵有自知之明。不会的立马去学。忘记的立马去补。

    由于我的反射是1年前学的。很多东西都已忘记。昨日阿里面试提起反射。我只迷糊的记得有Class.forName和getMethod、newInstant这些东西。

    其实我觉得java这些东西内部知识很多。Spring我知道是反射。大概怎么做的我也清楚。但若离开了Eclipse离开了intellij让我空手写代码确实没有API文档我真不行。

    下面我简单的回顾了一下反射。Spring的AOP面向切面编程。我喜欢叫面向接口。不管怎样。大致上这种框架都是在spring.xml中配置bean。现在也有很多程序不喜欢配置。而更喜欢用注解的形式什么@Service、@Controller、@Resource之类的注解。通过注解的组合达到0配置的目的。但大意都是基于反射实现的。

    例如我们先写个简单的Pojo

    public class Student
    {
    	private String name;
    	
    	public Student(){}
    	
    	public Student(String name)
    	{
    		this.name = name;
    	}
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	
    }
    

    之后我们再写个测试类

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    
    
    public class test
    {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) throws Exception
    	{
    		Class cls_1 = Class.forName("Student"); //通过名称获取Class,这里一般是需要有包名前缀的。
    		Class cls_2 = Student.class;			//直接通过.class文件获取Class
    		
    		if(cls_1.equals(cls_2)) System.out.println("this is sample Class");
    		
    		Student stu = (Student)cls_1.newInstance();   //通过无参构造方法new获取对象,若无空参构造方法会抛异常
    		Constructor<Student> sc = cls_1.getConstructor(String.class); //若类中不含无参构造方法则会抛异常这里就需要先获取指定的构造方法
    		Student stu2 = sc.newInstance("haha");
    		System.out.println(stu2.getName());
    		
    		Method me1 = cls_1.getMethod("setName", String.class); //通过名称+参数类型的class获取Method方法
    		me1.invoke(stu, "jungle"); //调用指定实例的指定参数
    		System.out.println(stu.getName());
    		
    	}
    
    }

    运行结果

    this is sample Class
    jungle
    haha
    

    是不是很简单呢。其实我觉得各种语言学多了不免忘记。但查API文档和原理懂就行了。空手写代码的除了上个世纪80、90年代那个用Dos用打孔机写代码的年代。java东西这么多。常用的记住忘记查文档。更好得利用资源例如StackOverflow这种东西。不扯了。我是水货233333

  • 相关阅读:
    联想电脑关闭屏幕点亮屏幕(T480为例)
    安卓手机时钟APP推荐
    电脑手机端如何互传文件、图片、网址等
    仿写一个简陋的 IOC/AOP 框架 mini-spring
    类加载之 <clinit>() 和 <init>()
    深入理解Java类加载
    Java垃圾回收
    Java内存区域(运行时数据区域)和内存模型(JMM)
    Java 泛型学习总结
    一篇文章概括 Java Date Time 的使用
  • 原文地址:https://www.cnblogs.com/leejuen/p/5547464.html
Copyright © 2011-2022 走看看