关键字instanceof、final、static的特点总结

一、关键字instanceof

判断一个对象是不是属于某一个类型,返回值为boolean
1、即子类的对象属于父类的类型,但父类的对象不属于子类的类型。

public class Animal {
private final int AGE;
	public Animal() {
		AGE = 1;
	}
	public void eat() {
		System.out.println("吃肉");
	}

}

class Cat extends Animal {
	@Override
	public void eat() {
		System.out.println("吃鱼");
	}
}

class Dog extends Animal{
@Override
	public void eat() {
		System.out.println("吃骨头");
	}
}

public class Test {

	public static void main(String[] args) {
        Animal a = new Animal();
		// a动物属于猫类型
		boolean b = a instanceof Cat;
		System.out.println("b=" + b);//b=false

		Cat c = new Cat();
		// c猫动物属于动物类型
		boolean b2 = c instanceof Animal;
		System.out.println("b2=" + b2);//b2=true
		}
		}

2、父类的引用可以指向子类的对象,但子类的引用不能指向父类的对象,也不能指向继承为同一个父类的对象

	public static void main(String[] args) {
            Animal a = new Cat();//true
             Cat c=new Animal();//false
             Cat c1=new Dog();//false
		}

3、相互指向的对象,也就属于同一个类型。

public static void main(String[] args) {
            Animal a = new Cat();
        boolean b=a instanceof Animal;//true
        boolean b1=a instanceof Cat;//true
		}

4、相互转换的对象,也就属于同一个类型。
注意:要是属于一个类型的才能强转
转换分为:向上转换(又叫泛化)和向下转换

public static void main(String[] args) {
		Cat c = new Cat();
		// 隐式转换,又叫泛化,向上转型
		Animal a = c;
		boolean a1 = c instanceof Cat;
		boolean a2 = c instanceof Animal;
		boolean a3 = a instanceof Cat;
		boolean a4 = a instanceof Animal;
		System.out.println("泛化");
		System.out.println(a1 + " " + a2 + " " + a3 + " " + a4);//true true true true

       //向下转型
		Animal animal = new Animal();
		animal = new Cat();//向下转型需注意的是:首先需要指向该类型,不然会发出异常
		boolean b = animal instanceof Cat;
		System.out.println(b);
		
		System.out.println("向下转型");
		boolean cc = animal instanceof Cat;
		boolean ccc = animal instanceof Animal;
		System.out.println(cc + " " + ccc);
		
	}
	}

5、继承为同一个对象的两个不同的子类,不能相互转换,也不能相互指向 (参考第二条)

二、关键字final

1.final修饰的变量,叫常量
命名习惯,全部大写,单词切换用下划线
常量需要初始化,而且值不可更改
例:final int NUM=4;

2.final修饰的方法不能被override
override作用:否定父类的,使用自己的

3.final修饰的类不能被继承
final修饰的类中的功能,只能自己来用
例如:String

三、static

1、概念:static修饰的属性和方法被该类的所有对象共享(仅此一份)
2、使用:使用类名直接调用
static修饰的代码中不包含this和super
非静态的可以直接调用静态的,反之不行
静态的可以直接调用静态的
3、普通的属性在对象创建才加载内存
静态的属性在类加载就立即加载内存
4、非静态修饰的依赖对象,所以,普通方法看着是对象方法,普通属性属于某个具体对象
static修饰的依赖于类,所以,静态的方法和属性使用类名直接调用

static修饰代码块
类加载的时候,只执行一次
优先级高于代码块
作用:类加载的时候,给类初始化
代码块
每new一次执行一次
作用:给类所有对象初始化
优先级高于构造方法
构造方法
每new一次执行一次
作用:给对象初始化
优先级高于普通方法

例:
class ClassA{ 
static { 
        System.out.println("In ClassA Static"); 
} 
public ClassA(){ 
   		System.out.println("ClassA()"); 
} 
} 

class ClassB{ 
static { 
		System.out.println("In ClassB Static"); 
} 
public ClassB(){ 
		System.out.println("ClassB()"); 
} 
} 

class ClassC extends ClassB{ 
static{ 
		System.out.println("In ClassC Static"); 
} 
public ClassC(){ 
		System.out.println("ClassC()"); 
} 
} 

class MyClass { 
		static ClassA ca = new ClassA(); 
		ClassC cc = new ClassC(); 
static{ 
		System.out.println("In Static MyClass"); 
} 
public MyClass(){ 
		System.out.println("MyClass()"); 
} 
} 

public class TestMain{ 
		public static void main(String args[]){ 
						MyClass mc1 = new MyClass(); 
						MyClass mc2 = new MyClass(); 
						System.out.println(mc1.cc == mc2.cc); 
						System.out.println(mc1.ca == mc2.ca); 
} 
}
结果:In ClassA Static
			ClassA()
			In Static MyClass
			In ClassB Static
			In ClassC Static
			ClassB()
			ClassC()
			MyClass()
			ClassB()
			ClassC()
			MyClass()
			true
			false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java关键字: abstract、assert、boolean、break、byte、case、catch、char、class、const、continue、default、do、double、else、enum、extends、finalfinally、float、for、goto、if、implements、import、instanceof、int、interface、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while Java标识符: 标识符是Java程序中指定名称的组件,如变量名、方法名、类名等。标识符必须以字母、下划线或美元符号开头,不能以数字开头,只能包含字母、数字、下划线或美元符号。 Java变量: Java变量是存储数据的容器,可以存储不同类型的数据,如int、double、String等。变量需要先声明,再进行赋值操作。Java中的变量可以被分类为:局部变量、成员变量和静态变量。 Java运算符: Java运算符包括算术运算符、比较运算符、逻辑运算符、条件运算符、位运算符等。算术运算符包括加(+)、减(-)、乘(*)、除(/)、取余(%)等;比较运算符包括大于(>)、小于(<)、等于(==)、不等于(!=)、大于等于(>=)、小于等于(<=)等;逻辑运算符包括与(&&)、或(||)、非(!)等;条件运算符包括目运算符(?:)等;位运算符包括按位与(&)、按位或(|)、按位异或(^)等。 Java流程控制: Java流程控制指的是在程序中控制程序执行的顺序和次数。Java流程控制包括分支语句和循环语句。分支语句包括if语句、switch语句等;循环语句包括for循环、while循环、do-while循环等。还有特殊的流程控制语句,如break语句、continue语句等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值