Java类的加载连接和初始化实例分析

 更新时间:2019年07月18日 08:37:42   作者:cakincqm  
这篇文章主要介绍了Java类的加载连接和初始化,结合具体实例形式分析了java类的加载、连接、初始化相关原理与实现技巧,需要的朋友可以参考下

本文实例讲述了Java类的加载连接和初始化。分享给大家供大家参考,具体如下:

一 点睛

1 类加载

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载、连接、初始化三个步骤来对该类进行初始化,如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。

类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序使用任何类时,系统都会为之建立一个java.lang.Class对象。

2 类数据的来源

通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:

从本地文件系统来加载class文件,这是绝大部分类加载方式。

从JAR包中加载class文件,这种方式也是很常见的,ODBC编程时用到的数据库驱动类就是放在JAR文件中,JVM可以从JAR文件中直接加载该class文件。

通过网络加载class文件。

把一个Java源文件动态编译、并执行加载。

3 类的连接

当类被加载之后,系统为之生成一个对应的Class对象,接着将会进入连接阶段,连接阶段将会负责把类的二进制数据合并到JRE中。类连接又可分为如下三个阶段:

  • 验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。
  • 准备:类准备阶段则负责为类的静态属性分配内存,并设置默认初始值。
  • 解析:将类的二进制数据中的符号引用替换成直接引用。

4 类的初始化

在类的初始化阶段,虚拟机负责对类进行初始化,主要就是对静态属性进行初始化。在Java类中对静态属性指定初始值有两种方式:

声明静态属性时指定初始值。

使用静态初始化块为静态属性指定初始值。

5 JVM初始化类的步骤

5.1 假如这个类还没有被加载和连接,程序先加载并连接该类。

5.2 假如该类的直接父类还没有被初始化,则先初始化其直接父类。

5.3 假如类中有初始化语句,则系统依次执行这些初始化语句。

二 实战

1 代码

public class Test
{
  static
  {
   // 使用静态初始化块为变量b指定出初始值
   b = 6;
   System.out.println("----------");
  }
  // 声明变量a时指定初始值
  static int a = 5;
  static int b = 9;     // ①
  static int c;
  public static void main(String[] args)
  {
   System.out.println(Test.b);
  }
}

2 运行

----------
9

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java常量池知识点总结

    Java常量池知识点总结

    本篇文章给大家通过理论原理等方便彻底分析了Java常量池的相关知识,有兴趣的朋友阅读学习下吧。
    2017-12-12
  • Java正则表达式之Pattern类实例详解

    Java正则表达式之Pattern类实例详解

    Pattern类的作用在于编译正则表达式后创建一个匹配模式,下面这篇文章主要给大家介绍了关于Java正则表达式之Pattern类的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • JavaWeb之Servlet注册页面的实现示例

    JavaWeb之Servlet注册页面的实现示例

    注册页面是很多网站都会是使用的到,本文主要介绍了JavaWeb之Servlet注册页面的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 使用eclipse创建java项目的方法

    使用eclipse创建java项目的方法

    这篇文章主要为大家详细介绍了使用eclipse创建java项目的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • java实现文件变化监控的方法(推荐)

    java实现文件变化监控的方法(推荐)

    下面小编就为大家带来一篇java实现文件变化监控的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • java中字符进行全角半角转换示例代码

    java中字符进行全角半角转换示例代码

    全角:指一个字符占用两个标准字符位置,而半角:指一字符占用一个标准的字符位置,在日常开发中经常会遇到全角半角转换的要求,下面这篇文章主要给大家介绍了关于java中字符进行全角半角转换的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-08-08
  • java中form以post、get方式提交数据中文乱码问题总结

    java中form以post、get方式提交数据中文乱码问题总结

    这篇文章主要介绍了java中form以post、get方式提交数据中文乱码问题总结,需要的朋友可以参考下
    2014-10-10
  • SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    本篇文章主要介绍了SpringMVC结合ajaxfileupload实现文件无刷新上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • 关于pom.xml中maven无法下载springcloud包问题

    关于pom.xml中maven无法下载springcloud包问题

    小编遇到这样一个问题spring-cloud-starter-feign,spring-cloud-starter-eureka 一直无法下载,maven仓库中包路径显示为unknown,怎么解决呢?下面小编给大家带来了pom.xml中maven无法下载springcloud包问题,需要的朋友可以参考下
    2022-08-08
  • JAVA中IP和整数相互转化的方法

    JAVA中IP和整数相互转化的方法

    这篇文章主要介绍了JAVA中IP和整数相互转化的方法,涉及java数值转换的相关技巧,需要的朋友可以参考下
    2015-05-05

最新评论