Java学习第二十七天
一、今天干了什么
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.复习
二、明天干什么
抽象类与抽象方法的使用、模板方法