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 相关文章推荐
用js+xml自动生成表格的东西
Dec 21 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
Nov 28 Javascript
javascript事件函数中获得事件源的两种不错方法
Mar 17 Javascript
js实现鼠标经过表格行变色的方法
May 12 Javascript
Js调用Java方法并互相传参的简单实例
Aug 11 Javascript
jQuery子元素过滤选择器用法示例
Sep 09 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
使用pm2部署node生产环境的方法步骤
Mar 09 Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
使用 JavaScript 制作页面效果
Apr 21 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
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
DOM 事件流详解
2015/01/20 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
js实现蒙版效果
2020/01/11 Javascript
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python微信公众号之关键词自动回复
2018/06/15 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
入党自我鉴定范文
2013/10/04 职场文书
暑期培训班策划方案
2014/08/26 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
个人自荐书怎么写
2015/03/26 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS