java23天反射

设计模式

含义:解决一种特定问题的方式

常用的设计模式:

单例模式

        解决的问题:

                让一个类只能产生一个对象

         核心:

                不能让其在该类以外可以使用new关键字调用构造函数

         分类:

                 懒汉式单例

                        核心:

                                需要在创建,不需要不创建

                        优点: 节省内存

                        缺点: 线程不安全

                        步骤:

                                 1,私有化所有构造函数

                                 2,声明一个属性是本类对象

                                 3,提供公共静态获取该类对象 判断步骤2的对象是否为null 如果为null,创建该类对象赋值给属性 不管是否为null返回该对象

                饿汉式单例

                        核心:

                                不管是否需要,提前创建

                        优点: 线程安全

                        缺点: 占用内存较多

                        步骤:

                                1,私有化所有构造函数

                                2,声明并创建一个属性是本类对象

                                3,提供公共静态获取该类对象 返回该对象

                        线程安全的懒汉式单例

                        优点:节省内存,线程安全 在懒汉式的公共方法上加锁,保证线程安全

         工厂模式

                解决的问题:

                        传递商品型号,生成对应商品

                保证:所有商品要有同一个父类或父接口

        监听者模式:

                接口回调

        生成者与消费者

        装饰者模式:

                包装流使用

反射

语言分类

        编译执行

                java  c

                优点;安全

                缺点;不够灵活

        解释执行

                HTML,CSS,JS..

                缺点:不安全

                优点:灵活

在JDK1.5及以后版本推出反射概念,提高代码灵活性

思想: 万事万物皆对象

        Class类:Java的所有的类对象

类对象:

        概念:

                Java文件在运行时,需要先编译class文件

                 JVM加载class文件

                JVM在加载class文件时,会生成该class文件对应的对象,该对象称为类对象 一个class文件只有一个类对象

        有什么?

                类对象包含对应的class 文件的所有信息,包含但不限于属性,方法,类名,构造函数,父类,实现的接口等信息

获取类对象:

方式1:

方式2:

方式3:

Constructor:对应构造函数的类

类相关:

        public String getName():获取类的名称,包含包名

        public native Class getSuperclass():获取该类的父类的类对象

         public Class[] getInterfaces():获取该类所有的实现接口的接口类对象

        public String getSimpleName():获取类的类名

         public Package getPackage():获取该类所在的包对象 Package包对应的类 方法: 包对象.

         getName():获取包对象的名称

属性相关

         public Field[] getFields():获取类中所有公共属性,包含父类继承到属性

         public Field[] getDeclaredFields():获取类中所有属性

        public Field getDeclaredField("属性名字符串"):获取类中对应的属性

                Field:属性对应的类

                方法: setAccessible(true):取消访问权限修饰符限制

                         set(对象名,属性值):给属性赋值

                        get(对象名):获取属性的值

如: Field namefield=class1.getDeclaredField("name"); namefield.setAccessible(true); Person zhangsan=(Person)class1.newInstance(); namefield.set(zhangsan, "张三"); System.out.println(namefield.get(zhangsan));

方法相关:

         public Method[] getMethods():获取公开的方法,包括从父类继承的方法

         public Method[] getDeclaredMethods():获取类中的所有方法,包括私有、默认、保护的 、不 包含继承的方法

         public Method getMethod(String name, Class... parameterTypes):获取单个方法

                 name:方法名

                parameterTypes:该方法的参数类型

        public Method getDeclaredMethod(String name, Class... parameterTypes):获取 单个私有方法

                 name:方法名

                 parameterTypes:该方法的参数类型

                 Method:方法对应的类

                方法: setAccessible(true):取消访问权限修饰符限制

                 invoke(对象,调用方法传入的参数):调用方法

                                                                                                                                                       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值