class Demo8_Final{
public static void main(String[] args) {
//System.out.println("Hello World!");
/*
final int num = 12;
num = 12; //报错:是被赋值一次,而不是不改变其值
*/
Son s = new Son();
s.print();
final Person p = new Person("张三",23);
//p = new Person("李四",24); //对象即地址值不能修改,但对象中的属性值是可以修改的
p.setName("王五");
p.setAge(25);
System.out.println(p.getName()+">>>" + p.getAge());
method(10); //10
method(20); //20,基本数据类型使用完后弹栈,不会报错
Demo d = new Demo();
d.print();
}
public static void method(final int x) {
System.out.println(x);
}
}
/*
* A:final概述
* B:final修饰特点
* 修饰类,类不能被继承
* 修饰变量,变量就变成了常量,只能被赋值一次
* 修饰方法,方法不能被重写
* C:案例演示
* final修饰特点
*/
/*
final class Father{
public void print() {
System.out.println("访问底层数据资源");
}
}
class Son extends Father{
public void print() {
System.out.println("哈哈,底层资源已经被修改");
}
}
*/
class Son{
//int num = 10;
final int NUM = 10; //常量命名规范,如果是一个单词所有字母大写,如果是多个单词,加下划线并大写
//public static final int NUM = 10; //final 修饰变量叫常量,长与public static搭配
public void print() {
//num = 20;
//NUM = 20;
//System.out.println(num);
System.out.println(NUM);
}
}
/*
final修饰的类不可以被继承,但继承其他类是可以的
*/
final class A extends B{
}
class B{
}
/*
* A:案例演示
* 方法内部或者方法声明上都演示一下(了解)
* 基本类型,是值不能被改变
* 引用类型,是地址值不能被改变,对象中的属性可以改变
*/
class Person{
private String name; //姓名
private int age; //年龄
public Person() {} //空参构造
public Person(String name,int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) { //设置姓名
this.name = name;
}
public String getName() { //获取姓名
return name;
}
public void setAge(int age) { //设置年龄
this.age = age;
}
public int getAge() { //获取年龄
return age;
}
public void eat() { //吃饭
System.out.println("吃饭");
}
}
/*
* A:final修饰变量的初始化时机
* 显示初始化
* 在对象构造完毕前即可
*/
class Demo{
//final int num = 10; //显示初始化值时
final int num; //成员变量的默认初始化值是无效值
public Demo() {
num = 10; //类的对象被创建时调用空参构造时,初始化值,此时变量还未被使用
}
public void print() {
System.out.println(num);
}
}
|
|