JAVA面试题 static关键字详解


Posted in Javascript onJuly 16, 2019

问题

面试官Q1:请说说static关键字,你在项目中是怎么使用的?

static 关键字可以用来修饰:属性、方法、内部类、代码块;

static 修饰的资源属于类级别,是全体对象实例共享的资源;

使用 static 修饰的属性,静态属性是在类的加载期间初始化的,使用类名.属性访问

案例说明

①修饰成员变量

package com.ant.param;
 public class StaticFieldDemo {
  public static void main(String[] args) {
   Foo f1 = new Foo();
   Foo f2 = new Foo();
   Foo f3 = new Foo();
   System.out.println(f1.id + " " + f2.id + " " + f3.id );
  }
 }
class Foo{
 int id;
}

运行结果如下:

0 0 0

上面的代码我们很熟悉,根据Foo构造出的每一个对象都是独立存在的,保存有自己独立的成员变量,相互不会影响,他们在内存中的示意如下:

JAVA面试题 static关键字详解

从上图中可以看出,f1、f2和f3三个变量引用的对象分别存储在内存中堆区域的不同地址中,所以他们之间相互不会干扰。对象的成员属性都在这了,由每个对象自己保存。f1.id、f2.id、f3.id相当于“每个人一个水杯”。

我们对上面的代码,做如下修改:

package com.ant.param;
 public class StaticFieldDemo {
  public static void main(String[] args) {
   Foo f1 = new Foo();
   Foo f2 = new Foo();
   Foo f3 = new Foo();
   System.out.println(f1.id + " " + f2.id + " " +
   f3.id + " " + Foo.i);
  }
}
class Foo{
 int id;
 static int i=0;
 public Foo(){
  id = i++;
 }
}
运行结果如下:
0 1 2 3

程序执行过程内存图如下所示:

第 1 步:加载类

JAVA面试题 static关键字详解

static修饰的变量在类加载期间初始化,且在方法区中分配,属于线程共享区,所有的对象实例共享一份数据。

第 2步:继续加载类

JAVA面试题 static关键字详解

第 3步:继续加载类

JAVA面试题 static关键字详解

最终加载结果如上述三个步骤

②修饰成员方法

static的另一个作用,就是修饰成员方法。相比于修饰成员属性,修饰成员方法对于数据的存储上面并没有多大的变化,因为我们从上面可以看出,方法本来就是存放在类的定义当中的(方法区)。static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗,我们可能会经常在帮助类中看到它的使用:

package com.ant.param;
 
 public class StaticFieldDemo {
  private static void print(){
   System.out.println("hello");
  }
  public static void main(String[] args) {
   StaticFieldDemo.print();
  }
}

③修饰静态代码块

静态代码块是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执行一次!静态代码块用途很常见,一般用来在类加载以后初始化一些静态资源时候使用。如:加载配置文件等

package com.ant.param;
 
 public class StaticBlockDemo {
  public static void main(String[] args) {
   Foo foo = new Foo();
  }
 }
 
 class Foo{
 //代码块,在创建对象的时候执行,使用很少,和构造器差不多
 {
  System.out.println("创建对象了!");
 }
 //静态代码块,在类加载期间执行,用于加载配置文件或者其他信息等
 static{
  System.out.println("类加载了!");
 }
 public Foo(){
  System.out.println("调用了构造器!");
 }
}

静态块用法:将多个类成员放在一起初始化,使得程序更加规整,对理解对象的初始化过程非常关键;

在我的印象中,这些问题一般初中级Java工程师会被问到,都是很常规的面试题,您会了吗?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
Javascript this 的一些学习总结
Aug 31 Javascript
jquery实现输入框动态增减的实例代码
Jul 14 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
May 05 Javascript
javascript+canvas制作九宫格小程序
Dec 28 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
微信小程序 教程之注册页面
Oct 17 Javascript
ES6中箭头函数的定义与调用方式详解
Jun 02 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
Dec 08 Javascript
vue 实现在函数中触发路由跳转的示例
Sep 01 Javascript
jquery分页插件pagination使用教程
Oct 23 jQuery
10个最受欢迎的 JavaScript框架(推荐)
Apr 24 Javascript
微信小程序实现下拉框功能
Jul 16 #Javascript
javascript中的this作用域详解
Jul 15 #Javascript
微信小程序页面上下滚动效果
Nov 18 #Javascript
node.js实现上传文件功能
Jul 15 #Javascript
js canvas实现5张图片合成一张图片
Jul 15 #Javascript
js使用文件流下载csv文件的实现方法
Jul 15 #Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 #Javascript
You might like
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php安装swoole扩展的方法
2015/03/19 PHP
php二维码生成
2015/10/19 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
使用python实现扫描端口示例
2014/03/29 Python
Django的session中对于用户验证的支持
2015/07/23 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
报关专员求职信范文
2014/02/22 职场文书
大课间体育活动方案
2014/03/12 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
离职信范本
2015/06/23 职场文书
python爬虫--selenium模块
2021/03/31 Python
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python