static关键字:修饰符
功能:
它可以修饰变量,修饰方法,修饰代码块,修饰内部类
目录
static关键字:修饰符
功能:
1.static修饰变量:静态变量
2.static修饰方法:静态方法
3.static修饰构造代码块:静态构造代码块
4.总结
1.static修饰变量:静态变量
由static修饰的变量叫做静态变量,又可以称之为类变量,它与类同级;静态变量会随着类的加载而被加载到方法区的静态区,同时,系统会默认给静态变量赋予系统默认的初始值(不同的数据类型对应着不同的初始值),静态变量通过 类名. 对象. 的方式来调用。
当然,在方法里静态变量是不能够被定义的,无论是在构造方法里还是在普通方法里。
类产生的对象可以共享一个静态变量;如若一个变量想要被所有的对象来获取,就可以将其设置成为静态变量。
话不对说,上代码!!!
/*
static修饰变量:静态变量小案例
*/
public class StaticDemo1 {
public static void main(String[] args) {
//创建Person类的对象
Person p=new Person();
//通过 对象.的方式来调用静态变量
p.gender='女';
//创建Person类的对象
Person p1=new Person();
//通过 对象.的方式来调用静态变量
p1.gender='男';
//输出
System.out.println(p.gender);
System.out.println(p1.gender);
}
}
//定义代表人的类
class Person{
//定义静态变量
static char gender;
}
代码执行结果:
2.static修饰方法:静态方法
由static修饰的方法叫做静态方法,又可以称之为类方法,与类同级,静态方法会随着类的加载而被加载到方法区的静态区,系统不会赋予其初值,而是在被调用时会被加载到栈中去执行,静态方法也是通过 类名. 对象. 的方式来调用的。
静态方法支持方法的重载,但不支持方法的重写,因为重写针对的是对象,而静态方法是与类同级的,两者级别不一样,所以不支持重写;继承里的父子类中要么出现方法签名一致的都是非静态方法(重写),要么都是静态方法(没有重写)。
静态方法可以直接使用静态信息但不能直接使用非静态信息,非静态方法可以直接使用非静态信息以及静态信息;
话不多说,上代码!!!
/*
static修饰静态方法:静态方法小案例
*/
public class StaticDemo2 {
//静态变量
static int i =1;
//非静态变量
int j=2;
//静态方法
//静态方法可以直接使用静态信息,不能直接使用非静态信息
public static void m(){
System.out.println(i);
//静态方法直接使用非静态信息会报错
System.out.println(j);
}
//非静态方法
//非静态方法可以直接使用非静态信息以及静态信息
public void m1(){
System.out.println(i);
System.out.println(j);
}
}
3.static修饰构造代码块:静态构造代码块
由static修饰的构造代码块叫做静态构造代码块,它会随着类的加载而加载,而且只被加载一次,静态构造代码块有以下几个功能:
1.初始化静态变量
2.预先加载资源
所有由static修饰的静态信息都会随着类的加载而加载,但都只会被加载一次。
话不多说,上代码!!!
/*
static修饰构造代码块:静态构造代码块小案例!
*/
public class StaticDemo4 {
public static void main(String[] args) {
//匿名对象
new SDemo2();
new SDemo2();
}
}
//static 只能修饰构造代码块
class SDemo2{
//定义静态变量
static int i;
//静态代码块
//给静态变量进行初始化
//预先加载资源
//静态代码块随着类的加载而加载,但是类只加载一次
static {
i=1;
System.out.println("构造代码块");
}
public SDemo2(){
System.out.println("静态代码块");
}
}
代码运行结果:(静态代码块预先加载资源,所以先执行)
4.总结
为了能够让大家更直观的去感受和了解静态变量和静态方法的一些特性,本人特此附表一张,供君阅览!
static | 静态变量 | 静态方法 |
别名 | 类变量 | 类方法 |
级别 | 与类同级 | 与类同级 |
加载 | 随着类的加载而被加载到方法区的静态区域 | 随着类的加载而被加载到方法区的静态区域 |
初值 | 赋予系统默认初始值 | 不赋予系统默认初始值,被调用时会被加载到栈中执行 |
调用 | 1.类名. 2.对象. | 1.类名. 2.对象. |
| 类产生的对象可共享同一个静态变量 | 支持重载 |
| 方法(普通方法和构造方法)里不能定义静态变量 | 不支持重写(重写针对的是对象) |
|
| 直接使用静态信息 |
|
| 直接使用非静态以及静态 |