static 关键字
主要用途:
一.static关键字的用途:static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途
这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:
方便在没有创建对象的情况下来进行调用(方法/变量)
static 方法
当static 修饰成员方法时,该方法称为类方法或静态方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。
static关键字描述
- static关键字可以用于修饰类的成员变量、方法和代码块。
- static修饰的变量称为静态变量。
- static修饰的方法称为静态方法。
- static修饰的初始化代码块,称为静态初始化块。
- static修饰类,静态内部类
静态变量
用static修饰的变量叫做静态变量(类变量)
静态变量的特征:类的所有对象共享同一个静态变量。
静态变量不属于任何对象直属于类
非静态变量 与静态的区分
概念
跟对象有关,对象创建时才会在内存中出现,而静态变量被类名调用,在类创建后就出现所以和类相关。
存储位置
普通成员变量 内存存储在堆内存当中。
静态变量存出在堆内存 方法区中的静态区中。
内存周期
静态变量早于对象创建之前存在。
因为静态属于类,随着类而改变
非静态属于对象,随着对象而改变
访问方式
非静态变量只能用对象名访问
静态变量既可以对象,也可以类名访问
静态方法
静态只能访问静态,但是非静态能访问静态
静态方法可以被类名直接调用,(主要用这种调用方法)
非静态方法不能通过类名直接调用成员方法
在API中Math类有许多的静态方法
静态初始化代码块
初始化代码块的执行时机是什么时候?
初始化代码块优于构造方法之前运行
比如说创建了8个对象,会运行多少次?
初始化代码块每创建一个对象就会运行一次
静态代码块在类中加载只会运行一次
静态代码块只会执行一次,若和初始化代码块同时出现,谁先执行谁后执行?
静态代码块先执行,因为静态代码块属于类,类加载会执行,普通成员代码块属于对象,对象创建才会执行
//初始化代码块
{
System.out println("初始化代码块执行了")
}
//静态初始化代码块
static{
System.out println("静态初始化代码块执行了")
}
无参构造和初始化代码块的功能?
无参构造和初始化代码块都是对数据初始化。
同时存在,初始化代码块先执行,解决数据陈杂问题。