Java static关键字的使用

来源:互联网 发布:pokemongo自动走路软件 编辑:程序博客网 时间:2024/05/18 19:43

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


细心的会发现他们的执行顺序:静态方法->代码块-构造方法