手机版

JAVA面试问题静态关键词详解

时间:2021-08-21 来源:互联网 编辑:宝哥软件园 浏览:

问题

采访者Q1:请告诉我静态关键词。你如何在项目中使用它?

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

静态修饰资源属于类级别,由所有对象实例共享。

用静态修饰的属性,这些属性在类的加载过程中初始化,并使用类名访问。属性

案例描述

(1)修改成员变量

package com . ant . param;公共类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 { int id}运行结果如下:

0 0 0

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

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

我们对上述代码进行了如下修改:

package com . ant . param;公共类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);} }类Foo { int id静态int I=0;public Foo(){ id=I;运行结果如下:0 1 2 3程序执行过程的内存图如下:

步骤1:加载类

静态修改变量在类加载过程中初始化,在方法区分配,属于线程共享区,所有对象实例共享一个数据。

步骤2:继续加载类

步骤3:继续加载类

最终加载结果如下:以上三个步骤

修改成员的方法

静态的另一个功能是修改成员方法。与修改成员属性相比,修改成员方法在数据存储方面变化不大,因为从上面我们可以看到,方法最初存储在类的定义中(方法区)。静态修改成员方法的最大功能是可以以“类名”的方式操作方法。方法名”,避免了先请求新对象的繁琐和资源消耗。我们可能经常在帮助类中看到它的用法:

package com . ant . param;公共类StaticFieldDemo { private static void print(){ system . out . println(' hello ');} public static void main(String[]args){ staticfielddemo . print();}} (3)修改静态代码块

静态代码块是在类加载期间运行的代码块。因为类只加载一次,所以静态代码块只执行一次!静态代码块通常在类加载后初始化一些静态资源时使用。例如加载配置文件等

package com . ant . param;公共类StaticBlockDemo { public static void main(String[]args){ Foo Foo=new Foo();}}创建对象时执行的class Foo{ //代码块很少使用,类似于构造函数{ system . out . println(' object created!');}//静态代码块,在类加载期间执行,用于加载配置文件或其他信息,如静态{ System.out.println('类已加载!');} publicfoo () {system。out.println('构造函数被调用!');}}静态块用法:将多个类成员放在一起初始化,使程序更有规律,对于理解对象的初始化过程非常重要;

在我的印象中,这些问题一般都是初级和中级Java工程师问的,都是常规的面试问题。你认识他们吗?

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:JAVA面试问题静态关键词详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。