final关键字可以修饰非静态的成员方法吗_java学习笔记:【final】、【static】关键字以及【权限修饰符】...

一、final关键字

1.概述

   学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了final关键字,用于修饰不可改变内容。

   final属于一个修饰符,用来修饰类、成员方法、变量(成员变量、局部变量)。被它修饰的类不能被继承,被它修饰的方法不能重写,被它修饰的变量不能被重新赋值。

2.格式

   修饰类:

52ad5c734a17a470511262ecc3e85cdd.png

修饰方法:

c1c2fa51da3b4a63add91f830b05ae13.png

   修饰变量:

d42138af49ac748e78d84f821b524d0d.png

   注意事项:

   1.被final修饰的变量,在生成的.class文件中已经变为了常量。

   2.final修饰的引用数据类型的变量,是地址值不能被改变,类中的成员变量的值可以改变。

   3.final修饰的变量变为常量,为了和变量区分,一般建议final修饰的变量名都大写 。

二、static关键字

1.概述

       static是静态修饰符,一般修饰成员。被static修饰的成员属于类,不属于单个这个类的某个对象。static修饰的成员被多个对象共享。static修饰的成员属于类,但是会影响每一个对象。被static修饰的成员又叫类成员,不叫对象的成员。注意:static不能修饰类 构造方法 局部变量。

2.格式

       static 数据类型 变量名=数据;

0c2010ecbb7fb4806e1cb8410f491274.png

之前我介绍过,只要使用不同类中的成员变量有以下几种方式:

       (1) 创建该类对象,使用对象调用

       (2) 继承,使用super调用      

       (3) 使用类名直接调用,调用格式:类名.静态成员变量名

       所以,如果一个成员变量被static修饰变为静态成员变量了,那么直接可以使用类名调用即可。

0091c5c46f5e2ed42ec19ea965db0fc5.png

3.stati修饰成员变量的注意事项

   (1)静态方法可以直接访问类变量和静态方法。

       (2) 静态方法不能直接访问非静态成员变量或成员方法。非静态成员方法可以直接访问类变量或静态方法。

       (3) 静态方法中,不能使用this关键字。

       解释一下第二点,主要是因为先加载类到方法区,直接使用类名调用静态方法了,而此时还没有对象,而非静态方法必须有对象才可以运行。所以静态方法中不能使用非静态成员。但是非静态方法可以使用静态成员,因为对象已经有了,说明类肯定存在了(先有类后有对象)。看下面图解:

8c98a9ab02ef8dbb751289ca78a17fb4.png

4.static修饰成员方法

       格式:

e6320a05c8b025fe9d7ce69e74f761f4.png

       被static修饰的方法称为静态方法,直接使用类名调用,和对象无关;没有被static修饰的方法称为非静态方法,和对象有关。

55b206a372daf7d3a35db791a3d20136.png

5.static修饰成员方法的注意事项

   (1)静态方法中不能使用非静态的成员变量和成员方法

c5614f4a322caf6918585f087bd6cb2b.png

   (2)非静态成员方法可以调用静态成员变量和方法,因为先有类后有对象

448908a56055110b8ed2ae5c29461a56.png

三、权限修饰符

       在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。

       public 公共的权限,最大的权限 :1)同一类 2)同一包不同类 3)不同包的子类 4)不同包之间没有关系的类

       protected 受保护权限 修饰的内容访问范围:1)同一类 2)同一包不同类 3)不同包的子类

       默认权限(什么都不书写,空的) 修饰的内容可以在本类中使用,也可以在同一包下不同类中使用

       private 私有的权限,最小的权限,修饰的内容只能在本类使用

说明:

       1)四种权限修饰符能够跨包访问的只有:public protected必须是子类

       2)四个权限修饰符从大到小:public > protected > .默认权限(什么都不书写,空的) > private

public

protected

默认

private

同一类中

同一包中(子类与无关类)

不同包的子类

不同包中的无关类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值