1、java执行时是动态加载class的,不是一次性加载完。
2、classloader的分层:
最上一层是bootclassLoader,然后是扩展(Extesion classloader)、应用(Application classLoader,用户自定义的class)、其他loader
注意:classLoader在load 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(); } }
执行结果:
父类-静态属性 父类-静态代码块 静态属性 静态代码块 父类-非静态属性 父类-非静态代码块 父类—无参构造函数 非静态属性 非静态代码块 无参构造函数
执行结果已经很明显的说明了代码的执行顺序。
相关推荐
以下是对这些知识点的详细说明: 一、Java概述: Java是由Sun Microsystems开发的一种跨平台的编程语言,它具有“一次编写,到处运行”的特性,通过Java虚拟机(JVM)实现平台无关性。Java有丰富的类库支持,适用于...
java知识点总结 一、Java 概述 Java 语言的发展始于 1991 年,由 Sun 公司的 James Gosling 等人开始开发,最初命名为 Oak,旨在用于控制嵌入在有线电视交换盒、PDA 等的微处理器。1994 年更名为 Java。Java 语言...
类加载器相关的知识点还包括: - `java.lang.Class`类:代表Java中的所有类的类型,类加载器在加载类时会生成对应的`Class`对象。 - `Class.newInstance()`方法:通过类对象创建该类的一个实例,要求该类有一个无参...
《JAVA核心知识点总结》 Java作为一款广泛应用的编程语言,其核心知识点对于开发者来说至关重要。本资料旨在为准备面试或者系统学习Java的人员提供一个全面的复习框架。以下是对其中部分关键知识点的详细阐述: **...
### Java知识点总结 #### JVM与类的生命周期 Java Virtual Machine (JVM) 是Java平台的核心组件之一,负责执行Java字节码。对于Java程序来说,理解JVM如何工作至关重要。 ##### 类的生命周期 类的生命周期是指类...
"java基础知识点归纳总结" java是一种广泛应用的编程语言,以下是java基础知识点的归纳总结: 一、java 概述 * java是由Sun公司的James Gosling等人开发的语言,最初名称为Oak,1994年更名为Java。 * java有三种...
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
Java面试知识点整理总结涵盖了多个关键领域,这对于求职者或希望提升技术能力的Java开发者来说是宝贵的资源。以下是对这些主题的详细阐述: 1. **Java基础**:这是学习任何编程语言的基础,包括变量、数据类型、...
根据提供的文件信息,以下是对“java秋招笔试面试知识点总结”中涉及到的知识点进行的详细说明。 1. Java内存区域划分:Java虚拟机在执行Java程序时,会将内存分为几个不同的数据区域。其中包括寄存器、本地方法栈...
Java面试大全涵盖了大量的技术知识点,这些内容通常会出现在各大公司的面试过程中。为了帮助你更好地准备,以下是基于描述中提到的“31个文档”可能涉及的一些核心Java面试知识点的详细阐述: 1. **基础概念**:...
### Java面试题基本知识点总结(1) #### 面向对象的基本概念 - **面向对象的概念**:在Java中,面向对象编程的核心思想是“一切皆对象”。这意味着系统中的每一个组成部分都可以被视为对象,具备自己的状态(属性...
### Java——知识点归纳总结 #### 概述 Java是一种简单且强大的面向对象编程语言,以其跨平台特性闻名,即“一次编写,到处运行”。Java语言的设计原则包括分布性、安全性、健壮性和多线程性,使其成为互联网时代...
Java类加载机制是Java运行时环境的核心组成部分,它负责将.class文件从磁盘加载到内存中,转换为可执行的Java对象。...这两个知识点对于Java开发者来说是必不可少的,深入掌握能提高开发效率和代码质量。
Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司...上述知识点只是Java庞大知识体系的一部分,深入理解并熟练运用这些概念,对于成为一名优秀的Java程序员至关重要。
CLASSPATH:类加载器使用 让类加载器明确去哪里加载.class文件 通常不需要设置 默认值:. .:当前目录(.java) CLASSPATH相当于中国的低保制度 JAVA_HOME:其他的程序使用 WEB 设置方式: 1:一次性的设置 ...
Java基础知识点总结 Java基础知识点总结是一篇关于Java基础知识的总结,涵盖了Java的概述、Java技术架构、JDK、JRE、环境变量配置、classpath配置、javac命令和java命令、Java语法基础等内容。 一、Java概述 Java...
JAVA 程序设计基础知识点总结 本文将对 JAVA 程序设计基础知识点进行总结,涵盖了 JAVA 的历史、技术架构、开发环境、环境变量配置、Classpath 配置、javac 和 java 命令的作用等方面的知识点。 一、JAVA 的历史 ...