java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用
比如main方法就必须是静态的 这是程序入口
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.

静态方法
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:

public static int maximum(int n1,int n2)

使用类的静态方法时,注意:

a在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。

b 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。

(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:
fun()
{
static int i=0;//非法。
}

(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}

类装载步骤
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:

装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。

(二)静态代码块的初始化顺序

class Parent{ static String name = "hello"; { System.out.println("parent block"); } static { System.out.println("parent static block"); } public Parent(){ System.out.println("parent constructor"); } 
} class Child extends Parent{ static String childName = "hello"; { System.out.println("child block"); } static { System.out.println("child static block"); } public Child(){ System.out.println("child constructor"); } 
} public class StaticIniBlockOrderTest { public static void main(String[] args) { new Child();//语句(*) } 
}
问题:当执行完语句(*)时,打印结果是什么顺序?为什么?
解答:当执行完语句(*)时,打印结果是这样一个顺序 :
parent static block
child static block
parent block
parent constructor
child block
child constructor

分析:当执行new Child()时,它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容,当父类的静态代码块里面的内容执行完毕之后,接着去执行子类(自己这个类)里面的静态代码块,当子类的静态代码块执行完毕之后,它接着又去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法,这个就是一个对象的初始化顺序。

总结:
对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。


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

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

相关文章

QQ浏览噐怎么拍照识题 QQ浏览器拍照识题教程介绍说明

QQ浏览噐在最近推出了拍照识题的服务,有不少感兴趣的用户想知道应该怎么使用该功能。那么下面小编就为大家介绍了QQ浏览器拍照识题的方法,希望对你有所帮助。 QQ浏览器拍照识题的步骤: 1、现在进入了QQ浏览噐页面后,要是想使用拍…

mysql中int、bigint、smallint 和 tinyint的区别与长度的含义

bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 int 从 -2^31 (-2,147,483,648) 到…

谷歌浏览器怎么禁用flash flash禁用方法分享

频频曝出的安全漏洞,让flash的存在感越来越低,甚至曾有一个Flash安全漏洞被曝可用于向Windows PC传播勒索软件,许多公司和个人用户也因此选择禁用flash!那么,在谷歌浏览器中要怎么禁用flash呢?下面就让我们来了解一下。 方法步骤…

阿里RocketMQ Quick Start

RocketMQ单机支持1万以上的持久化队列,前提是足够的内存、硬盘空间,过期数据数据删除(RocketMQ中的消息队列长度不是无限的,只是足够大的内存数据定时删除) RocketMQ版本:3.1.4 一,部署NameServ…

世界之窗浏览器怎么隐藏收藏栏

想必大家都知道,无论是什么浏览器,默认都是会显示收藏栏的,这样用户就可以快速打开收藏栏中收藏的网页,但很多时候有些用户会收藏一些不想被人看到的网页,这时候最好的方法就是将收藏栏隐藏起来了。那么,世…

Maven依赖排除 禁止依赖传递 取消依赖的方法

大家都知道Maven的优点是依赖管理,特别是前期使用ANT的开发者都有很多感触。最近要开发一个java工程,定的要使用maven,会使用hadoop和hbase的客户端,而引入一个hadoop-client的jar或者hbase的jar包,会依赖十几个其他的…

IE浏览器开发人员工具怎么使用

大家都知道IE是Windows系统默认的浏览器,功能齐全,方便用户操作,也为开发人员提供了许多便捷。为了帮助开发人员更好的调试浏览器,IE为大家准备了强大的开发人员工具,要怎么使用这个功能呢?下面小编来给大家讲讲。 操…

Intellij Idea的使用之svn篇

记一下idea的svn使用有图超详细 根据在eclipse里使用svn的经验琢磨了一下idea,现把idea下svn的使用方法记录如下 主要分为几个功能来介绍 第一个功能当然是把远程的svn代码拉到我们本地 下面的多出了一个svn的窗口,在左边有加号可以添加一个svn的库 输入svn的地…

爱奇艺PPS如何登陆账号

爱奇艺PPS是一个非常好的网络看电影的播放器。下面小编告诉大家如何登陆爱奇艺PPS,因为只有登陆才能获取特权 爱奇艺PPS如何登陆账号 1、首先打开爱奇艺PPS播放器 爱奇艺PPS如何登陆账号 2、点击左上角的爱奇艺这几个绿字 爱奇艺PPS如何登陆账号 3、点击弹出来…

Intellij IDEA 的使用

前言: 为什么我要选择intellij idea呢?原因有三 1.以前公司的项目 在myeclipse10中不稳定 myeclipse说不定什么时候就崩溃卡死了 而intellij很稳定 2.界面高端洋气 用我朋友的话说 看着跟搞苹果开发一样 3.项目的支持上比较好 基本上web项目都可以导…

笔记本win7系统关闭触摸板功能的方法

大家都知道win7笔记本电脑上有触摸面板,不过很多人都是只用鼠标的,而且触摸板还会影响操作,那么笔记本win7系统怎么关闭触摸板功能呢?下面一起来看看笔记本win7系统关闭触摸板功能的方法吧。 笔记本win7系统关闭触摸板功能的方法 1、打开电…

Eclipse设置、调优、使用

eclipse调优一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度1.在eclipse启动的时候,它总是会搜索让其运行…

怎么在pptv里下载电视剧

手机已越来越方便,尤其对爱看电视剧的我们,更方便了,想看什么可以一直看完,不用一天几集等的着急了,那用手机该怎么下载电视剧呢,让我们一起来学校下吧! 1、从主菜单上找到pptv,如果没有下载可以从安卓市场里直接下载个.下载好的就直接点击进入. 怎么在pptv里下载电视剧 2、…

Git上传代码到coding.net

coding.net是一个代码托管和项目管理的平台,相当于国外的Github。使用了一段时间,感觉挺方便的,使用起来比Github还要简单点。 git的下载和安装就且不介绍了,百度一下,windows、mac版的都能顺利的下载下来。下面简单介…

2345浏览器兼容模式怎么设置

2345浏览器兼容模式设置流程 1、打开浏览器,然后将鼠标放上去,就会显示浏览器的模式,用户可以点击地址旁边的图标,不是兼容模式就点击替换; 2、进入浏览器菜单,进入高级设置,选择自己想要的模式&#xff…

Guava 实用操作集合

guava 是 google 几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。 大家平时经常遇到某些相同的问题,自己写代码也都能解决。但是久而久之会感觉到很痛苦,因为我们一而再,再而三的重复发明轮子。…

QQ浏览器如何启用无痕模式

我们在日常浏览网页的时候总会留下浏览记录,同时会产生网页缓存,而别有用心之人就可以通过这些信息窥探到我们的隐私甚至威胁到我们的财产安全,而QQ浏览器为了防止产生浏览记录和网页缓存特地制作了无痕模式,那如何使用无痕模式呢…

Intellj Idea 如何设置类头注释和方法注释

intellj idea 如何设置类头注释和方法注释intellj idea的强大之处就不多说了,相信每个用过它的人都会体会到,但是我们也会被他的复杂搞的晕头转向,尤其刚从eclipse转过来的童鞋,相信刚开始的那段经历都是不堪回首的,我…

傲游浏览器语言怎么切换 傲游浏览器语言切换方法简述

作为一款多功能、个性化、多标签的浏览器产品,傲游浏览器不仅能够有效减少浏览器对系统资源的占用率,还内置了大量的贴心功能,其中便包括浏览器语言切换。那么,傲游浏览器语言要怎么切换呢?不清楚具体步骤的朋友,还不…

Logback介绍及入门

Logback简介 Logback是由log4j创始人设计的又一个开源日志组件。 logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API…