一. 概念:
static是静态修饰符,一般用于修饰类中的成员变量或者成员方法(也可修饰代码块,称之为静态代码块,后面会提到的),被修饰的成员属于类(注意:不是再是属于某个对象的。也就是说既然属于类,就可以不靠创建对象来调用了 ),可以通过类名直接访问类中的static修饰的成员变量或者static修饰的成员方法,static修饰的静态成员变量和静态成员方法被所在类的所有实例对象所共有
二. 应用:
1. static修饰成员变量:
格式 :
static 数据类型 变量名;
例如 : static String name;
注意 :
多个对象在访问static修饰的成员变量时,其中的一个对象将static成员变量值进行了修改,其他对象中的static成员变量值也随之改变,即多个对象共享同一个static成员变量
2. static修饰成员方法:
格式 :
修饰符 static 返回值类型 方法名(参数列表){
执行语句;
return 返回值;
}
例如 :
public static void println( ){
System.out.println(" 你好");
}
3. 代码演示 :
创建student实体类,代码如下:
public class Student {
String name;
int age;
String sex;
static String classID; //静态成员变量
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", classID='" + classID + '\'' +
'}';
}
//static 修饰方法 称之为静态方法
public static void study(){
System.out.println("好好学习");
}
}
创建测试类,代码如下 :
public class SudentTest01 {
public static void main(String[] args) {
Student s1 = new Student();
s1.name="张三";
s1.age=18;
s1.sex="男";
s1.classID="java-02";
System.out.println(s1);
s1.study(); //创建对象调用
new Student().study(); //匿名对象调用
Student.study(); //类名直接调用 原因是静态修饰符static修饰的成员变量和成员方法归类所有
Student s2 = new Student();
s2.name="李四";
s2.age=19;
s2.sex="男";
// s2.classID="java-03";
System.out.println("=================================");
System.out.println(s2);
Student s3 = new Student();
s3.name="丫丫";
s3.age=20;
s3.sex="女";
// s3.classID="java-04";
System.out.println("==================================");
System.out.println(s3);
}
}
执行结果:
三. 非静态方法与非静态变量,静态变量之间的调用;静态方法与非静态变量,静态变量之间的调用;非静态方法与非静态方法,静态方法之间的调用;静态方法与非静态方法,静态方法之间的调用
代码如下
图1 :
图2 :
注释掉图1和图2中的报错代码,运行结果如下图 :
以上代码相关总结 :
1. 非静态成员方法可以访问非静态成员变量和静态成员变量,可以调用非静态成员方法和静态成员方法
2. 静态只能访问静态:静态成员方法只能访问静态成员变量,调用静态成员方法
3. 静态成员变量或者静态成员方法可以通过类名直接调用
例如:
类名 . 静态成员变量
类名 . 静态成员方法
四. static原理图解:
五. 注意:
1. main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中
2. 接口中的每个成员变量都默认使用public static final修饰。所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。
例如: