乱入:表达式中的自动类型转换
char,short,byte都升级为int类型进行运算,结果为int,但其原变量类型并不改变。
所以,byte b = 10; b = b*b; 编译时会报错。但是写成 b *=b; 就没问题了。
——————————————华丽的分割线————————————————————————
//static与final
一、static
1.位于变量前
变量为静态变量,可通过(类名+点运算符)调用
2.位于方法前
方法为静态方法,可通过(类名+点运算符)调用
存储在静态区,可以被所有对象直接访问
注意:静态方法中只能调用静态方法或属性
3.位于语句块前
静态语句块在类加载时,主动运行一次
作用为在类加载时进行一些初始化的操作
ps:静态语句块是主动加载初始化,构造函数是被动加载初始化
4.位于类前
static只能在内部类前面
二、final
1.变量前
在基本数据类型前,则为常量,只能赋值一次,数据不能被改变;
在对象引用前,引用指向的对象不能改变,但是对象成员的值可以改变;
2.方法
方法不能被子类重写
3.类
不能被继承
——————————————华丽的分割线————————————————————————
//接口
1.访问控制
默认:包中可用
public:包外也可用,且必须保存在同名的文件中
2.方法
方法声明仅包含返回类型和签名(方法名和形参列表),实现接口的方法必须声明为public
(接口中的所有成员都是隐式声明为public的)
如果一个类包含一个接口,但没有完全实现接口定义的方法,那么该类必须声明为抽象的。
3.变量
隐式声明为public、final、static,且必须初始化,实际上就是常量
4.引用
接口类型的引用变量可以引用实现它的接口的任何对象,通过“接口引用”调用“对象方法”时,将会执行对象实现的那个版本的方法。(接口引用变量仅仅能够识别其接口所声明的方法)