静态变量
静态变量是类中的一种特殊变量,他在运行是可以说是从属于类,也就是说由该类定义生成的所有对象共用同一个静态变量,内存中只有一个版本。这对于要求在程序运行过程中,只有一个对象副本存于内存非常重要,如在实现单例模式时,为了实现只有一个类对象存于内存中,我们把内对象定义为一个静态变量;为了确保这个执行过程中,只有一个Connection对象村与内存中,我们把Connection定义为类静态变量。
静态代码块
静态代码块是以变量static表示的一段代码块,他是在第一次创建该类对象或第一次调用该类静态方法时执行,整个程序运行过程中最多执行一次。
静态方法
静态方法跟静态变量有点类似,也可以说是从属于类的方法,不用定义类实例对象就可以通过类名调用该方法。因此,我们也很容易知道,静态方法只能操作类的静态成员(包括静态变量和静态方法)或者其自己定义的内部成员。
非静态变量
非静态变量是属于特定类实例对象的,每个对象都有一个自己的副本。区别于静态变量的所有对象共用一个副本
非静态方法
非静态方法也可以说是属于对象的,只有类定义的对象才可以调用它,非静态方法可以操作静态变量,非静态变量及静态方法。
总结:
1. 调用类构造函数创建对象执行顺序:父类静态代码块-》子类静态代码块-》父类构造函数-》子类构造函数
2. 静态代码块在整个程序执行过程中最多执行一次。如果按一般情况需要执行的静态代码块,但是它已经执行了,就不用在执行,具体参考结果2和结果3.
静态代码块:即在类中的标有static修饰符的代码块,如:
Java代码
static{
//代码
}
与一般代码块的异同:
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行。静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。非静态代码块可在普通方法中定义;而静态代码块不行。
与静态方法的却别:
静态代码块在第一次初始化的时候被执行,静态方法在类加载的时候被加载,且必须需要主动调用才会执行。
执行顺序相关:
1、单个类的初始化顺序如下:为静态属性分配内存并赋值->执行静态代码块->为非静态属性分配内存并赋值->执行非静态代码块->构造函数。
2、有继承关系的类的初始化顺序如下:父静属->父静块->子静属->子静块->父非静属->父非静块->父构造->子非静属->子非静块->子构造。
===
静态代码块(static block ),不包含在任何方法体中当类被载入时,自动执行静态代码块,且只被执行一次经常用于类属性的初始化。
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。
对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
static的一些使用注意事项:
1、静态方法只能调用同类中的其他静态成员(静态方法或是静态变量)。
2、静态方法不能使用this和super。因为静态方法不属于任何实例。
3、静态变量属于整个类,在类的方法中不能定义静态方法。
分享到:
相关推荐
可以使用`PropertyChangedEventManager`监听静态变量的变化,然后手动调用`OnPropertyChanged`方法(如果你的静态变量是依赖属性): ```csharp static StaticDataSource() { PropertyChangedEventManager....
这展示了如何在没有对象的情况下使用静态变量调用非静态方法,尽管这通常不是最佳实践,因为它可能引起混淆并隐藏对象实例的依赖关系。 总结起来,Java 中的静态变量与非静态变量之间的主要区别在于它们的生命周期...
正确的做法是使用一个非静态的方法,并在这个方法中通过`@Value`注解来接收配置文件中的值,然后将这个值赋给静态变量。这样可以确保Spring能够在Bean的生命周期内正确处理`@Value`注解,同时还能保持静态变量的功能...
Java 中的静态变量、静态方法、静态块和静态类 Java 中的静态变量、静态方法、静态块和静态类是 Java 编程语言的四个重要概念,它们之间存在着紧密的关系。下面将对这四个概念进行详细的介绍。 一、静态变量...
python局部变量全局变量-静态方法-实例变量静态变量代码解析。
而非静态代码则在类的使用阶段(也是实例化一个类的时候)才会被初始化。 静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。 静态变量有两种情况: ● 静态...
标题中的“WPF绑定静态变量的示例代码(二)加上IValueConverter”指出了一个具体的编程任务:在WPF应用中,我们需要将静态变量与UI元素绑定,并且利用IValueConverter来处理数据转换,以便于控件能够正确地反映出...
静态变量和非静态变量的区别
// 不需要实例化类就能访问静态变量和方法 Console.WriteLine(MyClass.StaticVar); // 输出10 MyClass.ModifyStaticVar(); Console.WriteLine(MyClass.StaticVar); // 输出11 ``` 在实际编程中,正确选择变量的访问...
在Java编程语言中,静态变量、静态方法、静态代码块以及非静态变量和非静态方法是核心概念,它们对于理解和编写Java程序至关重要。下面将详细解释这些概念,并通过实例程序来阐述它们的使用和内存管理。 首先,静态...
在VB(Visual Basic)编程语言中,静态变量是一种...理解并熟练使用静态变量可以提升代码的效率和灵活性,特别是在需要跟踪状态或进行累计计算的时候。通过合理的应用,静态变量可以显著提高VB程序的功能性和可维护性。
本文将详细介绍静态变量与非静态变量的区别、静态变量的使用方式、静态构造函数的使用等方面的知识点。 一、静态变量与非静态变量的区别 静态变量和非静态变量是 C# 语言中两种不同的变量类型。静态变量是在应用...
用c++的类实现,对于c++初学者帮助较大,主要熟悉静态变量 静态方法的使用 将练习与数据结构相结合
以下是关于Java成员变量、局部变量、静态变量以及成员方法和全局方法的基本概念和区别的详细阐述。 1. 成员变量(Member Variables): 成员变量是类的一部分,它们定义了对象的状态。它们可以是实例变量(非静态...
本文将详细介绍静态变量和非静态变量在获取配置文件中变量值的区别,并通过实例代码展示如何正确地使用静态变量和非静态变量。 首先,让我们看一下非静态变量的使用。在 Controller 文件中,我们可以使用 `@Value` ...
总的来说,Static静态变量是VB6.0编程中一个强大的工具,合理利用可以解决许多实际问题,但同时也需要谨慎处理,以确保代码的健壮性和效率。在实际编程中,我们需要根据具体需求权衡是否使用Static变量,以及如何...
现在我们来看一个简单的静态变量初始化的例子: ```易语言 .过程 名为 函数 .静态 整数 计数器 计数器 += 1 输出 ( "当前调用次数: " + 计数器 的 文本化 ) .结束过程 函数() 函数() 函数() ``` 在这个例子中...
总结,利用静态变量对函数访问次数计数是一种简单而有效的方法,尤其适用于简单的计数需求。但在多线程和内存管理方面,需要额外的注意和处理。通过理解和巧妙运用静态变量,我们可以实现各种实用的功能,同时提高...
5. 静态方法和静态方法中的静态变量 静态方法是一种属于类而非类的实例的方法。静态方法内部可以访问静态属性,也可以声明静态变量。 6. 静态构造器 PHP语言本身没有提供静态构造器的概念,但是可以借助函数来初始...