`

static修饰符分析

阅读更多

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等存储类修饰符的区别.

    通过以上分析,我们可以看出`auto`、`register`、`static`和`extern`这些存储类修饰符在C语言中扮演着重要角色,它们不仅控制着变量的生存周期,还决定了变量的可见性和访问范围。合理地使用这些修饰符可以提升代码...

    java常用修饰符.doc

    3. **静态修饰符(static)**:static修饰符用于声明静态成员(类变量和静态方法),它们属于类本身,而不是类的实例。这意味着可以在没有类实例的情况下访问静态成员。 4. **本地修饰符(native)**:native用于...

    基本修饰符

    ### 基本修饰符详解 #### 一、访问修饰符的作用域 访问修饰符用于控制类、方法、属性等成员的...通过以上分析,我们可以看到这些基本修饰符在.NET编程中的重要作用,合理使用它们可以显著提高代码的质量和可维护性。

    C/C++中static,const,inline三种关键字详细总结

    一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...

    SCJP java基础修饰符

    这些修饰符的应用范围和功能各不相同,下面将逐一分析。 ### 2. 修饰符的应用对象 - **`public`**:可以用于类、属性、方法和构造器,表示公开的,任何地方都可以访问。 - **`protected`**:仅用于属性、方法和...

    java修饰符的使用[整理].pdf

    - **static**:静态修饰符,常用于修饰类变量和类方法,这些成员不属于类的实例,而是直接属于类。静态内部类(静态嵌套类)可以在没有外部类实例的情况下创建,但使用相对较少。 - **abstract 和 final 同时修饰类*...

    Java主要修饰符的使用.doc

    Java修饰符是编程中至关重要的概念,它们用于指定类、接口、变量和方法的访问权限以及行为特性。本文主要探讨Java中的主要修饰符及其用法。 1. **类的访问修饰符** - `public`:公共访问修饰符,允许任何类访问。...

    浅析php变量修饰符static的使用

    本篇分析将详细探讨static修饰符的使用方法、特点以及相关的注意事项。 首先,静态变量常用于函数内部,目的是保存函数调用之间的状态信息。普通的局部变量在函数执行完毕后就会被销毁,每次调用函数时,该变量都会...

    C#语法糖系列 —— 第二篇:聊聊 ref,in 修饰符底层玩法.doc

    通过以上分析可以看出,`ref`与`in`修饰符为C#提供了更多灵活的数据操作方式。尤其是在处理大型数据结构或者需要高性能场景时,合理利用这些特性可以显著提升程序的效率。然而,这也意味着开发者需要更加谨慎地管理...

    Java软件开发实战 Java基础与案例开发详解 6-4 访问修饰符 共5页.pdf

    6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与...

    要static还是不要static?

    在编程世界中,"static" 是一个非常关键的修饰符,它在 Java 语言中扮演着重要的角色。本文将深入探讨 "static" 关键字的含义、用途以及何时选择使用或不使用它。我们将通过分析《要 static 还是不要 static?》这篇...

    java中static属性学习

    [访问权限修饰符] static [返回值类型] 方法名([参数列表]) { // 权限很重要 语句序列 } ``` 例如,`main`方法就是一个典型的静态方法,它是程序的入口点。 ```java public static void main(String[] args) { ...

    static实例

    在编程语言中,`static` 是一个非常关键的修饰符,尤其在面向对象的编程中,如 C++、Java 和 C# 等。`static` 关键字用于定义类的静态成员,包括静态数据成员(变量)和静态成员函数(方法)。下面我们将详细讨论这...

    Java语言中变量和方法的分析及其应用.pdf

    类变量是定义在类内或接口内、方法外且用static修饰符修饰的变量。类变量又称为静态变量,是类的变量,不属于任何对象。 方法在Java语言中也分为两种:类方法(静态方法)和实例方法。类方法是使用static修饰符修饰...

    JAVA第三章的课后习题答案

    封装是面向对象的核心特性之一,通过访问控制修饰符(public, private, protected)实现数据隐藏,保护对象的内部状态不被外部随意修改。 继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法,...

    补充4:static练习讲解及隐藏和封装.rar

    在Java中,我们通过设置访问修饰符(如`private`、`protected`、`public`)来实现封装。例如,将字段设为`private`,然后提供公共的getter和setter方法来访问和修改这些字段,可以确保数据的安全性。 隐藏通常指的...

    开发团队调度系统

    3. **static和final修饰符**:在团队调度系统中,static修饰符用于创建类级别的变量和方法,这些是所有实例共享的。例如,静态变量可以用来保存团队的总人数,静态方法可以实现不依赖于特定对象的通用功能,如计算...

    Android逆向之smali学习笔记

    .field 权限修饰符 +静态修饰符(如果有) +变量名:变量全类名路径 = 常量值; 例如: .field private static final a:Ljava/lang/String;="hello"; 8. 方法声明 Smali语言中的方法声明使用“.method”关键字,例如...

    第9章作业提交1

    2. **静态(static)**修饰符:使用`static`修饰的类成员属于类本身,而不是类的任何实例。这意味着它们可以直接通过类名来访问,无需创建对象。例如,静态变量和静态方法可以被所有类的实例共享,而不依赖于特定的...

Global site tag (gtag.js) - Google Analytics