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

Java中的反射和注解

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

Java中的反射和注解

1.反射是什么,有什么用?

        反射---在程序运行的过程中,我们可以得到某个类的对象。可以调用某个类中的任何一个变量/方法,这种动态获取信息的过程就是反射。

        当我们在没有见过某个类的情况下,仅凭一个完整的类名【包名+类名】,就可以获取到整个类的所有信息。

        反射的使用场景:

        1.jdkc加载数据库驱动

        2.Serblet的web.xml配置

        3.Spring框架

2.实例对象与反射对象的相互转换?

        实例对象---就是我们通过类创建的对象

        反射对象---通过反射机制得到的类对象

        例如:反射就是以面经,镜子前面的你就是实例对象,通过镜子得到镜子里面的你就是反射对象。

        反射对象是一个Class类型的对象

        class---创建类的关键字

        Class---类的类名,创建出来的Class类的对象就是反射对象。

        public final class Class

        1.通过实例对象的得到反射对象

                1.通过实例对象的geiClass()得到,当前实例对象对应的反射对象

                2.通过Class类的forname(类名【包名+类名】)

        2.通过反射对象得到实例对象

                反射对象的newInstance()方法,可以得到实例对象 

例如:

package com.test3;

public class Student2 extends Person implements Myinter{
	private int id;
	private String name;
	public Student2(int id,String name){
		this.id=id;
		this.name=name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
		
		
}
 
package com.test3;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		//1.通过实例对象得到反射对象
		//1.通过实例对象的getClass()得到,当前实例对象对应的反射对象
		//Student stu1=new Student(); //实例对象
	    //Class  stuclass1=stu1.getClass(); //反射对象
	    //2.通过Class类的forname(类名【包名+类名】)
	    //Class  stuclass2=Class.forName("com.wangxing.test3.Student");
		
		//2.通过反射对象得到实例对象[newInstance()]
		Class  stuclass=Class.forName("com.wangxing.test3.Student");
		Student2  stu1=(Student2)stuclass.newInstance();
		stu1.setId(1001);
		stu1.setName("zhangsan");
		
		//得到一个类的实例对象
		//1.new 
		//2.静态方法
		//3.反射
	}

}

        得到一个类的实例对象的反收割hi

        1.new        2.静态方法        3.反射

3.通过反射对象得到类的完整结构

package com.test3;

public class Student extends Person implements Myinter{
	private int id;
	private String name;
	public Student(){}
	public String getinfo(String agrs1)throws Exception{
		return "hello";
	}
		
		
}
 
package com.test3;

public class Person {
	
}
package com.test3;

public interface Myinter {

}
package com.test3;

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestMain2 {

	public static void main(String[] args) throws Exception {
		Class stu=Class.forName("com.test3.Student");
		Package stupackage=stu.getPackage();
		String stuupackage=stu.getName();
		System.out.println(stupackage);
		String classmodifier=Modifier.toString(stu.getModifiers());
		String name=stu.getName();
		name=getMyname(name);
		System.out.println(name);
		String supername=getMyname(stu.getSuperclass().getName());
		System.out.println(supername);
		String intername=getMyname(stu.getInterfaces()[0].getName());
		System.out.println(intername);
		System.out.println(classmodifier+"class "+name+" extdends "+supername+" implments "+intername+"{");
		Field[] fileds=stu.getDeclaredFields();
		for(Field filed:fileds){
			String filedmod=Modifier.toString(filed.getModifiers());
			String filedtype=getMyname(filed.getType().getName());
			String filedname=filed.getName();
			System.out.println("t"+filedmod+" "+filedtype+" "+filedname);
		}
		Constructor stuConstructor=stu.getConstructors()[0];
		String stuconsmod=Modifier.toString(stuConstructor.getModifiers());
		String stuConsname=getMyname(stuConstructor.getName());
		System.out.println("t"+stuconsmod+" "+stuConsname+"(){}");
		
		Method  method=stu.getDeclaredMethods()[0];
		String methodmod=Modifier.toString(method.getModifiers());
		String methodreturn=getMyname(method.getReturnType().getName());
		String methodname=method.getName();
		String methodParme=getMyname(method.getParameterTypes()[0].getName());
		String methodexce=getMyname(method.getExceptionTypes()[0].getName());
		System.out.println("t"+methodmod+" "+methodreturn+" "+methodname+"("+methodParme+" args1)throws "+methodexce+"{");
		System.out.println("tt return "hello";");
		System.out.println("t}");
		System.out.println("}");
	}

	private static String getMyname(String name) {
		return  name.substring(name.lastIndexOf(".")+1);
		
	}

}

注解

        注释---标注解释说明代码的含义用的文字

        注解---标注结束说明功能的代码

 1.@Override  判断方法重写是否正确

2.@SuppressWarnings  抑制警告信息。
    有参数---产生警告的原因
    位置:当前代码的上面 ,只抑制当前代码上的警告信息
         方法代码的上面 ,只抑制当前方法中的同类型的警告信息 
         类的上面 ,只抑制当前类中的同类型的警告信息 
   @SuppressWarnings({ "unused", "rawtypes" })

3. @Deprecated  标识变量/方法/类/接口,已过时。
    已过时的元素尽量避免使用,因为有潜在的错误

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

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

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