`
天府小茶客
  • 浏览: 12827 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java类加载过程知识点总结

    博客分类:
  • java
阅读更多

1java执行时是动态加载class的,不是一次性加载完。

 

2classloader的分层:

最上一层是bootclassLoader,然后是扩展(Extesion classloader)、应用(Application classLoader,用户自定义的class)、其他loader

注意:classLoaderload class的时候首先找上一层的loader是不是load过了,如果已经load了,就不会再次load

作用: 安全性好!比如:自己写的String.class永远也没机会执行到,只会执行系统的String.class

 

classloader举例程序:

public class TestClassLoader {

	/**
	 * 演示classloader的知识点
	 * @author cdzhujun
	 */
	public static void main(String[] args) {
		//classloader的分类
		//注:BootStrap ClassLoader没有name
		System.out.println(String.class.getClassLoader());
		System.out.println(com.sun.crypto.provider.DESedeKeyFactory.class.getClassLoader().getClass().getName());
		System.out.println(TestClassLoader.class.getClassLoader().getClass().getName());
		
		
		System.out.println("——————");
		/*
		 * classLoader在load class的时候首先找上一层的loader是不是load过了,如果已经load了,就不会再次load
		 * 作用:安全性好!比如:自己写的String.class永远也没机会执行到,只会执行系统的String.class
		 */
		ClassLoader c = TestClassLoader.class.getClassLoader();
		//打印出父classloader
		while(c != null) {
			System.out.println(c);
			c = c.getParent();
		}
	}
}

 执行结果:

null
sun.misc.Launcher$ExtClassLoader
sun.misc.Launcher$AppClassLoader
——————
sun.misc.Launcher$AppClassLoader@7e820d53
sun.misc.Launcher$ExtClassLoader@c390508

 3、静态语句块:在加载后执行一次。

型如:

static {
		System.out.println("这是静态语句块");
}

 4、动态语句块:每次new新的对象都会执行

型如:

{
		System.out.println("这是动态语句块");
}

 5、对象的初始化顺序: 静态代码块内容先执行,接着执行父动态代码块和构造方法,然后执行子类动态代码块和构造方法。

例子程序:

class ParentTest {
	public static String PARENT_STATIC_FIELD = "父类-静态属性";

	// 父类-静态块
	static {
		System.out.println(PARENT_STATIC_FIELD);
		System.out.println("父类-静态代码块");
	}

	public static String parentField = "父类-非静态属性";

	// 父类-非静态块
	{
		System.out.println(parentField);
		System.out.println("父类-非静态代码块");
	}

	public ParentTest() {
		System.out.println("父类—无参构造函数");
	}
}

public class StaticIniBlockOrderTest extends ParentTest {
	public static String STATIC_FIELD = "静态属性";

	// 静态块
	static {
		System.out.println(STATIC_FIELD);
		System.out.println("静态代码块");
	}

	public String field = "非静态属性";

	// 非静态块
	{
		System.out.println(field);
		System.out.println("非静态代码块");
	}

	public StaticIniBlockOrderTest() {
		System.out.println("无参构造函数");
	}

	public static void main(String[] args) {
		StaticIniBlockOrderTest test = new StaticIniBlockOrderTest();
	}
}

 执行结果:

父类-静态属性
父类-静态代码块
静态属性
静态代码块
父类-非静态属性
父类-非静态代码块
父类—无参构造函数
非静态属性
非静态代码块
无参构造函数

 执行结果已经很明显的说明了代码的执行顺序。

 

 

0
0
分享到:
评论

相关推荐

    Java基础知识点总结.docx

    以下是对这些知识点的详细说明: 一、Java概述: Java是由Sun Microsystems开发的一种跨平台的编程语言,它具有“一次编写,到处运行”的特性,通过Java虚拟机(JVM)实现平台无关性。Java有丰富的类库支持,适用于...

    java知识点总结

    java知识点总结 一、Java 概述 Java 语言的发展始于 1991 年,由 Sun 公司的 James Gosling 等人开始开发,最初命名为 Oak,旨在用于控制嵌入在有线电视交换盒、PDA 等的微处理器。1994 年更名为 Java。Java 语言...

    Java类加载器学习总结.pdf

    类加载器相关的知识点还包括: - `java.lang.Class`类:代表Java中的所有类的类型,类加载器在加载类时会生成对应的`Class`对象。 - `Class.newInstance()`方法:通过类对象创建该类的一个实例,要求该类有一个无参...

    JAVA核心知识点总结.pdf

    《JAVA核心知识点总结》 Java作为一款广泛应用的编程语言,其核心知识点对于开发者来说至关重要。本资料旨在为准备面试或者系统学习Java的人员提供一个全面的复习框架。以下是对其中部分关键知识点的详细阐述: **...

    java 知识点总结

    ### Java知识点总结 #### JVM与类的生命周期 Java Virtual Machine (JVM) 是Java平台的核心组件之一,负责执行Java字节码。对于Java程序来说,理解JVM如何工作至关重要。 ##### 类的生命周期 类的生命周期是指类...

    java基础知识点归纳总结

    "java基础知识点归纳总结" java是一种广泛应用的编程语言,以下是java基础知识点的归纳总结: 一、java 概述 * java是由Sun公司的James Gosling等人开发的语言,最初名称为Oak,1994年更名为Java。 * java有三种...

    Hibernate知识点总结

    ### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...

    Java面试知识点整理总结

    Java面试知识点整理总结涵盖了多个关键领域,这对于求职者或希望提升技术能力的Java开发者来说是宝贵的资源。以下是对这些主题的详细阐述: 1. **Java基础**:这是学习任何编程语言的基础,包括变量、数据类型、...

    java秋招笔试面试知识点总结

    根据提供的文件信息,以下是对“java秋招笔试面试知识点总结”中涉及到的知识点进行的详细说明。 1. Java内存区域划分:Java虚拟机在执行Java程序时,会将内存分为几个不同的数据区域。其中包括寄存器、本地方法栈...

    java面试大全。各大公司面试总结。知识点总结,共31个文档

    Java面试大全涵盖了大量的技术知识点,这些内容通常会出现在各大公司的面试过程中。为了帮助你更好地准备,以下是基于描述中提到的“31个文档”可能涉及的一些核心Java面试知识点的详细阐述: 1. **基础概念**:...

    Java面试题基本知识点总结(1)

    ### Java面试题基本知识点总结(1) #### 面向对象的基本概念 - **面向对象的概念**:在Java中,面向对象编程的核心思想是“一切皆对象”。这意味着系统中的每一个组成部分都可以被视为对象,具备自己的状态(属性...

    java——知识点归纳总结

    ### Java——知识点归纳总结 #### 概述 Java是一种简单且强大的面向对象编程语言,以其跨平台特性闻名,即“一次编写,到处运行”。Java语言的设计原则包括分布性、安全性、健壮性和多线程性,使其成为互联网时代...

    Java类加载及SPI机制.zip

    Java类加载机制是Java运行时环境的核心组成部分,它负责将.class文件从磁盘加载到内存中,转换为可执行的Java对象。...这两个知识点对于Java开发者来说是必不可少的,深入掌握能提高开发效率和代码质量。

    java知识体系总结

    Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司...上述知识点只是Java庞大知识体系的一部分,深入理解并熟练运用这些概念,对于成为一名优秀的Java程序员至关重要。

    corejava基础重要知识点总结

    CLASSPATH:类加载器使用 让类加载器明确去哪里加载.class文件 通常不需要设置 默认值:. .:当前目录(.java) CLASSPATH相当于中国的低保制度 JAVA_HOME:其他的程序使用 WEB 设置方式: 1:一次性的设置 ...

    Java基础知识点总结

    Java基础知识点总结 Java基础知识点总结是一篇关于Java基础知识的总结,涵盖了Java的概述、Java技术架构、JDK、JRE、环境变量配置、classpath配置、javac命令和java命令、Java语法基础等内容。 一、Java概述 Java...

    2022年JAVA程序设计基础知识点总结.docx

    JAVA 程序设计基础知识点总结 本文将对 JAVA 程序设计基础知识点进行总结,涵盖了 JAVA 的历史、技术架构、开发环境、环境变量配置、Classpath 配置、javac 和 java 命令的作用等方面的知识点。 一、JAVA 的历史 ...

Global site tag (gtag.js) - Google Analytics