Class.forName()主要功能

Class.forName(xxx.xx.xx)返回的是一个类,

Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。

下面,通过解答以下三个问题的来详细讲解下Class.forName()的用法。

①new 和Class.forName()有什么区别和newInstance的用法?

A a = (A)Class.forName(“pacage.A”).newInstance();

A a = new A();

这两种实例化的方式是一样的效果。

上述的例子中都是创建了一个对象A的实例化对象a。下面这个例子我们来看看newInstance的作用

String str = “ABCDEFG” ; //创建一个字符串

Class t = Class.forName(str); //获取到str这个变量的类 相当于String t

t.newInstance(); // 相当于 t = new String

在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者(newInstance)是使用类加载机制,后者(new)是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

从JVM的角度上看

我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:

1、这个类已经加载;

2、这个类已经连接了。

而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。

现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

区别

首先,newInstance( )是一个方法,而new是一个关键字;

其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。

简言之:

newInstance(): 弱类型,低效率,只能调用无参构造。

new: 强类型,相对高效,能调用任何public构造。

Class.forName(“类名”)返回的是类。

Class.forName(“类名”).newInstance() 返回的是object 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持龙方网络。

java forname 原理_Java Class.forName()用法和newInstance()方法原理解析相关推荐

  1. java runnable 参数_Java向Runnable线程传递参数方法实例解析

    java Runnable接口:是一个接口,它里面只有一个run()方法,没有start()方法,继2113承Runnable并实现这个方法就可以实现多线程了,但是5261这个run()方法不能自41 ...

  2. Java基础语法:重写equals方法和hasCode方法

    目录 一.为什么需要重写equals和hasCode方法 二.equals和hasCode解读 1.equals方法 2.hasCode方法 三.重写 四.参考资料 一.为什么需要重写equals和h ...

  3. java private 接口_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  4. java 生成随机数_Java 生成随机数的 N 种方法

    原标题:Java 生成随机数的 N 种方法 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨用 Java 生成随机数的不同方法. 2 ...

  5. java 字符串函数_Java字符串函数– 25+必须知道方法

    java 字符串函数 Java字符串函数 (Java String Functions) Java String class has a lot of functions to manipulate ...

  6. java 数组删除_Java数组删除指定元素的方法(按数组角标删除)

    Java最有效的删除数组指定元素的方法,应该属于这一种形式,下面是Java数组按角标删除数据的工具类,代码如下:public static byte[] removeTheElement(byte[] ...

  7. java泛型方法作用_java泛型的作用与使用方法是什么?

    泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...

  8. java signature 性能_Java常见bean mapper的性能及原理分析

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换.赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils.BeanCopier.Dozer. ...

  9. java线程池的工作原理_Java 线程池的介绍以及工作原理

    在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1. 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 2. 提高响应速度 ...

最新文章

  1. linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程...
  2. ASP.NET Core开发常见“坑”
  3. H3C 802.1X 客户端的安装使用方法
  4. Lucene.net站内搜索—5、搜索引擎第一版实现
  5. 让S3c2410里拥有HIVE注册表的 全部步骤
  6. python编程入门课_程序设计入门—Python
  7. 测试 System.SysUtils.TStringHelper
  8. 帆软报表(finereport)常用函数
  9. 《流畅的Python第二版》读书笔记——序列数组
  10. java 中的通讯之HTTP协议
  11. Druid(数据库连接池)和JdbcTemplate(封装JDBC)使用
  12. ubuntu安装libjasper.so.1,libpng12.so.0
  13. 暴雪:星际2仍在审批 筹划中国电竞联赛
  14. 微信unionID和openID区别
  15. mac备份文件到windows
  16. 爬虫Selenium+Chrome 控制浏览器,打开百度网页,输入搜索关键词,点击回车,截取搜索页面
  17. java开发环境变量的配置
  18. Linux:网络五元组tcp、udp特性
  19. 服务器安装配置elasticsearch,kibana,IK分词器和拼音分词器,集群搭建教程
  20. 大一python期末考试难吗_python期末考试复习

热门文章

  1. tf.gather( )的详细解析
  2. Rokid发布YodaOS 并宣布代码开源
  3. javascript 总结笔记
  4. VMware ESXi 安装手记
  5. Linux中网络通信中 使用的结构体
  6. Mysql捕捉(网站)应用执行的语句
  7. PHP计算表达式-栈
  8. fabrication的拦截器Interceptors简介
  9. 一次批量修改博客文章的经验(下):操作过程
  10. 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like...