instanceof操作符
-x instanceofA:检验x是否为类A的对象,返回值为boolean型。
-要求x所属的类与类A必须是子类和父类的关系,否则编译错误
-如果x属于类A的子类B,x instanceofA值也为true。
-格式:对象a instanceof类A:判断对象a是否是类A的一个实例.是的话,返回true;否则返回false
-若a是A类的实例,那么a也一定是A类的父类的实例。
对象类型转换
基本数据类型的转换:
小的数据类型可以自动转换成大的数据类型
如longg=20;doubled=12.0f
可以把大的数据类型强制转换成小的数据类型
如floatef=(float)12.0inta=(int)1200L
对Java对象的强制类型转换
从子类到父类的类型转换可以自动进行
从父类到子类的类型转换必须通过强制类型转换实现
无继承关系的引用类型间的转换是非法的
在造型前可以使用instanceof操作符测试一个对象的类型
final关键字
final 关键可以用来修饰类、方法、属性
修饰类:这个类没有子类,不能被继承,但是可以实例化
修饰方法:代表这个方法不能被重写
修饰属性:代表这个属性常量,只能被显示的赋值一次,赋值后不能在被修改
赋值的位置 : ①在定义处显示初始化
②在构造器中显示初始化
在创建对象之前完成赋值
命名大写
final,finally,finalize的区别
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
static关键字
修饰属性、方法、代码块、内部类
一、static关键字修饰属性
用static修饰的属性:类变量、静态变量,随着类的加载而加载
非static修饰的属性:实例变量、非静态变量,随着对象的加载而加载
1.静态变量被类的所有变量所公用
2.类的任意对象对静态变量的修改,都会影响其对象的调用结果
3.类变量随着类的加载而加载,独一份(共用的),而且只会加载一次
4.类变量的加载是在于对象的
5.静态变量可以使用类名直接调用,也可以适用对象来调用
6.先有类,同时有静态变量,后有对象
7.静态变量存储在静态域中
8.问题?非静态变量能用类名直接调用吗? 不行
int hand;成员变量
//p1.hand 对
//Person.hand错
二、static关键字修饰方法
1.static关键字修饰方法:类方法、静态方法
2.随着类的加载而加载
3.在静态的方法中,只能调用静态变量跟静态方法,不能调用非静态的。
反之在非静态方法中可以调用任意静态或非静态的方法
4.非静态的方法可以用类名调用吗? 不能
5.在静态函数中,绝对不能出现this/super关键字
因为不需要实例就可以访问static方法,因此static方法内部不能有this
二、static关键字修饰代码块
代码块(初始化块),通常用于初始化属性值
结构{..}
只能static
非静态代码快:
1.可有输出语句
2.非静态代码块可以调用静态的属性 和方法
3.可以存在多个非静态的代码块,按顺序执行
4.每创建一个对象,非静态代码就会执行一次
初始化属性的顺序: ①默认初始化 ②显示初始化或者是非静态代码块 ③构造器里面的④方法
静态代码块
用static关键字修饰
通常用于初始化静态变量
1.可有输出语句
2.静态代码块只能调用静态的属性 和方法
3.可以存在多个静态的代码块,按顺序执行
4.随着类的加载而加载, 静态代码只会执行一次
初始化属性的顺序: ①静态代码块 ②默认初始化 ③显示初始化或者是非静态代码块 ④构造器里面的④方法
静态代码块1
静态代码块2
非静态代码块1
非静态代码块2
构造器2
非静态代码块1
非静态代码块2
构造器2