一、今天干了什么

1.final关键字

可以修饰的结构:类、方法、变量

 

(1)final用来修饰类(不可以被其他类继承):

比如:String类、System类、StringBuffer类

final class A

{

}

 

(2)final修饰方法(此方法不可以被重写):

class AA
{
    public final void show()
    {
        
    }
}
class BB extends AA
{
   // public void show(){}
}

 

(3)final修饰变量(此时的变量就称为是一个常量):

变量分为属性和局部变量。

 

final修饰属性:

可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化

注意:

不能在方法中赋值,因为要考虑加载、创建对象的问题(调用完构造器后对象就出生了,此时所有的属性都在堆空间中加载且已经有值,通过对象调用方法只能是对值进行再修改)

public class FinalTest
{
    final int width = 10;
    public void doWidth()
    {
        //width = 20;
    }
}

 

final修饰局部变量:

用final修饰局部变量时,当调用此方法时,将一个实参赋值给此形形参,一旦赋值以后,只能在方法体内使用此形参,而不能重新赋值

public class FinalTest
{
    public void show(final int num)
    {
        System.out.println(num);
    }

    public static void main(String[] args)
    {
        int num = 10;
        num += 5;
        FinalTest test = new FinalTest();
        test.show(10);
    }
}    //10

注意:以后会碰到static final(只能修饰属性和方法) 用来修饰属性:全局常量

 

2.final练习(两道):

public class Something
{
    public int addOne(final int x)
    {
        return ++x;    //会报错,因为改变了x的值
        //return x +1 ;  不会报错,因为只是返回了一个x + 1的值,而x并没有发生变化
    }
}
public class Something    //O是常量,i是变量
{
    public static void main(String[] args)
    {
        Other o = new Other();
        new Something().addOne(o);
    }
    public void addOne(final Other o)
    {
     //o = new Ohter();这里不能加,加了之后o就是新的对象 o.i
++; } } class Other { public int i; }

3.复习

二、明天干什么

抽象类与抽象方法的使用、模板方法