首先描述了用静态关键字修改java类、方法、变量和代码块的方法。然后,从底层分析静态关键词。接下来给出了一些静态的使用场景和案例。最后对静态做了总结,包括静态和普通变量的区别。
好了,开始今天的文章。
一、静态关键字的基本用法
1。静态关键字的基本概念
我们可以用一句话来总结:不创建对象,调用方便。
也就是说,由static关键字修饰的对象可以直接根据类名来访问,而不需要创建一个对象来调用。下面根据static关键字的四种基本用法来描述这个概念。然后我们会在下一部分分析静态的原理。希望你能认真看完。
2,静态关键字装饰类
Java static一般用于修改成员变量或函数。然而,用static修饰内部类有一个特殊的用途。普通类不允许被声明为静态的,只有内部类可以。以下是使用方法。
如果内部类没有用static修饰,那么只有一个外部类实例可以是新的。然后通过外部实例创建内部类。
3、静态关键字修饰方法
在装饰一个方法的时候,它实际上和一个类是一样的,可以通过类名直接调用:
4。static关键字修改变量
由static修改的成员变量称为静态变量,也称为类变量,表示这个变量属于这个类,而不是一个对象。未被static修改的成员变量称为实例变量,表示该变量属于特定对象。
我们也可以用上面的方法来调用变量:
5。static关键字修饰代码块
静态代码块在第一次加载类时执行。这里主要是想验证一下类初始化的顺序。
父类静态变量父类静态代码块子类静态变量子类静态代码块父类普通变量父类普通代码块父类构造函数子类普通变量子类普通代码块子类构造函数
验证代码:
首先我们定义一个父类。
然后定义一个子类。
看看结果
二。深入分析静态关键字
上面我们只是描述了静态关键字的基本使用场景,下面主要分析静态关键字的深层原理。要理解为什么static具有上述特性,首先我们需要从jvm内存开始。我们先给出一个java的内存结构图,然后通过一个案例描述一下静态修饰的变量存放在哪里。
从上图我们可以看到,静态变量存储在方法区,由所有线程共享。先说java堆。java堆存储我们创建的实例变量。
堆区域:
1.所有对象都被存储,每个对象都包含相应类的信息。(上课的目的是为了得到操作说明)
2.jvm只有一个由所有线程共享的堆。堆不存储基本类型和对象引用,只存储对象本身。
堆栈区域:
1.每个线程都包含一个堆栈区,其中只存储基本数据类型的对象和自定义对象的引用(不是对象),所有对象都存储在堆区。
2.每个堆栈中的数据(原始类型和对象引用)是私有的,不能被其他堆栈访问。
3.堆栈分为三个部分:基本类型变量区、执行环境上下文、操作指令区(存储操作指令)。、
方法区域:
1.也叫静态区,和堆一样,是所有线程共享的。该方法包含所有的类和静态变量。
2.方法区域包含在整个程序中总是唯一的元素,比如类和静态变量。
这里有一个案例,从记忆的角度来说明为什么static关键字会有这样的特点。
首先我们定义一个类。
接下来,我们从记忆的角度来看。
从上面可以看出,当我们的方法被调用时,是从方法区调用的,只是堆内存不同。堆内存中的成员变量lastname是随着对象产生的。随着物体的消失而消失。静态变量是所有线程共享的,所以不会消失。这也可以解释上面静态关键词的真正原因。
以下是static关键字的摘要:
(1)特点:
1.static是用于修改成员的修饰符。(成员变量,成员函数)由static修改的成员变量称为静态变量或类变量。
2.用static修饰的成员由所有对象共享。
3.静态优先于对象,因为静态的成员在加载类时已经存在。
4.用static修饰的成员多了一个调用方法,可以用类名(class name)直接调用。静态成员)。
5.静态修饰的数据是共享数据,存储在对象中的数据是唯一数据。
(2)成员变量和静态变量的区别:
1.不同的生命周期:
成员变量随着对象的创建而存在,并随着对象的回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2.不同的通话方式:
成员变量只能由对象调用。
静态变量可以由对象或类名调用。(建议用类名调用)
3.不同的别名:
成员变量也称为实例变量。
静态变量被称为类变量。
4.不同的数据存储位置:
成员数据存储在堆内存中的对象中,因此也称为对象的唯一数据。
静态变量数据存储在方法区的静态区(共享数据区),所以也叫对象的共享数据。
(三)静态使用注意事项:
1.静态方法只能访问静态成员。(非静态可以访问静态和非静态)
2.不能在静态方法中使用this或super关键字。
3.主要功能是静态的。
好了,静态关键词介绍完毕。
本文来自少年我念你投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/542546.html