7. Static详解
Static顾名思义静态的意思,作为一个修饰词,可以修饰方法、修饰属性,可以定义类变量。
注意:非静态方法可以调用静态方法,但静态方法不可以调取非静态方法,这是因为渲染时间不同,静态方法先于非静态方法。
静态代码块:
public class Person{
{
System.out.println("匿名代码块");
}
static{
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args){
Person person = new Person();
}
}
我们会发现,执行顺序是静态代码块—匿名代码块—构造方法,其中静态代码块只会在new第一个对象时执行。一般匿名代码块可以用来初始化。
和静态很相似的一个注意点:
static修饰import时可以静态导入包:
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Test {
public static void main(String[] args) {
System.out.println(random());
System.out.println(PI);
}
}
此时可以直接调用包内的方法,不需要加前缀Math.random()
提到了Math包,有一点也有点静态的意思,在Math包中,有一个fina修饰词,被它修饰过的类不能被继承,又称”太监类“。
8. 抽象类
由abstract修饰的类称为抽象类,其作用类似于接口,但仍然有局限性。
public abstract class Action {
public abstract void doSomething();
}
public class A extends Action{
@Override
public void doSomething(){
System.out.println("hahaah");
}
}
注意几点:
- 抽象类不能使用new关键字调用抽象类。
- 抽象类的抽象方法也需要用abstract关键字修饰。
- 抽象类的方法只能有子类重写来使用。
- 抽象类中也能有非抽象方法,但也只能被继承后使用。