static 修饰符可以修饰 方法、成员变量、初始化块和成员内部类。
1.static 方法
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且
可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法
的主要用途。”--《Java编程思想》
2.static 成员变量
3.static 初始化块
初始化块的修饰符只能是static,使用static修饰的初始化块称为静态初始化块(也称为类初始化块)
。静态初始化块是类相关的,系统在类初始化阶段执行静态初始化块,而不是在创建对象是才执行,
因此静态初始化块总比普通初始化块先执行。一个类里可以定义多个初始化块,执行顺序与定义顺序
相同。
静态初始化块也属于类的静态成员,同样也遵循静态成员不能访问非静态成员(包括Field 和method
)的规则。
系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,还会一直上溯到java.lang.Object类(如果它包含静态初始化块),从父类依次向下执行。如下例所示:
class Root { static{ System.out.println("Root静态初始化块"); } { System.out.println("Root初始化块"); } public Root() { System.out.println("Root无参构造器"); } } class Mid extends Root { static{ System.out.println("Mid静态初始化块"); } { System.out.println("Mid初始化块"); } public Mid() { System.out.println("Mid无参构造器"); } public Mid(String msg) { //ͨ通过this调用同一个类中重载的构造器 this(); System.out.println("Mid带参数构造器,参数为:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf静态初始化块"); } { System.out.println("Leaf初始化块"); } public Leaf() { //ͨ调用父类中有残构造器 super("tf"); System.out.println("leaf无参构造器"); } } public class Test { public static void main(String[] args) { new Leaf(); new Leaf(); } }
output:
Root静态初始化块 Mid静态初始化块 Leaf静态初始化块 Root初始化块 Root无参构造器 Mid初始化块 Mid无参构造器 Mid带参数构造器,参数为:tf Leaf初始化块 leaf无参构造器 Root初始化块 Root无参构造器 Mid初始化块 Mid无参构造器 Mid带参数构造器,参数为:tf Leaf初始化块 leaf无参构造器
4.静态内部类
如果使用static修饰一个内部类,则这个内部类就属于外部类本身,而不是属于外部类的某个对象。静态内部类也被称为类内部类。静态内部类可以包含静态成员,也可以包含非静态成员。不能访问外部类的实例成员,只能访问外部类的类成员。即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。
相关推荐
通过以上分析,我们可以看出`auto`、`register`、`static`和`extern`这些存储类修饰符在C语言中扮演着重要角色,它们不仅控制着变量的生存周期,还决定了变量的可见性和访问范围。合理地使用这些修饰符可以提升代码...
3. **静态修饰符(static)**:static修饰符用于声明静态成员(类变量和静态方法),它们属于类本身,而不是类的实例。这意味着可以在没有类实例的情况下访问静态成员。 4. **本地修饰符(native)**:native用于...
### 基本修饰符详解 #### 一、访问修饰符的作用域 访问修饰符用于控制类、方法、属性等成员的...通过以上分析,我们可以看到这些基本修饰符在.NET编程中的重要作用,合理使用它们可以显著提高代码的质量和可维护性。
一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...
这些修饰符的应用范围和功能各不相同,下面将逐一分析。 ### 2. 修饰符的应用对象 - **`public`**:可以用于类、属性、方法和构造器,表示公开的,任何地方都可以访问。 - **`protected`**:仅用于属性、方法和...
- **static**:静态修饰符,常用于修饰类变量和类方法,这些成员不属于类的实例,而是直接属于类。静态内部类(静态嵌套类)可以在没有外部类实例的情况下创建,但使用相对较少。 - **abstract 和 final 同时修饰类*...
Java修饰符是编程中至关重要的概念,它们用于指定类、接口、变量和方法的访问权限以及行为特性。本文主要探讨Java中的主要修饰符及其用法。 1. **类的访问修饰符** - `public`:公共访问修饰符,允许任何类访问。...
本篇分析将详细探讨static修饰符的使用方法、特点以及相关的注意事项。 首先,静态变量常用于函数内部,目的是保存函数调用之间的状态信息。普通的局部变量在函数执行完毕后就会被销毁,每次调用函数时,该变量都会...
通过以上分析可以看出,`ref`与`in`修饰符为C#提供了更多灵活的数据操作方式。尤其是在处理大型数据结构或者需要高性能场景时,合理利用这些特性可以显著提升程序的效率。然而,这也意味着开发者需要更加谨慎地管理...
6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与...
在编程世界中,"static" 是一个非常关键的修饰符,它在 Java 语言中扮演着重要的角色。本文将深入探讨 "static" 关键字的含义、用途以及何时选择使用或不使用它。我们将通过分析《要 static 还是不要 static?》这篇...
[访问权限修饰符] static [返回值类型] 方法名([参数列表]) { // 权限很重要 语句序列 } ``` 例如,`main`方法就是一个典型的静态方法,它是程序的入口点。 ```java public static void main(String[] args) { ...
在编程语言中,`static` 是一个非常关键的修饰符,尤其在面向对象的编程中,如 C++、Java 和 C# 等。`static` 关键字用于定义类的静态成员,包括静态数据成员(变量)和静态成员函数(方法)。下面我们将详细讨论这...
类变量是定义在类内或接口内、方法外且用static修饰符修饰的变量。类变量又称为静态变量,是类的变量,不属于任何对象。 方法在Java语言中也分为两种:类方法(静态方法)和实例方法。类方法是使用static修饰符修饰...
封装是面向对象的核心特性之一,通过访问控制修饰符(public, private, protected)实现数据隐藏,保护对象的内部状态不被外部随意修改。 继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法,...
在Java中,我们通过设置访问修饰符(如`private`、`protected`、`public`)来实现封装。例如,将字段设为`private`,然后提供公共的getter和setter方法来访问和修改这些字段,可以确保数据的安全性。 隐藏通常指的...
3. **static和final修饰符**:在团队调度系统中,static修饰符用于创建类级别的变量和方法,这些是所有实例共享的。例如,静态变量可以用来保存团队的总人数,静态方法可以实现不依赖于特定对象的通用功能,如计算...
.field 权限修饰符 +静态修饰符(如果有) +变量名:变量全类名路径 = 常量值; 例如: .field private static final a:Ljava/lang/String;="hello"; 8. 方法声明 Smali语言中的方法声明使用“.method”关键字,例如...
2. **静态(static)**修饰符:使用`static`修饰的类成员属于类本身,而不是类的任何实例。这意味着它们可以直接通过类名来访问,无需创建对象。例如,静态变量和静态方法可以被所有类的实例共享,而不依赖于特定的...