Java基础学习——Java面向对象(八)final关键字

一、final

final修饰:大写,不可更改

1.修饰数据类型

1)修饰基本数据类型

2)修饰引用数据类型

final修饰的引用数据类型,地址值不可改变,但改地址中的属性值是可以改变的。

package com.rzd.no02oop.demo11;

public class Dog {
    int age;
    double weight;
}
package com.rzd.no02oop.demo11;

public class Test {
    public static void main(String[] args) {
        //final修饰基本数据类型
        final int A = 10;
        //A=100;    //报错,不可修改

        //final修饰引用数据类型
        Dog d = new Dog();
        d = new Dog(); //这里的d指向的地址与上一句不同,因为这里新创建了一个Dog对象,让d指向了新的地址
        final Dog d2 = new Dog();
        //d2=new Dog();   //报错,不可修改
        //但是d2的属性可以改变
        //d2.age = 100;
        a(d2);
        b(d2);
    }
    /*这里d2指向地址1,将d2地址作为参数给dog,dog指向地址1
    走入a方法,新建了一个对象,dog指向新建的对象的地址2,
    所以这里没有改变d2的地址,程序可以正常运行。
    而b方法中,形参dog已经指向了d2的地址,且由final修饰不能改变,所以程序编译器就出错
     */
    public static void a(Dog dog){
        dog=new Dog();
    }
    public static void b(final Dog dog){
        //dog=new Dog();

    }
}

2.修饰方法

1)修饰类

final修饰的类不可以被继承,无子类。被final修饰的类里面的方法可以省略final(无子类自然不不可能会重写方法)

 

2)修饰方法

final修饰的方法不可以被重写。 

 

3.例子

例如Math类

1)在java.lang包下,可以直接调动

2)被final修饰,无子类,Math里面的方法也不会被重写,因为都是数学上定义好的方法,不存在重写它们。

3)构造器被private修饰,表示其他的类无法调用到Math类的构造器(但是创建类的对象需要调用到构造器,那么也就是说外界无法创建Math类的对象Math m=new Math()),

4)Math类中的所有属性和方法都被final(通过类名.属性/方法名调用)和static(无需创建对象,类名.属性/方法名调用直接调用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值