Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new

1.1. 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new 1

1.2. 获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoader 2

1.3. 1和2和3究竟有什么区别呢?分别用于什么情况呢? 2

1.4. jvm有严格的规定(五种情况):2

1.5. 对象实例化4种方式: 3

1.1. 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new 

对于载入类的情况,用户需要知道B类的完整名字(包括包名,例如"com.rain.B")  
1. 使用Class静态方法 Class.forName

Class cls = Class.forName("com.rain.B"); 
    B b = (B)cls.newInstance();

通过反射加载类型,并创建对象实例 
如果无法找到Dog,则抛出ClassNotFoundException

2. 使用ClassLoader  
    /* Step 1. Get ClassLoader */ 
    ClassLoader cl; // 如何获得ClassLoader参考1.6

/* Step 2. Load the class */ 
    Class cls = cl.loadClass("com.rain.B"); // 使用第一步得到的ClassLoader来载入B 
     
    /* Step 3. new instance */ 
    B b = (B)cls.newInstance(); // 有B的类得到一个B的实例

通过反射加载类型,并创建对象实例 
如果无法找到Dog,则抛出ClassNotFoundException。

3. 直接new  
    B b = new B();

这个动作会导致常量池的解析,Dog类被隐式装载。 
如果当前ClassLoader无法找到Dog,则抛出NoClassDefFoundError。

1.2. 获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoader 

this.getClass.getClassLoader(); // 使用当前类的ClassLoader  
Thread.currentThread().getContextClassLoader(); // 使用当前线程的ClassLoader  
ClassLoader.getSystemClassLoader(); // 使用系统ClassLoader,即系统的入口点所使用的ClassLoader。

1.3. 1和2和3究竟有什么区别呢?分别用于什么情况呢?

1和2使用的类加载器是相同的,都是当前类加载器。(即:this.getClass.getClassLoader)。 
3由用户指定类加载器。

如果需要在当前类路径以外寻找类,则只能采用第3种方式。第3种方式加载的类与当前类分属不同的命名空间。 
当前类加载器命名空间对其不可见。当然,如果被加载类的超类对于当前类命名空间可见的话,则可以进行强

1.4. jvm有严格的规定(五种情况):

1.遇到new,getstatic,putstatic,invokestatic这4条字节码指令时,假如类还没进行初始化,则马上对其进行初始化工作。其实就是3种情况:用new实例化一个类时、读取或者设置类的静态字段时(不包括被final修饰的静态字段,因为他们已经被塞进常量池了)、以及执行静态方法的时候。

2.使用java.lang.reflect.*的方法对类进行反射调用的时候,如果类还没有进行过初始化,马上对其进行。

3.初始化一个类的时候,如果他的父亲还没有被初始化,则先去初始化其父亲。

4.当jvm启动时,用户需要指定一个要执行的主类(包含static void main(String[] args)的那个类),则jvm会先去初始化这个类。

5.用Class.forName(String className);来加载类的时候,也会执行初始化动作。注意:ClassLoader的loadClass(String className);方法只会加载并编译某类,并不会对其执行初始化。

以上5种预处理称为对一个类进行主动的引用,其余的其他情况,称为被动引用,都不会触发类的初始化。

1.5. 对象实例化4种方式:

1、new Dog(); 
2、clazz.newInstance();或者clazz.getConstructor(...).newInstance(...); 
3、Object.clone();//通过本地方法进行复制 
4、反序列化

java 载入类的三种方法 - Flyer的后花园 - 博客频道 - CSDN.NET.html

几种类加载方式的区别 - hengfanz的专栏 - 博客频道 - CSDN.NET.html

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊

常用名:艾提拉(艾龙),  EMAIL:1466519819@qq.com

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

,Uke部落首席大酋长,

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

奶牛科技cto ,uke 首席cto  技术总监 研发总监 研发主管 部门总监

uke波利尼西亚区大区连锁负责人 汤加王国区域负责人。

uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,

uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长

uke出版社编辑总编

uke终身教育学校副校长  Uke医院 与医学院方面的创始人 度假村首席大村长

转载请注明来源:attilax的专栏  ?http://blog.csdn.net/attilax

--Atiend

Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new相关推荐

  1. java 载入类的三种方法

    载入类的几种方法 所有资源都通过ClassLoader载入到JVM里,那么在载入资源时当然可以使用ClassLoader,只是对于不同的资源还可以使用一些别的方式载入,例如对于类可以直接new,对于文 ...

  2. Java动态加载一个类的几种方法以及invoke

    一.加载一个类的几种方法 接口 IUser package org.me.javaapp;/**** @author Administrator*/ public interface IUser {} ...

  3. 反射:获取Class类的三种方法

    反射:获取Class类的三种方法 // 1.Class类中的一个静态方法:forName(全限名:包名 + 类名) Class c = Class.forName(路径); System.out.pr ...

  4. 关于ssh框架中hibernate扫描实体类的两种方法annotatedClasses和packagesToScan

    [Hibernate]spring整合hibernate扫描实体类的两种方法annotatedClasses和packagesToScan的异同

  5. android hide方法 末班,Android调用@hide系统隐藏类的几种方法

    调用android系统隐藏的API的几种方法(以调SystemProperties这个类为例): 1.用反射: //获取系统属性public static String getProperty(Str ...

  6. Qt绑定UI界面和Qt类的四种方法

    1. Qt类头文件中 声明命名空间 namespace Ui { class Widget; } 声明UI指针对象 public:explicit Widget(QWidget *parent = 0 ...

  7. Android调用@hide系统隐藏类的几种方法

    调用android系统隐藏的API的几种方法(以调SystemProperties这个类为例): 1.用反射: //获取系统属性 public static String getProperty(St ...

  8. Javascript创建类的七种方法

    /* 第一种定义类的方法 */ var cls = new Object(); cls.name = "wyf"; cls.showName = function(){ conso ...

  9. Java实现pdf转图片的工具类(三种方法实现PDF转图片的案例)【亲测可用】

    提示:有些时候我们需要在项目中展示PDF,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好.Java使用各种技术将pdf转换成图片格式,并且内容不失帧.清晰可见,该工具类也是开发中常用到的 ...

  10. java Thread 类的几种方法

    //后台进程 /** 对于java来说只要还有一个前台线程在运行,这个进程就不结束,如果一个进程* 只有后台线程,这个进程就会结束*/ package xian_cheng;public class ...

最新文章

  1. matlab教程lqg函数与收敛速度,科学网—Matlab编写由加速度积分得到速度和位移函数 - 王德才的博文...
  2. httpclient异步发送请求_关于Tornado5.1:到底是真实的异步和还是虚假的异步
  3. Java 8 Stream Tutorial--转
  4. python自动测试u_自动化测试——Selenium+Python之下拉菜单的定位
  5. spring4.2更好的应用事件
  6. 分支定界算法 matlab,分支定界法----整数规划matlab
  7. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python文件)
  8. golang 筆記:make 與 new 的差別
  9. C#面向对象2 静态类、静态成员的理解
  10. 站怎么点都是一样_搞笑段子:都说女人是水做的,你怎么不太一样
  11. 如何证明NP-Hard Problems
  12. MySQL 入门(一)—— 常用数据库介绍
  13. 工具安装----Clang-format的基本使用
  14. redis set设置有效时间问题
  15. 成长计划校园极客秀|基于OpenHarmony的智能阳台
  16. 构建AWS Site-to-Site IPsec实现内网互联
  17. php对接支付宝当面付接口视频教程,支付宝当面付接口demo(面对面扫码支付)
  18. 微信移动支付接口申请——2016年5月版
  19. 电子邮箱哪家最安全,各家电子邮箱安全性盘点!
  20. IE被www 537 com www COXDX INFO劫持,修复

热门文章

  1. 模型描述的关系模式_图解各种管理模型大全--管理模型大全
  2. 发布一款npm包帮助理解npm的使用
  3. immutability因React官方出镜之使用总结分享!
  4. python学习之老男孩python全栈第九期_day012知识点总结
  5. Java中堆内存和栈内存的区别
  6. LVS-Fullnat之编译内核 将fullnat模块添加到内核
  7. Android登陆界面实现-支持输入框清楚和震动效果功能
  8. HDU 1813 Escape from Tetris (IDA*)
  9. LOG4J 按类输出日志
  10. 05 搭建4节点hadoop集群