1.静态变量
2.静态方法
3.静态块
(1).为什么用静态变量
一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立,然而在某些时候,我们更希望该类所有的对象共享同一个成员的时候,就需要static来修饰了
是被整个类所拥有.
public class Car {
//car的颜色用static修饰
static String carColor="red";
public static void main(String[] args) {
//1.直接用类名调用/不用创建对象
System.out.println("直接用类名调用carColor="+Car.carColor);
//2.通过类对象调用
Car bcar=new Car();
System.out.println("通过类对象调用carColor="+bcar.carColor);
//3.修改
bcar.carColor="yellow";
System.out.println("通过类对象修改后的carColor="+bcar.carColor);
System.out.println("通过修改后的carColor后类名调取该变量="+Car.carColor);
}
}
打印结果:
直接用类名调用carColor=red
通过类对象调用carColor=red
通过类对象修改后的carColor=yellow
通过修改后的carColor后类名调取该变量=yellow
(2)静态方法:
1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员,如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量.
public class Car {
//car的颜色用static修饰
static String carColor="red";
String carSize="A";
public static void main(String[] args) {
//1.通过类对象调用
Car bcar=new Car();
System.out.println("通过类对象调用的非静态属性carSize="+bcar.carSize);
}
}
打印结果:
通过类对象调用的非静态属性carSize=A
2. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法.
public class Car {
//car的非静态方法
public void run(){
System.out.println("速度70迈");
}
public static void fly(){
System.out.println("会飞的车");
}
public static void main(String[] args) {
//1.通过类对象调用非静态方法
Car bcar=new Car();
bcar.run();
//2.可直接调用
fly();
}
}
打印结果:
速度70迈
会飞的车
练习:
public class Car {
// 定义静态变量score1
static int score1 = 86;
// 定义静态变量score2
static int score2 = 92;
// 定义静态方法sum,计算成绩总分,并返回总分
public static int sum() {
return score1+score2;
}
public static void main(String[] args) {
// 调用静态方法sum并接收返回值
int allScore = Car.sum();
System.out.println("总分:" + allScore);
}
}
打印结果:
总分:178
3.静态块: 静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量 。public class Car {
int number;
int number2;
// 定义静态变量number3
static int number3;
// 构造方法
public Car() {
number=88;
System.out.println("number1:" + number);
}
{
number2=99;
System.out.println("代码块的number2:" + number2);
}
static{
number3=100;
System.out.println("静态代码块的number3:" + number3);
}
public static void main(String[] args) {
//用类对象调用
Car car=new Car();
System.out.println("number:" + car.number);
System.out.println("number2:" + car.number2);
System.out.println("number3:" + car.number3);
}
}
打印结果:
静态代码块的number3:100
代码块的number2:99
构造方法number1:88
number:88
number2:99
number3:100
细心的会发现他们的执行顺序:静态方法->代码块-构造方法