Java static关键字
1.被static修饰的属性(静态属性):
public class Student{ private static int age; //static修饰的属性(静态属性) private double score; //没被static修饰(非静态属性) public static void main(String[] args) { //静态属性是可以直接 类名 . 的形式拿到 属性 System.out.println(Student.age); //Student.score 这样是不行的非静态属性是不可以用类名 . 的形式调用的 Student s = new Student(); //非静态的属性需要对象 . 的形式拿到属性 System.out.println(s.score); } }
需要注意的是 Java中的static关键字不会影响到变量的变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected这几个关键字。
private 在当前类中可访问
default 在当前包内和访问
protected 在当前类和它派生的类中可访问
public 公众的访问权限,谁都能访问
这里之所以是private也能用Student.age(类名 . 的方式拿到)是因为 在同一个类里。
比如下面这个就是错的:
由于private只在当前类中可以访问 所以这里即使是static修饰的静态属性也是获取不到的。
2.被static修饰的方法(静态方法):
public class Student{ //定义一个静态方法 static void text(){ } //定义一个普通方法 void demo(){ } public static void main(String[] args) { //静态方法是可以用类名 . 的形式调用的 Student.text(); //非静态方法是不能用类名 . 的形式调用的 必须先创建对象 然后才能调用 Student student = new Student(); student.demo(); } }
3.被static修饰的代码块儿(静态代码块儿):
静态代码块是用来初始化数据的:
public class Student{ //这是匿名代码块 { System.out.println("匿名代码快"); //匿名代码块 new一个对象时就加载 } //这是静态代码块 静态代码块只执行一次 static { System.out.println("静态代码块"); //静态代码块随类的加载而加载 所以最先执行 } //重写构造器 public Student(){ System.out.println("我是构造器"); //构造器 也是new一个对象时加载 但是他是在匿名代码块加载之后在加载 } public static void main(String[] args) { Student student = new Student(); System.out.println("*****************"); //再次创建对象时 静态代码块就不会执行了 Student student1 = new Student(); } }
执行结果: