文章目录
1 final关键字
在Java中final被称为终结器,可以使用final来定义类、方法、属性。
1.1 final修饰类
当一个类被final关键字修饰表示该类不允许被继承,一旦一个类被final修饰,该类的所有方法都会默认加上final(成员变量不会加final)
工具类用final修饰比较安全,用户用到的工具方法都是一样的,不会被覆写。
1.2 final修饰方法
当一个方法被final修饰明确表示该方法不允许被覆写
当一个方法被private修饰后,相当于加了final关键字,即不可以覆写,所以方法覆写不能出现private关键字
1.3 final修饰属性—常量
1.3.1 final修饰普通数据类型的成员变量
被final修饰的成员变量必须在声明时(构造块,构造方法)初始化,并且初始化后值无法修改。
1.3.2 final修饰引用数据类型的变量
final修饰属性,无论是普通数据类型的成员变量,还是引用数据类型的变量其本质都是值不能被改变,对于引用数据类型即就是指向堆内存空间的栈内存空间的地址不变,但是堆内存空间里的内容却可以被改变。
class Person{
public String name="t";
public int age = 20;
}
public class Test{
public static void main(String[] args)
{
//final修饰属性 属性值不能被改变
//即指向Person对象的地址不能改,但是里面的内容却可以改
final Person person = new Person();
person.name="w";
person.age=10;
System.out.println(person.name);
System.out.println(person.age);
}
}
class Person{
public String name="t";
public int age = 20;
}
public class Test{
public static void main(String[] args)
{
//final修饰属性 值不能被改变
//即指向Person对象的地址不能改,但是里面的内容却可以改
final Person person = new Person();
person = new Person();
}
}
1.3.3 final与static final的区别
class Person{
public final int a = 10;
public static final int B = 10;
}
final变量–常量(值不能改变、每个对象都有自己的final变量、在对象产生时初始化)
static final - 全局常量(所有对象共享此变量,并且在类加载时初始化、效率较高,通过类名调用)
可以用静态块初始化:
class Person{
public static final int B ;
static{
B=1;
}
}
全局常量命名规范:多个单词全大写,单词间用_分开
2 数据类型转换
当使用+、-、*、/运算操作时,遵循如下规则:
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型。
如果两个操作数中有一个是float类型,另一个将会被转换成float类型,并且结果也是float类型。
如果两个操作数有一个是long类型,另一个将会被转换成long类型,并且结果也是long类型。
否则(操作数为:byte、short、int、char),两个数都会被转换成int型,并且结果也是int型,但是final修饰的类型不会发生变化
范例:
public class Test2{
public static void main(String[] args)
{
byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7=9;
b3=(b1+b2); /*语句1*/
b6=b4+b5; /*语句2*/
b8=(b1+b4); /*语句3*/
b7=(b2+b5); /*语句4*/
}
}