当前位置: 首页 > wzjs >正文

哪个网站可以免费做初级试题服装网站建设公司推荐

哪个网站可以免费做初级试题,服装网站建设公司推荐,wordpress 模拟数据库,财经公关公司排名什么是java反射机制? 回顾之前java程序如何使用类 1.分析,确定类名,属性名,方法......创建类 2.创建类的对象 3.使用 一切都是已知的。 在程序开发中,在哪儿需要使用哪个类的对象,就在那儿创建这个类对象…

什么是java反射机制?

  回顾之前java程序如何使用类

    1.分析,确定类名,属性名,方法......创建类

    2.创建类的对象

    3.使用

一切都是已知的。

在程序开发中,在哪儿需要使用哪个类的对象,就在那儿创建这个类对象,去使用即可

这种写法对于业务开发来说是没问题的。

但~是!,在一些组件 或者 在框架的开发中,他们本身时不知道要处理哪些类

例如:jackson组件,我们给他什么类,他们就处理转换什么类

new ObjectMapper().writeValueAsString(result) 

在web.xml中配置了哪些servlet类,tomcat就要创建哪些类对象

<servlet-class>com.skw.dorm.web.LoginServlet</servlet-class><servlet-class>com.skw.dorm.web.TestServlet</servlet-class>

在mybatis中,给了什么类型,mybatis就可以将结果封装映射到给定的类的对象中

<select id="findAdminById" parameterType="int" resultType="Admin">

等等一系列,这样单一对着一个明确的类去使用。

问题:如果仅仅知道一个类的类名,能否动态得到类的定义信息,包括哪些方法, 属性等?

以前已知类名的使用方式,可以看做是正向使用类。

而框架需要只写一套程序,就可以处理我们给他的任意类

框架需要对任意类处理时,只是知道类的名字,通过类的名字动态才去获取类中的信息。

把这种对类的使用方式,称为反向使用。也可以被称为:反射!

反射

  概念:

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。

    Java反射机制的作用就是:可动态的获取类的信息

  要如何去实现Java的反射机制呢?

    首先了解Java反射相关的API:

        Java反射相关的类主要包括

                Class 类型

                Constructor 构造方法

                Method 方法

                Field 属性

        除了Class外,其他类都位于java.lang.reflect包中

        可见,反射API将类的类型、方法、属性都封装成了类,其中最重要的类是 Class,可以说,反射的使用都是从Class开始。

    1、Class类

        java.lang.Class

        一旦class文件被加载到内存,就会为其创建一个Class对象。任何类被使用时都会创建一个Class对象。

        Class类是Java反射机制的基础,通过Class类,可以得到一个类的基本信息。

Class类的对象,表示当前正在运行中的类和接口。

获得Class的三种方法

要使用Class类的方法,必须先获得该类的Class类的实例,获得Class 类实例的常用方法有如下三种

//方式1:通过类的名称(包名+类名)来获取Class类Class clazz1 = Class.forName(classname);System.out.println(clazz1);
//方式2:通过只知道类来获取Class类Class clazz2 = User.class;
 //方式3:通过知道类的对象来获取Class类User user = new User();Class clazz3 = user.getClass();
Class类的常用方法
方法名功能说明
static Class forName(String name)返回指定类名 name 的 Class 对象
Object newInstance()调用缺省构造函数,返回该Class对象的一个实例
getName()返回此Class对象所表示的实体(类、接口、数组类、基本类型或void)名称
Class [] getInterfaces()获取当前Class对象的接口
Constructor[] getConstructors()返回一个包含某些Constructor对象的数组
Field[] getDeclaredFields()返回Field对象的一个数组
Method getMethod(String name,Class … paramTypes)返回一个Method对象,此对象的形参类型为paramType

2、Constructor 构造方法

        //使用反射机制时,只知道类的名称(包名+类名)String classname = "com.ffyc.javareflect.User";//1.通过类名,获得到类的Class对象Class aClass = Class.forName(classname);//2.通过类的Class对象,创建对象Object obj = aClass.newInstance();//获得类中的构造方法,通过构造方法api中的方法创建对象Constructor constructor1 = aClass.getConstructor();  //获得指定的公共构造方法Object obj1 = constructor1.newInstance();//无参构造方法Constructor constructor2 = aClass.getConstructor(String.class,String.class);Object obj2 = constructor2.newInstance("张三","1111");//有参构造方法System.out.println(obj1);System.out.println(obj2);Constructor[] constructors = aClass.getConstructors();//获得所有公共的构造方法//虽然可以获取私有构造方法,但是一般不建议操作私有成员,因为打破了封装性aClass.getDeclaredConstructor();//获得类中任意的构造方法,包含私有的

                         

3、Method 方法

        //使用反射机制时,只知道类的名称(包名+类名)String classname = "com.ffyc.javareflect.User";//1.通过类名,获得到类的Class对象Class aClass = Class.forName(classname);//2.通过类的Class对象,创建对象Object obj = aClass.newInstance();//获得类中指定名称的成员方法Method method = aClass.getMethod("eat" );//调用访问method.invoke(obj);

                                ​  ​​​​​​​                 

4、Field 属性

        //使用反射机制时,只知道类的名称(包名+类名)String classname = "com.ffyc.javareflect.User";//1.通过类名,获得到类的Class对象Class aClass = Class.forName(classname);//2.通过类的Class对象,创建对象Object obj = aClass.newInstance();//获得类中成员变量//Field accountField = aClass.getField("account");//获得指定名称的公共的成员变量Field accountField = aClass.getDeclaredField("account");//获得指定名称的成员变量,包含私有的accountField.setAccessible(true);//设置允许直接访问操作私有成员accountField.set(obj,"admin");System.out.println(obj);

        ​​​​​​​           

模拟框架拿任意一个类的信息

        //使用反射机制时,只知道类的名称(包名+类名)String classname = "com.ffyc.javareflect.User";//1.通过类名,获得到类的Class对象Class aClass = Class.forName(classname);//2.通过类的Class对象,创建对象Object obj = aClass.newInstance();//演示通过属性的get和set方法,对类中私有属性进行赋值取值操作//模拟从数据库中查询到的数据HashMap<String,String> map = new HashMap<>();map.put("account", "admin");map.put("password", "1111");//先拿到类中所有的私有属性Field[] declaredFields = aClass.getDeclaredFields();for (Field field : declaredFields){//根据属性名,生成Set方法名称String setmethod = "set"+field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);//通过Class对象,获得对应的Set方法对象Method setmethodobj = aClass.getMethod(setmethod,field.getType());//调用Set方法setmethodobj.invoke(obj, map.get(field.getName()));}System.out.println(obj);

        ​​​​​​​        ​​​​​​​        

模拟一个简单的json转换格式

public class JsonUtil {public static String objectToJson(Object object) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {Class aclass = object.getClass();Field[] declaredFields = aclass.getDeclaredFields();String json = "{";for (Field field : declaredFields){//根据属性名,生成Get方法名称String getmethod = "get"+field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);//通过Class对象,获得对应的Get方法对象Method getmethodobj = aclass.getMethod(getmethod);//调用Get方法json += field.getName() +":"+ (String) getmethodobj.invoke(object) + ",";}json = json.substring(0, json.length() - 1) + "}";return json;}public static void main(String[] args) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {User user = new User();user.setAccount("admin");user.setPassword("1111");Car car = new Car();car.setName("宝马");car.setColor("红色");System.out.println(JsonUtil.objectToJson(user));System.out.println(JsonUtil.objectToJson(car));}
}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      

反射的优缺点:

    优点:

            1、增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作

            2、提高代码的复用率

            3、可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态调用

    缺点:

            1、反射会涉及到动态类型的解析,导致性能要比非反射调用更低

            2、使用反射技术通常要在一个没有安全限制的程序运行.

            3、反射可以绕过一些限制访问的属性或者方法,可能会导致破坏代码本身的封装性


文章转载自:

http://DwdVwE6n.qcLmz.cn
http://j6UTHrEp.qcLmz.cn
http://nqDoTWgi.qcLmz.cn
http://nDYPkIPV.qcLmz.cn
http://ginY62LM.qcLmz.cn
http://r8uZqQhf.qcLmz.cn
http://arJyu6Wu.qcLmz.cn
http://fACzxvHQ.qcLmz.cn
http://AjFdOdOu.qcLmz.cn
http://hm9Wu6yo.qcLmz.cn
http://VLxYoqFB.qcLmz.cn
http://jPrUqd3E.qcLmz.cn
http://MVJQ6IC0.qcLmz.cn
http://EgDubdg1.qcLmz.cn
http://guk3eiVa.qcLmz.cn
http://A6RKiACs.qcLmz.cn
http://na68ahcf.qcLmz.cn
http://X3N1cKkf.qcLmz.cn
http://x8DcfXSd.qcLmz.cn
http://SI0lkMVd.qcLmz.cn
http://qJxsugV9.qcLmz.cn
http://0D4bRUxl.qcLmz.cn
http://06QToTQw.qcLmz.cn
http://XAsZUcwV.qcLmz.cn
http://uIzOYtlh.qcLmz.cn
http://RbrHBk3X.qcLmz.cn
http://9IFpyExo.qcLmz.cn
http://aF2biuzJ.qcLmz.cn
http://PIaL2GKN.qcLmz.cn
http://3iBINb7O.qcLmz.cn
http://www.dtcms.com/wzjs/758728.html

相关文章:

  • 大连网站代运营的公司有哪些wordpress加速之gzip
  • 做网站学哪些语言wordpress订单邮件内容修改
  • 网站前台首页无法显示德州宁津建设局网站
  • 网站域名登录包小盒设计网站官网
  • 用wordpress建站多少钱贵阳网站制作
  • 珠海网站建设案例手机商城系统制作
  • 建设银行签名通在网站哪里下载龙口网站建设价格
  • 做理财的网站焦作建设厅网站
  • 网站开发凭证做什么科目p2p网站开发用什么平台
  • 山东咕果做网站怎么样360建筑网官方网站
  • 寿县住房与城乡建设局网站软件技术主要课程
  • 做网站推广的价格做网站最好的
  • 新手做网站教程泰安58同城二手房出售信息
  • 张家口住房和城乡建设厅网站网站建设研究的意义
  • 网站建设公司的专业度该怎么去看注册小程序账号
  • 安全证四川省建设厅官方网站wordpress崩溃
  • 湖北网站建设模板下载android开发工具箱
  • 金融培训网站源码免费微网站建站系统源码
  • 六里桥做网站公司购物 网站建设的市场分析
  • 网站建设后期怎样维护网站水军怎么做
  • 搭建织梦网站视频教程品牌的手机网站制作
  • 嘉兴市城乡与建设局网站搜狐焦点石家庄房产网
  • 咋样查看网站用什么编程语言做的企业网页设计模板图片
  • 网站图片处理方案有多少网站可以推广业务
  • 嘉定区整站seo十大排名手机网站cms
  • 画出网站和目录结构图自己做的工艺品在哪个网站上可以卖
  • 太原网站建设平台温州网站建设联系电话
  • 油漆网站设计wordpress 输出 文章时间
  • 网站wordpress入侵网络优化公司排名
  • 免费网站设计素材做内贸的什么网站效果好