Class 与 类加载

  • Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息。
  • 将类信息读到内存中过程,称为类加载
  • Java在需要使用某个类时,才会将该类进行加载,而不是在程序启动时就加载所有的类。

  • 所谓真正需要是指生成类的对象或类被加载时 new ,  Class.forName() ,  ClassLoader

Ø加载class对象

有6种情况JVM会加载Class对象

  • 使用new关键字创建对象时。
  • 通过反射创建对象时。
  • 调用某个类的static方法时。
  • 调用某个类的static属性时。
  • 当初始化某个类的子类时。
  • 某个类标明为main() 函数类(启动类) 。

ØClass.forName加载类

  • 实现动态加载类
  • static Class forName(String name)
  • static Class forName(String name, boolean initialize, ClassLoader loader)
  • 类的具体路径 设为false代表在加载类时不会立即运行静态块,而会在使用类建立对象时才运行静态块。
  • 类加载器 Thread.currentThread().getContextClassLoader() —— 获得当前主线程的类加载器

Øjava代码 

public class Demo1 {
public static void main(String[] args) {
String s = new String("wenhaitao");
//1. getClass()
Class cls= s.getClass();
System.out.println("leiming" + cls.getName());
System.out.println("baoming" + cls.getPackage());
System.out.println("是否为接口:" + cls.isInterface());
System.out.println("是否为基本类型:" + cls.isPrimitive());
System.out.println("是否为数组:" + cls.isArray());
System.out.println("String类的父类:" + cls.getSuperclass()); //2.Class
Class cls1 = String.class;
System.out.println("类名:" + cls1.getName());
System.out.println("包名:" + cls1.getPackage());
System.out.println("是否为接口:" + cls1.isInterface());
System.out.println("是否为基本类型:" + cls1.isPrimitive());
System.out.println("是否为数组:" + cls1.isArray());
System.out.println("String类的父类:" + cls1.getSuperclass()); System.out.println(cls == cls1);
int a = 100;
System.out.println(int.class);
}
}

Ø获取一个对象的父类与实现接口

public class Demo4 {
public static void main(String[] args) {
Class clz;//类对象
ClassLoader cl, cl1;//类加载器 clz = String.class;
cl = clz.getClassLoader();//得到加载String类对象的类加载器
System.out.println("加载String类对象的加载器:" + cl);
//当类加载器为null的时候,表示的是BootStrapLoader System.out.println("******************************");
clz = Demo4.class;
cl = clz.getClassLoader();
System.out.println("加载Demo4类对象的类加载器:" + cl);
while(cl!=null) {
cl1 = cl;
cl = cl1.getParent();//得到父加载器
System.out.println(cl1+"的父加载器是:" + cl);
} }
}

  别荒废了最能拼的年纪,让自己整天无所事事。自己那么差又不努力,还有什么资格唉声叹气。

  为了自己想要的未来,无论现在有多难熬,都必须得满怀信心的坚持下去。

java_[类加载器]的更多相关文章

  1. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  2. java类加载器及其委托机制

    1.什么是类加载器,类加载器父子结构.BootStrap-->ExtClassLoader-->AppClassLoader,级别依次降低 2.类加载器之间的父子关系和管辖范围 3.类加载 ...

  3. java类加载器加载文件

    例子:采用配置文件加反射的方式创建ArrayList和HashSet的实例对象. //第一种方式:类加载器加载文件 InputStream ips = ReflectTest2.class.getCl ...

  4. java自定义类加载器

    前言 java反射,最常用的Class.forName()方法.做毕设的时候,接收到代码字符串,通过 JavaCompiler将代码字符串生成A.class文件(存放在classpath下,也就是ec ...

  5. java类加载器深入研究

    看了下面几篇关于类的加载器的文章,豁然开朗.猛击下面的地址开始看吧. Java类加载原理解析      深入探讨 Java 类加载器 分析BootstrapClassLoader/ExtClassLo ...

  6. 黑马程序员——【Java高新技术】——类加载器

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 (一)类加载器(class loader) 用来动态加载Java类的工具,它本身也是Java类. ...

  7. [转载] Java高新技术第一篇:类加载器详解

    本文转载自: http://blog.csdn.net/jiangwei0910410003/article/details/17733153 首先来了解一下字节码和class文件的区别: 我们知道, ...

  8. Java虚拟机10:类加载器

    类与类加载器 虚拟机设计团队把类加载阶段张的"通过一个类的全限定名来获取此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这 ...

  9. [Java类加载器]Java中classLoader浅析.

    本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.l ...

随机推荐

  1. 浅谈 C# Assembly 与 IL (一):C# Assembly 与 Reflection

    作者:Compasslg 前言 前一阵子想利用闲余时间写一个 Unity 游戏的翻译工具,主要是用于翻译一些内嵌在代码中的文本,最初想偷懒看了一下网上的教学推荐说可以先利用DnSpy.ILSpy等工具 ...

  2. 1028 List Sorting

    Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...

  3. 077 Kuchiguse

    The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...

  4. lumen Rest API 起步

    lumen Rest API 起步 修改项目文件 .env DB_DATABASE=<数据库名> DB_USERNAME=<数据库用户名> DB_PASSWORD=<数据 ...

  5. Nginx隐藏式跳转(浏览器URL跳转后保持不变) - 运维笔记

    Nginx的隐藏式跳转可以实现将请求跳转到另一个网站的页面,并且浏览器中URL保持不变.Nginx配置中需要使用rewrite规则.下面提供两个示例来说明这种跳转需求的配置: 一.配置示例1将请求路径 ...

  6. Vue2.0组件之间通信

    Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单.笔者之前有写过一篇Vue2.0子父组件通信,这次我们就来聊一聊平级组件之间的通信. 首先我们先搭好开 ...

  7. Laravel路由中不固定数量的参数如何实现?

    前言 laravel是个好框架,我也在学习和使用,并且在公司里推广,最近在读 Laravel 源码的时候,发现了一个段特别有趣的代码,大家请看: ... 这三个点是做什么用的呢?我查了 PHP 的手册 ...

  8. Python中的optparse模块的使用

    optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数. 实例化一个 OptionParser 对象(可以带参,也可以不带参数),带参的话会把参数变量的内容作为帮助信息输 ...

  9. POJ2709 染料贪心

    题意:       要搭配出来n种颜料,每种颜料要用mi升,除了这n种颜色还有一个合成灰色的毫升数,灰色是由三种不同的颜色合成的,三种m m m 的不同颜色能合成m升灰色,然后问你满足要求至少要多少盒 ...

  10. Win64 驱动内核编程-9.系统调用、WOW64与兼容模式

    系统调用.WOW64与兼容模式 这种东西都是偏向于概念的,我就把资料上的东西整理下粘贴过来,资料来源于胡文亮,感谢这位前辈. WIN64 的系统调用比 WIN32 要复杂很多,原因很简单,因为 WIN ...