static关键字详解
六、static关键字详解
静态与非静态的区别
static是一个修饰符,修饰方法叫做静态方法,修饰属性叫做静态属性。
private static int age; //静态变量 with "static" 和所有类共享 多线程
private double score; //非静态变量 without "static"
public static void main(String[] args) {
Student s1 = new Student();
System.out.println(Student.age);// 类变量,直接调用
System.out.println(Student.score);//不可以使用score,因为类中他是非静态变量
System.out.println(s1.age);
System.out.println(s1.score);
}
静态方法可以调用静态方法,但是不可以调用非静态方法
非静态方法可以直接访问这个类中的静态方法
public void run(){ //非静态方法
go(); //非静态方法可以直接访问这个类中的静态方法
}
public static void go(){ //静态方法
}
public static void main(String[] args) {
go(); //静态方法可以调用静态方法,但是不可以调用非静态方法
}
代码块
- 直接一对{}叫做匿名代码块
- static {} 叫做静态代码块,第一个和永久被执行
package oop.Demo07;
public class Person {
{
// 匿名代码块
// 因为没有名字,程序员并不能主动去调用这个代码块
}
static{
//静态代码块,可在里面加载初始化的数据
}
}
package oop.Demo07;
public class Person {
{
System.out.println("匿名代码块");//可以在匿名代码块赋值初始值
}
static {
System.out.println("静态代码块"); //只执行一次
}
public Person() {
System.out.println("构造器/构造方法");
}
public static void main(String[] args) {
Person person1 = new Person();
System.out.println("==============");
Person person2 = new Person();
}
/*第一次输出:
静态代码块
匿名代码块
构造器/构造方法
*/
/*
第二次输出 有了person2
静态代码块
匿名代码块
构造器/构造方法
==============
匿名代码块
构造器/构造方法
*/
}
补充知识-导入类
package oop.Demo07;
//import java.lang.Math;直接导入Math这个类, 也可以导入具体的方法
import static java.lang.Math.random;
//导入之后,不用写成Math.random(),可以直接写成random(),省略Math
public class Test {
public static void main(String[] args) {
System.out.println(random());
}
}

浙公网安备 33010602011771号