java 类 加载 初始化_java中类的初始化和加载

最近在阅读孙卫琴的java面向对象一书中,看到对java中类的初始化和加载中的论述比较系统,故笔记之

1)类的初始化,JAVA在初始化一个类时,以下步骤

A 假如类存在直接的父类,并且这个父类还没有初始化,则先初始化直接的父类

B  假如类存在初始化的语句,那么直接执行这些初始化语句

比如

package init;

class Base{

static int a=1;

static{

System.out.println("init Base");

}

}

class Sub extends Base{

static int b=1;

static{

System.out.println("init Sub");

}

}

public class InitTester{

static{System.out.println("init InitTester");}

/*

public static void main(String args[]){

System.out.println("b="+Sub.b);  //执行这行代码时,先依次初始化Base类和Sub类

}

*/

输出:

init InitTester

init Base

init Sub

b=1

假如换成下面这样

public static void main(String args[]){

Base base;  //不会初始化Base类

System.out.println("After defining base");

base=new Base();  //执行这行代码时,初始化Base类

System.out.println("After creating an object of Base");

System.out.println("a="+base.a);

System.out.println("b="+Sub.b);  //执行这行代码时,仅仅初始化Sub类

}

}

输出

init InitTester

After defining base

init  Base

After creating an object of Base

a=1

init Sub

b=1

2) 类的初始化时机

A 对于final类型的,如果在编译时就能计算出变量的值,则不会导致类的初始化,如下

class Tester {

public static final int a=2*3;

static  {

System.out.println("hello");   ..............

}

}

public class Sample

{

public static void main(String args[])

{  System.out.println("a="+Tester.a);

}

}

2)  package initbase;

class Base{  static int a=1;  static{    System.out.println("init Base");  }  static void method(){    System.out.println("method of Base");  }}class Sub extends Base{  static{    System.out.println("init Sub");  }}public class Sample{  public static void main(String args[]){    System.out.println("a="+Sub.a);  //仅仅初始化Base类    Sub.method();    }}由于静态变量a和静态方法method()在 base父类中定义,所以仅初始化Base类,没初始化SUB类打印结果为init Basea=1method of Base这样的话,如果在调用Tester.a时,不会输出hello,

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

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

相关文章

Java webservice详解

文章目录1 webservice概述2 webservice核心要素2.1 SOAP2.2 WSDL3 webservice的使用场景4 webservice的结构5 Java中的webservice5.1 webservice服务端5.2 webservice客户端6 WDSL文件说明7 webservice 请求与响应监控8 webservice 在Tomcat中发布9 在Spring中使用webservice1 …

java net php_Java.netPHP比较 | php外包与php技术服务商

Java\.net\PHP比较首先,我们把Java 、.Net、 PHP应用方面占有率做个比较,简单的把目前主流应用分成两个大类,一个是企业应用,一个是Web网站应用,下面这个表格是我归纳的,不一定准确,但是能说明一…

HashMap、HashTable、ConcurrentHashMap、HashSet区别 线程安全类

HashMap专题:HashMap的实现原理–链表散列 HashTable专题:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析 Hash,Tree数据结构时间复杂度分析:HashMap, HashTable,HashSet,TreeMap 的时间复杂…

hibernate mysql cascade_Hibernate第五篇【inverse、cascade属性详解】

前言上一篇博文已经讲解了一对多和多对一之间的关系了,一对多和多对一存在着关联关系(外键与主键的关系)。本博文主要讲解Inverse属性、cascade属性。这两个属性对关联关系都有影响Inverse属性Inverse属性:表示控制权是否转移..true:控制权已转移【当前一…

java请编写公共类继承抽象类_(Java相关)怎么理解抽象类,继承和接口?

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:海子来源:博客园一.抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽…

Maven:repositories、distributionManagement、pluginRepositories中repository的区别

一、repositories中的repository二、distributionManagement中的repository三、pluginRepositories中的repository 一、repositories中的repository 表示从什么库地址可以下载项目依赖的库文件&#xff0c;比如&#xff1a; <repositories><repository><id>…

maven配置之:<distributionManagement>snapshot快照库和release发布库

在使用maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能一天就要发布一次&#xff0c;遇到bug时&#xff0c;甚至一天要发布N次。 我们知道&#xff0c;maven的依赖管理是基于版本管理的&#xff0c…

maven-compiler-plugin 插件详解

作用&#xff1a;指定maven编译的jdk版本和字符集,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 <plugin> <!-- 指…

面试常见java异常题_Java异常面试题(含答案)

1、Java中异常分为哪两种&#xff1f;编译时异常运行时异常2、异常的处理机制有几种&#xff1f;异常捕捉&#xff1a;try…catch…finally&#xff0c;异常抛出&#xff1a;throws。3、如何自定义一个异常继承一个异常类&#xff0c;通常是RumtimeException或者Exception4、tr…

maven打包插件:maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin详解

最近开发的产品&#xff0c;我们是有四五个maven模块&#xff0c;开发阶段一直是在eclipse中运行的&#xff0c;然后快发版的时候&#xff0c;需要把这些项目打成jar包&#xff0c;通过命令去启动&#xff0c;那首先就得把这些模块项目打包&#xff0c;或者拷贝一些资源文件等等…

Java Web访问.action_java设置web首页访问action

index.jsp一般首页进的是静态页面如果需要首页是动态的页面 就需要先进action访问数据 再回到首页显示因为 welcome-file 必须是实际存在的文件&#xff0c;不能是action或者servlet路径如果直接把index.jsp改成action 会出现404index.action直接设置action&#xff0c;404和s…

spring boot中打包插件spring-boot-maven-plugin和maven-jar-plugin的关联

简介 用spring boot快速开发时&#xff0c;通常用spring-boot-maven-plugin插件将springboot的应用程序打包成jar文件&#xff0c;然后通过java -jar运行&#xff0c;很方便。但是如果是部署到服务器上&#xff0c;每次更改代码后替换的包都比较大&#xff0c;至少30MB以上&am…

简化java_JAVA之旅-简化java开发

为了降低java开发的复杂性&#xff0c;spring采取了以下4种关键策略基于POJO的轻量级和最小侵入行编程为使不让应用与框架绑死&#xff0c;一个bean不会实现&#xff0c;继承或者导入Spring API相关的任何东西&#xff0c;只是一个普通的java对象。2. 通过依赖注入和面相接口实…

Maven父子结构的项目依赖使用以及打包依赖_微服务项目(maven父子级项目)怎么打包

Maven父子结构的项目依赖使用以及打包依赖 1&#xff1a;在父子结构项目中&#xff0c;如果要是用其他模块的类。在当前项目中的pom中 加入 其他模块的配置 <dependency><groupId>com.spring.mySpring</groupId><artifactId>mySpring-utils</artif…

搭建一个完整的微服务项目

一.项目技术架构 1.技术栈 前台技术 Node.js、Npm、Vue.js、WebPack、Vue Cli、Element UI 后台架构 微服务架构&#xff1a;按照功能拆分N多个服务&#xff0c;每个服务可以独立技术选型,独立开发,独立部署,独立运维.&#xff0c;单个服务使用基于ssm的springboot&#xff0…

java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)

基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)(任务书,毕业论文12000字,程序代码,MySQL数据库)本文分析了基于JAVA的雅思考试管理系统的设计与实现技术&#xff0c;结合实际提出了本系统的总体结构设计和主要模块的功能实现。本系统分为二个子系统:管理员子系统&…

java开发利器 源码_Java开发的利器: 反编译工具 JD-GUI

老赵说起来也能算个Java程序员&#xff0c;可是写过的Java代码并不多&#xff0c;可老赵实实在在是从程序员干起的。虽然肚子里也装了不少的东西&#xff0c;可作为一件乐此不疲的事情&#xff0c;就是看那些所谓“高人”的代码。高人们的行事风格&#xff0c;十人十样&#xf…

Maven搭建Nexus私服

私服的介绍 1 什么是私服 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网的仓库服务&#xff0c;私服代理广域网上的远程仓库&#xff0c;供局域网使用。 在企业开发中&#xff0c;私服的建设是有必要的&#xff0c;其好处如下&#xff1a; 1.1 节省资金、外网带宽…

java类加载面试题_java 类加载过程?【面试题详解】

今天爱分享给大家带来java 类加载过程?【面试题详解】&#xff0c;希望能够帮助到大家。java 类加载需要经历一下 7 个过程:加载加载时类加载的第一个过程&#xff0c;在这个阶段&#xff0c;将完成一下三件事情: 1. 通过一个类的全限定名获取该类的二进制流。2. 将该二进制流…

Java中Calendar类的常用方法

Calendar类常用方法的记录&#xff1a; 获取时间 // 使用默认时区和语言环境获得一个日历Calendar cal Calendar.getInstance();// 赋值时年月日时分秒常用的6个值&#xff0c;注意月份下标从0开始&#xff0c;所以取月份要1System.out.println("年:" cal.get(Cal…