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. Message Decoding UVA - 213

     Some message encoding schemes require that an encoded message be sent in two parts. The fifirst par ...

  2. vue项目打包本地后通过nginx解决跨域

    前言 有时候我们打包好vue项目让后端人员部署项目时可能会有小插曲,为了不麻烦后端人员和避免尴尬,最好的办法就是在本地自己先测一下,而在本地运行打包后的项目会遇到接口跨域的问题.我平时经常用的方法就是 ...

  3. 前端实用程序包utils - 开发工作流(一)

    写在前面 早年间有幸在Raychee哥门下当小弟,学到两把刷子.在编程路上,他的很多思想深深影响了我,比如笔者今天要分享的主题.在程序开发中,有个utils包,叫做实用程序包,程序员们会把项目中通用的 ...

  4. 09- monkey命令详解

    安装模拟器 如果你没有手机可以安装个模拟器,如果有手机了,忽略此步骤. 1.下载模拟器:http://www.xyaz.cn/ 2.安装:直接默认安装. 3.打开安卓模拟器,设置-关于手机-点击版本号 ...

  5. hdu3786 Floyd或搜索 水题

    题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. POJ3070矩阵快速幂简单题

    题意:       求斐波那契后四位,n <= 1,000,000,000. 思路:        简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...

  7. Python中Numpy模块的使用

    目录 NumPy ndarray对象 Numpy数据类型 Numpy数组属性 NumPy NumPy(Numerical Python) 是 Python 的一个扩展程序库,支持大量的维度数组与矩阵运 ...

  8. NumPy之:使用genfromtxt导入数据

    目录 简介 genfromtxt介绍 多维数组 autostrip comments 跳过行和选择列 简介 在做科学计算的时候,我们需要从外部加载数据,今天给大家介绍一下NumPy中非常有用的一个方法 ...

  9. MySQL分页优化_别再用offset和limit分页了

    终于要对MySQL优化下手了,本文将对分页进行优化说明,希望可以得到一个合适你的方案. 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础入门-mysql教程-数据库实战 ...

  10. FreeSql之Expression表达式拼接参数扩展

    在FreeSql源码中Expression表达式拼接默认最多支持到5个泛型参数,当我们使用表关联比较多的时候,就需要进行扩展. 新建一个类,将命名空间改为System.Linq.Expressions ...