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

一起学java---第八周

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

一起学java---第八周

一、java反射机制

        什么是反射机制:

        反射机制是java的动态机制,可以在程序"运行期间"再确定实例化对象,方法调用,属性操作等

        优缺点:

        反射机制可以提高代码的灵活度,但是会带来较多的系统开销和较低的运行效率,因此不能过度依赖

学习反射机制前先要了解类对象Class类

        JVM加载一个类的class文件时,就会创建一个Class实例与该类绑定。因此每个被加载的类都有且只有一个Class实例,这个实例就是该加载的类的类对象

        通过一个类的类对象我们可以获取这个类的一切信息(类名,属性,方法,构造器等)从而在程序运行期间进行相关的操作

获取类对象的方式

public class ReflectDemo {
    public static void main(String[] args) throws Exception {
        
    }
}

我们获取了类对象后就可以用得到类的各种信息

举例:获取String类的类对象

public class ReflectDemo {
    public static void main(String[] args) throws Exception {
        Class cls = String.class;
        //获取String类的类名
        String name = cls.getName();
        System.out.println(name);//结果为java.lang.String(完全限定名:包名.类名)

        //只获取单独的类名
        name = cls.getSimpleName();
        System.out.println(name);//结果为String

        //获取包名
        String packageName = cls.getPackage().getName();
        
        //获取方法
        Method[] methods = cls.getMethods();
    }
}

使用反射机制实例化对象

public class ReflectDemo {
    public static void main(String[] args) throws Exception {
        //不使用反射
        ArrayList list = new ArrayList();
        System.out.println(list);

        //使用反射
        Class cls = Class.forName("java.util.ArrayList");
        Object obj = cls.newInstance();
        System.out.println(obj);
    }
}
利用反射机制调用方法
public class ReflectDemo4 {
    public static void main(String[] args) throws Exception {

        //1实例化
        //1.1加载类对象
        Class cls = Class.forName("reflect.Person");
       
        //1.2实例化
        Object obj = cls.newInstance();

        //2调用方法
        //2.1通过类对象获取要调用的方法
        Method method = cls.getMethod(methodName);
        //2.2通过方法对象执行该方法
        method.invoke(obj);
    }
}
反射机制访问注解
public class ReflectDemo7 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person");
        
        //cls所表示的类Person是否被注解@AutoRunClass标注过
        boolean flag = cls.isAnnotationPresent(AutoRunClass.class);
        if(flag){
            System.out.println("被标注了!");
        }else{
            System.out.println("没有被标注!");
        }
    }
}

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

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

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