访问 static 修饰的字段[1]
首先,了解过Java编程语言的同学应该都知道,类中的成员变量或成员方法如果想要被调用,则必须先实例化这个类(也就是用new关键字创建出一个对象)。
而如果使用 static 关键字对其进行修饰,就可以在任何时候访问而不需要创建对象,直接使用 类名.字段名 的形式访问(也就是说被 static 修饰的成员变量通过 类名.变量名 的形式访问,被 static 修饰的成员方法通过 类名.方法名 来调用)。
public class Main {
public static void main(String[] args){
System.out.println(Inner.str);//输出:output
}
}
class Inner{
static String str = "output";
}
public class Main {
public static void main(String[] args){
Inner.print();//输出:output
}
}
class Inner{
public static void print(){
System.out.println("output");
}
}
注意
使用 static 关键字同样需要注意其访问修饰符。
通过 对象.字段名 访问和通过 类名.字段名 访问效果相同。
被 static 修饰的成员变量
被 static 修饰的成员变量又叫做 静态变量 ,所有访问该变量得到的都是同一个引用[2],所以其实所有访问者得到的都是同一个对象/基本数据类型的数据。
一般 final 会配合 static 关键字使用,来声明一个常量。
被 static 修饰的成员方法
被 static 修饰的成员方法可以在 不实例化对象 的情况下通过 类名.方法名 来调用,但同时要注意,在被 static 修饰的成员方法中是无法使用 this 关键字(如果没学 this 的话就先了解一下吧)来访问非静态变量的,只能访问带有 static 的成员变量(静态变量)。
静态代码块
在类中可以用static{}的形式来定义一个代码块[3]
public class Main{
static{
//代码
}
}
这个代码块会在类主方法(就是 public static void main(String[] args))之前运行,但只能访问静态成员变量和静态成员方法。
准确的来说,静态代码块会在类被加载时运行,但这就涉及到 虚拟机 以及 类的加载 等知识,有兴趣可以在学完Java后自行查阅学习
用途
1.在需要给实例对象传递同一个对象作为参数时,可以节约构造方法的参数
以下代码为实现了所有学生对象中都存在一个老师对象,可以省去向每个学生对象构造时传入老师对象
public class Main{
public static void main (String[] args){
Student.teacher = new Teacher("王老师");
}
}
class Teacher{
String name;
public Teacher(String name){
this.name = name;
}
}
class Student{
static Teacher teacher;
}
2.共享数值
public class Main{
public static void main(String[] args){
搬砖工人 g1 = new 搬砖工人();
搬砖工人 g2 = new 搬砖工人();
搬砖工人 g3 = new 搬砖工人();
g1.搬砖();
g2.搬砖();
g3.搬砖();
g1.搬砖();
System.out.println(搬砖工人.搬砖次数);//输出4
}
}
class 搬砖工人{
static 搬砖次数 = 0;
public 搬砖(){
}
}
3.暂时知道这么多,欢迎评论区讨论其他用法😁
完
网友评论