Java|关键字之instanceof & static & final
一、instanceof
- A instancesof B //意义:A是否是B的一个实例化对象,返回一个boolean值
public class Person{
}
//继承Person类
public class Student extends Person{
}
//继承Person类
public class Teacher extends Person{
}
接下来测试
//测试1
public void main(String[] args){
Object object = new Student();
System.out.println(object instancesof Object); //输出true
System.out.println(object instancesof Person); //输出true
System.out.println(object instancesof Student); //输出true
System.out.println(object instancesof Teacher); //编译错误
}
//测试2
public void main(String[] args){
Person person = new Student();
System.out.println(person instancesof Person); //输出true
System.out.println(person instancesof Student); //输出true
System.out.println(person instancesof Teacher); //输出false
}
二、static
-
随类一起加载,可以通过类调用也可以通过对象调用,甚至可以直接调用名字,而不添加类/对象的前缀。
-
匿名代码块
{
System.out.println("匿名代码块加载完成");
}
public class Person{
}
- 没有名称的代码块称为匿名代码块
- 一般可以用来进行一些初始化的赋值或是需要多次执行代码块功能等
- 匿名代码块运行完成后会从程序缓存中清除
- 静态代码块
static{
System.out.println("静态代码块加载完成");
}
- 特点:随着类一起加载,且执行一次
- 功能:仅能初始化类变量,即static修饰的数据成员
- 匿名代码块,静态代码块,构造函数的运行顺序
{
System.out.println("匿名代码块加载完成");
}
static{
System.out.println("静态代码块加载完成");
}
public class Test{
public Test {
System.out.println("构造函数加载完成")
}
}
//测试代码
public void main(String[] args){
Test t = new Test();
/*
输出结果为:
静态代码块加载完成
匿名代码块加载完成
构造函数加载完成
*/
Test t2 = new Test();
/*
输出结果为:
匿名代码块加载完成
构造函数加载完成
*/
}
- 以上,加载顺序为 静态代码块 > 匿名代码块 > 构造函数
5.静态导包
如:
//一般调用其他类的方法
import Math.*;
public void main(String[] args){
System.out.println(Math.randon());//先导包,再用类名.方法调用
}
而静态导包
import static Math.*;
public void main(String[] args){
System.out.println(randon()); //静态导包后可以直接调用
}
- final
- 修饰类
public final class Person{
}
- final 修饰的类不能再被继承(断子绝孙类)
- 修饰方法
- final修饰的方法不能再被重写,可以被继承
- 修饰变量
- 如果引用为基本数据类型,则该引用为常量,该值无法修改;
- 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
- 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。