java程序的加载顺序_Java类的加载顺序

问题

昨天有人问我一个类中有静态方法,有静态代码块,普通代码块,构造函数,普通方法,静态方法,那么它们的加载顺序是什么?如果有之类继承该类,也有如上的方法,那么加载顺序又是如何?

实例1

普通方法StaticVar

package org.andy.test;

/**

* @author andy

* @version:2015-2-4 上午10:52:32

*

*

*/

public class StaticVar {

public StaticVar() {

System.out.println("----StaticVar-----");

}

}

测试加载方法OrderLoad

package org.andy.test;

/**

* @author andy

* @version:2015-2-4 上午10:33:48

*

*

*/

public class OrderLoad {

static{

System.out.println("----OrderLoad静态代码块-----");

}

private static StaticVar staticVar = new StaticVar();

{

System.out.println("----OrderLoad代码块-----");

}

public OrderLoad(){

System.out.println("----OrderLoad构造函数-----");

System.out.println(" ");

}

public static void staticFunction(){

System.out.println("----OrderLoad静态方法-----");

}

public void normalFunction(){

System.out.println("----OrderLoad普通方法-----");

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

OrderLoad staticVar = new OrderLoad();

OrderLoad.staticFunction();

staticVar.normalFunction();

}

}

运行结果如下:

0818b9ca8b590ca3270a3433284dd417.png

加载顺序是:

静态代码块-----静态方法--------普通代码块-------构造方法-----------调用的方法(包括静态方法和非静态方法,按调用顺序)

实例2

子类OrderLoadChild实现父类OrderLoad

package org.andy.test;

/**

* @author andy

* @version:2015-2-4 上午11:33:51

*

*

*/

public class OrderLoadChild extends OrderLoad {

static {

System.out.println("----OrderLoadChild静态代码块-----");

}

private static StaticVar staticVar = new StaticVar();

{

System.out.println("----OrderLoadChild代码块-----");

}

public OrderLoadChild(){

System.out.println("----OrderLoadChild构造函数-----");

System.out.println(" ");

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

OrderLoadChild orderLoadChild = new OrderLoadChild();

}

}

运行结果如下:

0818b9ca8b590ca3270a3433284dd417.png

加载顺序是:

父类静态块-----父类静态常量-------子类静态块----------子类静态常量----------父类普通代码块------------父类构造方法------------子类代码块------------子类构造方法

类的加载顺序

1、静态代码块/静态成员

静态代码块/静态成员最先加载。

静态代码块/静态成员顺序按照代码书写先后顺序加载。

如父类有静态代码块/静态成员,先调用父类静态代码块/静态成员(Object最优先),再一次加载本类的静态代码块/静态成员。

2、普通代码块/非静态成员

同一类中普通代码块/非静态成员顺序在静态代码块/静态成员加载之后。

同一类中多段普通代码块/非静态成员加载顺序按照代码书写先后加载。

如父类有普通代码块/非静态成员,现在加载父类的普通代码块/非静态成员,在加载子类的普通代码块/非静态成员。

3、构造方法

同一类中构造方法次于代码块之后加载。

同一类中如果有多个构造方法,按照实例时所调用的加载。

先加载父类的构造方法,在加载子类的构造方法。

子类的普通代码块/非静态成员加载顺序低于父类构造函数的加载顺序。

4、静态方法/普通方法

调用时才加载。

总结:

先加载父类的静态代码块/静态成员(父类中中都有或有多个有,按书写顺序) -------------  加载子类的静态代码块/静态成员(字类中都有或有多个,按书写顺序)---------父类的普通代码块/非静态成员(父类中中都有或有多个有,按书写顺序)------------父类的构造方法-----------------子类的普通代码块/非静态成员(字类中都有或有多个,按书写顺序)-----------子类的构造方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java.lang.Thread类详解,yield方法,join方法,interrupt方法,interrupted方法,destroy方法

一、前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类…

git stash 缓存 简介

当我们在使用git的时候,又是会有这种情况:当新的需求了的时候。我们需要为此需求新建一个分支,再次分支上进行修改,当经过测试,提交代码时,在将其合并到主分支,或生产分支上。 但是有时候也有失…

java中的线程池有哪些,分别有什么作用?

java中的线程池有哪些,分别有什么作用? 1.进程-线程简单介绍 2.java的线程池是什么,有哪些类型,作用分别是什么 3.使用线程池的优点 1.进程-线程的简单介绍 进程 什么是进程呢? 进程是计算机中的程序关于某数据集合…

线程安全的集合类有哪些?

验证ArrayList线程不安全 ArrayList 应当是开发中用到的最多的集合类,是动态列表,List 接口的实现类。 多数情况下,我们实在单线程环境使用,或者是在方法内部,以局部变量的形式使用,一般不会出现线程安全问…

try catch finally 中包含return的几种情况,及返回结果

第一种情况:在try和catch中有return,finally中没有return,且finally中没有对try或catch中要 return数据进行操作的代码,这种情况也是最好理解的。 public class Test {public static int num1;public static void main(String[] …

Shiro介绍及主要流程

Shiro介绍及主要流程 什么是Shiro Apache Shiro是一个强大且灵活的开源安全框架,易于使用且好理解,撇开了搭建安全框架时的复杂性。 Shiro可以帮助我们做以下几件事: 认证使用者的身份 提供用户的访问控制,比如: 决定…

http的请求体body的几种数据格式

文章目录multipart/form-dataapplication/x-www-from-urlencodedrawbinarypostman中 Params和Body的区别multipart/form-data 以表单形式提交,主要是上传文件用它,在http中格式为 application/x-www-from-urlencoded 以键值对的数据格式提交 raw…

谷歌浏览器安装json格式化插件

谷歌浏览器安装json格式化插件 实际开发工作中经常用到json数据,那么就会有这样一个需求:在谷歌浏览器中访问URL地址返回的json数据能否按照json格式展现出来。 比如,在谷歌浏览器中访问:http://jsonview.com/example.json 展现…

新版Elemen Plus 国际化 1.0.2-beta.59(包含59)

根据官方文档可以找到解决办法。先来看一下官方文档内容 官方给出了两种方式。这里只研究第一种方式&#xff1a; <template><el-config-provider :locale"locale"><App /></el-config-provider> </template><script> import …

JAVA跑步计时器app_坚持跑步神器app

&#xfeff;坚持跑步神器app&#xff0c;让坚持不了自己跑步训练的人能够完成自己的训练目标&#xff0c;特色的惩罚系统时刻监督你跑步&#xff0c;不需要GPS就可以实现&#xff0c;非常方便&#xff0c;快来下载吧坚持跑步神器app介绍坚持跑步神器&#xff0c;设定每天跑步多…

java 中 BigDecimal 详解

首先&#xff0c;学习一个东西&#xff0c;我们都必须要带着问题去学&#xff0c;这边我分为 【为什么&#xff1f;】【是什么&#xff1f;】【怎么用&#xff1f;】 【为什么要用BigDecimal&#xff1f;】 首先&#xff0c;我们先看一下&#xff0c;下面这个现象 那为什么会…

String、StringBuilder、StringBuffer的区别

它们之间的区别&#xff1a; 在我们学习String类的时候&#xff0c;也会学习到StringBuilder和StringBuffer&#xff0c;但是他们之间有什么区别呢&#xff1f; 当然他们在具体的代码实现上、内存分配上以及效率上都有着不同&#xff08;我这里以JDK8为例&#xff09;&#xff…

2016年 java_2016年java考试试题及答案

2016年java考试试题及答案简答应用题1.下面程序运行后&#xff0c;可以使用上下左右键移动组件。 补充下画线部分的代码。import java.awt.*;import java.awt.event.*;public class E6 extends Frame implements keyListener{TextField b1;int x,y;E6(){setLayout (new FlowLay…

【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?

String str “a” “b” “c"到底创建了几个对象&#xff1f;这是我们在讨论中最经常遇到的一个问题同时也是面试题。我们都知道在Java中从”.java"文件编译成".class"文件的过程&#xff0c;会有一个优化器去优化我们的代码。这个问题需要分成三种情况…

Linux中如何查看某个端口是否被占用

Linux中如何查看某个端口是否被占用 1.netstat -anp |grep 端口号 如下&#xff0c;我以3306为例&#xff0c;netstat -anp |grep 3306&#xff08;此处备注下&#xff0c;我是以普通用户操作&#xff0c;故加上了sudo&#xff0c;如果是以root用户操作&#xff0c;不用加sudo…

java 压缩jar 仓库,java服务安装(一):使用java service wrapper及maven打zip包

tags&#xff1a; java jsw maven zip1、概述使用java开发程序&#xff0c;在windows平台下&#xff0c;一般有web应用&#xff0c;后台服务应用&#xff0c;桌面应用&#xff1a;web应用多数打成war包在web容器(如tomcat,jetty等)中运行桌面应用一般打成jar包或exe文件运行后台…

如何处理代码冲突

如何处理代码冲突 冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异&#xff0c;并且这些差异中的文件改动&#xff0c;Git不能自动合并&#xff0c;那么就需要用户手动进行合并 如我这边执行git pull origin master 如果Git能够自动合并&#xff0c;那么过程看…

如何理解NIO

文章目录1.什么是NIO&#xff1f;2.为什么用NIO&#xff0c;传统IO有什么缺陷&#xff1f;3.NIO和IO的区别4.怎么理解NIO是面向块的、非阻塞的5.NIO是怎么实现的&#xff1f;1.什么是NIO&#xff1f; java.nio全称java non-blocking IO&#xff08;实际上是 new io&#xff09…

sublime php快捷键,分享Sublime Text 3快捷键精华版!

下面由sublime教程栏目给大家介绍Sublime Text 3 快捷键精华版&#xff0c;希望对需要的朋友有所帮助&#xff01;CtrlShiftP&#xff1a;打开命令面板CtrlP&#xff1a;搜索项目中的文件CtrlG&#xff1a;跳转到第几行CtrlW&#xff1a;关闭当前打开文件CtrlShiftW&#xff1a…

JDBC中使用preparedStatement防止SQL注入

一、SQL注入 SQL注入是一种比较常见的网路攻击方式&#xff0c;一些恶意人员在需要用户输入的地方&#xff0c;恶意输入SQL语句的片段&#xff0c;通过SQL语句&#xff0c;实现无账号登录&#xff0c;甚至篡改数据库。 二、SQL注入实例 登录场景&#xff1a; 在一个登录界面…