博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站
- final:最终的
- final可以用来修饰的结构:类,方法,属性
- final用来修饰一个类:此类不可以被其他类所继承
例如:String类,System类,StringBuffer类 - final用来修饰方法:此方法不可以被重写
比如Object类中的,getClass()方法 - final用来修饰变量:此时"变量"就称为一个常量了。
5.1.final修饰属性:可以考虑赋值的位置有:显示初始化,代码块中初始化,使用构造器初始化。
5.2. final修饰局部变量:
尤其是使用final修饰形参时,表明此参数是一个常量,当我们调用此方法时,给这个常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
package demo9;
public class FinalTest {
int num;
private void SetText(final int num){
// num=20; //编译不通过,不能给final 变量赋值
System.out.println(num);
}
public static void main(String[] args) {
FinalTest f1=new FinalTest();
f1.SetText(20);
}
}
一、final使用细节一
对应的案例代码如下:
public class FinalDetail01 {
public static void main(String[] args) {
CC cc = new CC();
EE ee = new EE();
ee.cal();//输出结果:cal()方法
}
}
class AA {
/**
* 1.定义时:如public final double TAX_RATE = 0.08;
* 2.在构造器中
* 3.在代码块中
*/
public final double TAX_RATE = 0.08;//定义时赋值
public final double TAX_RATE1;
public final double TAX_RATE2;
public AA() { //在构造器中赋值
TAX_RATE1 = 1.1;
}
{//在代码块中 赋值
TAX_RATE2 = 2.2;
}
}
class BB {
/**
* 如果final修饰的属性是静态的,则初始化的位置只能是
* 1、定义时
* 2、在静态代码块,不能在构造器中赋值。
*/
public static final double TAX_RATE = 99.9;
public static final double TAX_RATE1;
static {
TAX_RATE1 = 1.1;
}
}
//final类不能继承,但是可以实例化对象
final class CC {
}
//如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承
//即,仍然遵守继承的机制
class DD {
public final void cal() {
System.out.println("cal()方法");
}
}
class EE extends DD{
}
二、final使用细节二
public class FinalDetail02 {
public static void main(String[] args) {
/*
//输出结果:
BB静态代码块执行
10000
*/
System.out.println(BBB.num);
/*
输出结果:
10
*/
System.out.println(CCC.num);
}
}
//final和static 搭配使用,效果更高,不会导致类的加载,底层编译器做了优化处理
class CCC {
public final static int num = 10;
static {
System.out.println("CCC静态代码块执行");
}
}
class BBB {
public static int num = 10000;
static {
System.out.println("BBB静态代码块执行");
}
}
final class AAA {
//一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法
// public final void cry(){
//
// }
}
以上是fina关键字的详解,如有任何不当之处,可在评论区指正!
共勉:人生没有重来的机会,不要做一个懒人!身懒毁了你的身材,心懒毁了你的梦想!