博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java静态方法和非静态方法
阅读量:6530 次
发布时间:2019-06-24

本文共 1176 字,大约阅读时间需要 3 分钟。

3月31号面试,被面试官问到static 和非static 的问题。

首先,了解static关键字:在java编程思想里,是这么说的:

   通常,创建类的时候,就是在描述这个类的外观行为,除非用new创建那个类的对象,否则实际上并没有获取任何对象,new来创建对象时,数据存储空间才被分配,其方法才供外界调用。

但是,有两种情形是上述方法无法解决的。一种情形是,只想为某特定域分配单一存储空间而不去考虑究竟要创建多少对象,甚至是根本不创建任何对象;另外一种情形是,希望通过某个方法而不与包含他的类的任何对象关联在一起。也就是收即使没有创建对象,也能够调用这个方法。

    这样通过static就能满足以上的要求。当被声明为static时,就意味着这个域或者方法不会与包含他的类的任何对象关联在一起。因此即使没有创建这个类的对象,也可以调用static方法或者static变量。

另外就是,不论创建多少个类的实例,静态变量和静态方法,只会占用一份内存。

因此,当一个方法会被反复调用的时候,我们可以考虑将他申明为static,这样,不必每次调用的时候,都初始化类实例,分配内存空间。

static变量在java中的初始化顺序?

依然引用java编程思想里面的介绍:(不得不说这本书经典啊,基本很多细节都藏在小段里了,没事拿出来翻翻总没错!)

静态初始化只会在有必要的时候进行。也就是说,如果不需要创建静态对象所在的类,也不需要以类+"."的形式应用静态变量或者方法,那么,静态变量永远都不会被创建的。

一旦静态对象被初始化了,那么他们永远也不会再被初始化,也就是初始化只会执行一次!只会分配一次空间。

初始化的顺序:

 首先是静态对象(如果他们尚未因为前面的对象创建过程被初始化),然后是非静态对象。无法阻止初始化的进行,他在构造器被调用之前就已经发生了。

在类的内部,变量定义的顺序决定初始化的顺序,变量定义散布于各个地方,仍然会在任何方法(包括构造方法)调用之前被初始化。

 

在子类继承父类的时候,初始化的顺序如下:

在实例化子类的时候:

1.首先会执行父类的初始化代码块(先静态),实例变量的初始化

2.执行父类的构造函数

3,子类的初始化代码块

4,子类的构造函数。

 

如果类还没有被加载:那么子类通过类名加点的形式调用对象的时候,首先会执行父类的静态代码块和静态变量,顺序就是他们出现的顺序,然后在执行子类的静态代码块和静态变量。

如果类以及被加载过了,那么静态的变量和静态的代码块就不会被重复执行,再创建对象的时候只会执行与实例相关的变量初始化和构造函数。

 

以上为static关键字与初始化的相关知识,至于类的加载过程,会在以后的博客中单独介绍。

 

转载于:https://www.cnblogs.com/CongLollipop/p/6662958.html

你可能感兴趣的文章
从零开始写一个npm包,一键生成react组件(偷懒==提高效率)
查看>>
Golang中的路由
查看>>
【期末考试季】JAVA进阶复习提纲
查看>>
Volley(二)—— 基本Request对象 & RequestQueue&请求取消
查看>>
2017中国系统架构师大会“盛装”来袭
查看>>
Google插件switchysharp的用法
查看>>
中国最强的人工智能学术会议来了
查看>>
Metasploit的射频收发器功能 | Metasploit’s RF Transceiver Capabilities
查看>>
Osmocom-BB中cell_log的多种使用姿势
查看>>
主库 归档 删除策略
查看>>
linux服务器多网卡bond
查看>>
Chrome 更新策略大变:优先安装 64 位版本
查看>>
《Linux从入门到精通(第2版)》——导读
查看>>
路过下载攻击利用旧版 Android 漏洞安装勒索软件
查看>>
《ANTLR 4权威指南》——1.2 运行ANTLR并测试识别程序
查看>>
ThinkSNS 六大子版本体验及源码下载
查看>>
《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课1.8节复习
查看>>
《算法基础》——1.5实际因素
查看>>
《Java数字图像处理:编程技巧与应用实践》——第3章 基本Swing UI组件与图像显示 3.1 JPanel组件与BufferedImage对象的显示...
查看>>
为什么有人讨厌 Google 的新 Logo?
查看>>