首页 > 编程语言 >java 反射

java 反射

时间:2023-02-04 21:22:41浏览次数:28  
标签:Longdi java 反射 newInstance longdi constructor class 构造函数

1、什么是发射?

  反射机制指的是 程序运行时能够获取自身的信息,在java中,只要给定类的名字,就可以通过反射机制来获得类的所有属性和方法。

2、在JVM运行时期可以做什么?

  ⑴判断任意一个对象所属的类。

  ⑵判断任意一个类所有的成员变量和方法。

  ⑶任意调用一个对象的方法。

  ⑷构造任意一个类的对象。

3、反射创建类对象的两种方式

  ⑴通过类的newInstance()方法,该方法是通过调用类中定义的无参构造函数来创建对象的。

  

 Class<Longdi> clazz = (Class<Longdi>) Class.forName("Longdi");
 Longdi longdi = clazz.newInstance();
 longdi.setName("龙帝");
 System.out.println(longdi.getName());

 

  ⑵ 利用 java.lang.reflect.Constructor类中的newInstance方法,

  

// 通过有参构造
Constructor<Longdi> constructor = Longdi.class.getConstructor(String.class,String.class);
constructor.setAccessible(true);
Longdi longdi = constructor.newInstance("龙帝","155xxx");
System.out.println(longdi.getName());

//通过私有构造函数
Constructor<Longdi> constructor = Longdi.class.getDeclaredConstructor(String.class,String.class); constructor.setAccessible(true); Longdi longdi = constructor.newInstance("龙帝","155xxx"); System.out.println(longdi.getName());

 

 4、 反射是如何破坏单例模式的

  因为反射都是通过构造函数中来创建 类对象的,所以只需要在类构造函数中判断该类是否被创建过。

  

private static volatile  Longdi longdi;
 public static Longdi getSingleton(){
        if(longdi == null){
            synchronized (Longdi.class){
                if(longdi == null){
                    longdi = new Longdi();
                }
            }
        }
        return longdi;
    }
    private Longdi() {
        if(longdi != null)
            throw new Error("单例对象只能创建一次");
    }

 

标签:Longdi,java,反射,newInstance,longdi,constructor,class,构造函数
From: https://www.cnblogs.com/longdi666/p/17092422.html

相关文章

  • Java lamdba表达式
    JavaLambda表达式函数式接口任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数时接口publicinterfaceRunnable{ publicabstractvoidrun();}推导方法:......
  • java基础:流程控制
    顺序结构Java的执行过程就是顺序结构,除非说明,不然都是一句接一句执行。选择结构if选择结构if(布尔表达式1){//布尔表达式1为true执行}elseif(布尔表达式2){......
  • 基础知识-java程序运行机制
    编译型-compile(直译)操作系统适用,c/c++解释型-网页(对速度要求不高)Java(双重属性)、Javascriptjava运行机制源程序(.java文件)——java编译器——字节码(.class文件)——类装......
  • Java多线程并发04—线程池的合理使用
    为什么使用线程池?线程池做的工作主要是控制运行的线程的数量。线程池的种类Java中常用的线程池主要有四种:newCachedThreadPool、newFixedThreadPool、newScheduledThreadPo......
  • Java多线程并发05-锁说明
    根据锁的各种特性,可将锁分为以下几类:乐观锁/悲观锁独享锁(互斥锁)/共享锁(读写锁)可重入锁公平锁/非公平锁分段锁偏向锁/轻量级锁/重量级锁自旋锁乐观锁/悲观锁乐观锁与悲观锁并......
  • 【JavaScript】2_数据类型
    1、数值数值(Number)在JS中所有的整数和浮点数都是Number类型JS中的数值并不是无限大的,当数值超过一定范围后会显示近似值Infinity是一个特殊的数值表示无穷所以在JS中进行......
  • java基础:java基础语法
    注释单行注释:对某一行进行注释,使用“/注释内容/”标识多行注释:可以书写多行,使用“/*注释内容*//”表示文档注释:这个内容对IDEA是有意义的,/**注释内容*/publicc......
  • JAVA基础--泛型
    JAVA基础--泛型一、作用泛化、参数化类型。所操作的数据类型被指定为一个参数;类型安全。编译时验证类型,如果编译时正常,运行时就不会出现ClassCastException(类型转换异......
  • 《深入理解Java虚拟机》第三章读书笔记(三)——经典垃圾回收器
    系列文章目录和关于我一丶概述上图展示了经典的垃圾回收器,其中Serial,ParNew,ParallelScavenge(途中的Parallel)作用在新生代SerialOldCMS,ParallelOld作用在老年......
  • Java基于枚举类的线程池
    线程池定义(可防序列化攻击)packagecom.yang.utils;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.ThreadPoolExecutor;importjava......