Java进阶02-static关键字

来源:互联网 发布:多功能数据采集卡 编辑:程序博客网 时间:2024/06/15 18:29

1、为什么要用static关键字?

通常来说,用new创建类的对象时,数据存储空间才被分配,方法才供外界调用。但有时我们只想为特定域分配单一存储空间,不考虑要创建多少对象或者说根本就不创建任何对象,再就是我们想在没有创建对象的情况下也想调用方法。在这两种情况下,static关键字,满足了我们的需求。

2、static关键字的用法

最基本的用法是,static 可以用于修饰成员变量和成员方法,我们将其称之为静态变量和静态方法,直接通过类名来进行访问。

当一个事物为static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起,所以从未创建某个类的任何对象,也可以调用其static方法或访问其static域。

1)static变量

被static修饰的变量属于类变量,我们称之为静态变量,访问方式为:ClassName.propertyName

  • 静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且 JVM 也只会为它分配一次内存,同时类所有的实例都共享静态变量,即一处变、处处变,可以直接通过类名来访问它。

  • 但是实例变量则不同,它是伴随着new实例化的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。

public class Test {    private static int i = 0;    public Test() {        i++;    }    public static void main(String[] args) {        Test t1 = new Test();        Test t2 = new Test();        System.out.println("test1:" + t1.i);        System.out.println("test2:" + t2.i);    }}

输出结果:

test1:2test2:2

分析:static声明的变量是共享的,类加载了两次,所以i变为了2。

所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问便捷

2)static方法

被static修饰的方法属于类方法,我们称之为静态方法,访问方式为: ClassName.methodName()

由于他在类加载的时候就存在了,它不依赖于任何实例,所以 static 方法必须实现,也就是说他不能是抽象方法 abstract。

3)static 代码块

静态代码块也是用于初始化一个类的时候做操作用的,和静态变量、静态方法一样会随着类的加载一块执行,而且他可以随意放,可以存在于该了的任何地方。


面试题目:

1、”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

2、是否可以在static环境中访问非static变量?

static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

3、静态方法能不能引用非静态资源?

不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。

4、静态方法里面能不能引用静态资源?

可以,因为都是类初始化的时候加载的,大家相互都认识。

5、非静态方法里面能不能引用静态资源?

可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。

0 0