目录
属性
public class Student {
private static int age;//静态的变量 多线程
private double score;//非静态的变量
public static void main(String[] args) {
Student s1 = new Student();
System.out.println(Student.age);//静态的变量可以被多个类共享
//System.out.println(Student.score); 报红
//不是静态的变量,不可以直接用类名去调用
System.out.println(s1.age);//对象都是可以直接这样去调用
System.out.println(s1.score);
}
}
方法
//static : 类中使用修饰成员变量 方法使用的话就是成员方法
public class Student {
//方法
public void run(){ }
public static void go(){ }
public static void main(String[] args) {
new Student().run();//非静态调用方法,需先new 一个对象再去调用;
Student.go();//静态方法,不用去new一个对象,可以直接通过类名的方法去直接调用
go();//静态方法,在当前这个类里面,可以直接调用
//run();静态方法不能直接去调用非静态方法,类一加载,非静态还没出来,所以不能调用。
}
}
静态代码块,匿名代码块,构造器的执行顺序
public class Person {
{
//代码块(匿名代码块)
//创建对象时自动创建,它在构造器之前
}
static{
//静态代码块
//和类一加载就直接执行,永久只执行一次
}
}
public class Person {
//匿名代码块第二个被执行 2 赋初始值
{
System.out.println("匿名代码块");
}
//静态代码块最先被执行 1 只执行一次
static {
System.out.println("静态代码块");
}
//构造方法最后被执行 3
public Person() {
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person1 = new Person();
/*输出的结果: 静态代码块
匿名代码块
构造方法 */
// 说明执行的顺序不同
System.out.println("=======================");
Person person2 = new Person();
/*输出的结果:
匿名代码块
构造方法 */
// 说明静态代码块只执行一次
}
}
静态导入包
//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Test {
public static void main(String[] args) {
System.out.println(Math.random());
System.out.println(random());//有了静态导入包,Math都可以省略
System.out.println(PI);
}
}
final 的特性:如果有final,就不能被继承了