java中的static关键字几个注意点
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的static关键字几个注意点相关的知识,希望对你有一定的参考价值。
文章目录
java中的static关键字
首先,static是java的关键字之一。在Java类里只能包含成员变量、方法、构造器、初始化块、内部类(包括接口、枚举)5种成员,而static可以修饰成员变量、方法、初始化块、内部类(包括接口、枚举),也就是除了构造器都可以修饰。
注意:以static修饰的成员就是类成员。类成员属于整个类,而不属于单个对象。这句话涵盖了static的整个核心思想!
对static关键字而言,有一条非常重要的规则:
static修饰的类成员(包括成员变量、方法、初始化块、内部类和内部枚举)不能访问实例成员(包括成员变量、方法、初始化块、内部类和内部枚举)。因为类成员是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类成员访问实例成员将会引起大量错误。
static修饰的类可以被继承
如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static修饰的内部类被称为类内部类,有的地方也称为静态内部类
package com.yyl.statictest;
public class StaticTest
static class StaticInnerClass
class OuterClass extends StaticTest.StaticInnerClass
static关键字不可修饰外部类
static关键字的作用是把类的成员变成类相关,而不是实例相关,即static修饰的成员属于整个类,而不属于单个对象。外部类的上一级程序单元是包,所以不可使用static修饰;而内部类的上一级程序单元是外部类,使用static修饰可以将内部类变成外部类相关,而不是外部类实例相关。因此static关键字不可修饰外部类,但可修饰内部类。
静态内部类规则:
静态内部类需满足如下规则:
-
静态内部类可以包含静态成员,也可以包含非静态成员;
-
静态内部类不能访问外部类的实例成员,只能访问它的静态成员;
-
外部类的所有方法、初始化块都能访问其内部定义的静态内部类;
-
在外部类的外部,也可以实例化静态内部类,语法如下:
外部类.内部类 变量名 = new 外部类.内部类构造方法();
测试代码如下所示:
package com.yyl.statictest;
public class StaticTest
private String outer;
private static String visit="visit";
static class StaticInnerClass
private String name;
private int age;
public StaticInnerClass(String name, int age)
this.name = name;
this.age = age;
public void visitOuter()
System.out.println(StaticTest.visit);
class OuterClass extends StaticTest.StaticInnerClass
public OuterClass(String name, int age)
super(name, age);
class MainTest
public static void main(String[] args)
StaticTest.StaticInnerClass staticInnerClass = new StaticTest.StaticInnerClass("yyl",12);
staticInnerClass.visitOuter();
static和final有什么区别?
static和final区别
static关键字可以修饰成员变量、成员方法、初始化块、内部类,被static修饰的成员是类的成员,它属于类、不属于单个对象。以下是static修饰这4种成员时表现出的特征:
-
类变量:被static修饰的成员变量叫类变量(静态变量)。类变量属于类,它随类的信息存储在方法区,并不随对象存储在堆中,类变量可以通过类名来访问,也可以通过对象名来访问,但建议通过类名访问它。
-
类方法:被static修饰的成员方法叫类方法(静态方法)。类方法属于类,可以通过类名访问,也可以通过对象名访问,建议通过类名访问它。
-
静态块:被static修饰的初始化块叫静态初始化块。静态块属于类,它在类加载的时候被隐式调用一次,之后便不会被调用了。
-
静态内部类:被static修饰的内部类叫静态内部类。静态内部类可以包含静态成员,也可以包含非静态成员。静态内部类不能访问外部类的实例成员,只能访问外部类的静态成员。外部类的所有方法、初始化块都能访问其内部定义的静态内部类。
final关键字可以修饰类、方法、变量,以下是final修饰这3种目标时表现出的特征:
-
final类:final关键字修饰的类不可以被继承。
-
final方法:final关键字修饰的方法不可以被重写。
-
final变量:final关键字修饰的变量,一旦获得了初始值,就不可以被修改。
final修饰的变量初始化
变量分为成员变量、局部变量。
final修饰成员变量:
-
类变量:可以在声明变量时指定初始值,也可以在静态初始化块中指定初始值;
-
实例变量:可以在声明变量时指定初始值,也可以在初始化块或构造方法中指定初始值;
final修饰局部变量:
- 可以在声明变量时指定初始值,也可以在后面的代码中指定初始值。
注意:被 final 修饰的任何形式的变量,一旦获得了初始值,就不可以被修改!
以上是关于java中的static关键字几个注意点的主要内容,如果未能解决你的问题,请参考以下文章