Static关键字详解
package oop.demo10;
//static :类中使用,修饰成员变量。方法中使用,修饰成员方法,叫静态方法。加在属性中叫静态属性。
public class Student {
private static int age;//年龄 静态变量 后续多线程详解!
private double score;//分数 非静态变量
public void run(){ //非静态方法可以调用静态方法中的所有东西
go();
}
public static void go(){ //静态方法 静态方法只能调用静态方法的东西,不能调用非静态的方法
}
public static void main(String[] args){ //main方法也有static,是静态方法
Student s1 = new Student();
//静态变量
System.out.println(Student.age);//静态的变量建议直接用 类名.变量 ,不用new对象。
//System.out.println(Student.score);score红色报错,非静态字段'score'不能从静态上下文中引用。
System.out.println(new Student().score);//可以用new的对象来调用
System.out.println(s1.age);
System.out.println(s1.score);
System.out.println("-------------------");
//静态方法
//静态方法只能调用静态方法的东西,不能调用非静态的方法
new Student().run();//直接run();不行,报错,不能调用,要用new对象
Student.go();//因为启动类在同一个类中,也可以直接go();
}
}
package oop.demo10;
public class Person {
{
//代码块(匿名代码块)一般也不建议这样写
}
static {
//静态代码块(匿名代码块)
}
}
package oop.demo10;
public class Person01 {
//匿名代码块可以用来赋初始值
//第二个执行
{
System.out.println("匿名代码块");
}
//第一个执行,再输出一次就没了,只执行一次
static{
System.out.println("静态代码块");
}
//第三个执行
public Person01() { //构造器快捷键:Alt+Insert,选择Constructor
System.out.println("构造方法");
}
public static void main(String[] args) {
Person01 p1 = new Person01();
System.out.println("-----------------");
Person01 p2 = new Person01();
}
}
输出:
package oop.demo10;
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());//输出一个随机数
/*
如果不想写Math.random(),想直接写random()
import导入java.lang.Math,甚至可以导入Math底下的方法
import java.lang.Math.random;但是报错,不识别random,可以在import后面加个static
import static java.lang.Math.random; 这样就可以使用了,这就叫做静态导入包
*/
System.out.println(random());
System.out.println(PI);//输出圆周率π
}
}
/*
扩展:
被final修饰的类就不能被继承了,没有子类了,断子绝孙!
*/
输出:
- 扩展: