【Java】final关键字&权限修饰符&内部类&引用类型用法(一)

简介: 本期主要介绍final关键字&权限修饰符&内部类&引用类型用法

1. final关键字


1.1 概述


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

用于修饰 不可改变 内容。

fifinal : 不可改变。可以用于修饰类、方法和变量。

类:被修饰的类,不能被继承。

方法:被修饰的方法,不能被重写。

变量:被修饰的变量,不能被重新赋值。

1.2 使用方式


修饰类

格式如下:

image.png

查询 API 发现像 public final class String 、 public final class Math 、 public final class Scanner等,很多我们学习过的类,都是被 fifinal 修饰的,目的就是供我们使用,而不让我们所以改变其内容。

修饰方法

格式如下:

image.png

重写被 final 修饰的方法,编译时就会报错。

修饰变量

1. 局部变量——基本类型

基本类型的局部变量,被fifinal修饰后,只能赋值一次,不能再更改。代码如下:

image.png

思考,如下两种写法,哪种可以通过编译?

写法1

image.png

image.png

根据 final 的定义,写法 1 报错!写法 2 ,为什么通过编译呢?因为每次循环,都是一次新的变量 c 。这也是大家需要注意的地方。

2. 局部变量 —— 引用类型

引用类型的局部变量,被 fifinal 修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改,代码如下:

image.png

3. 成员变量

成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:

显示初始化;

image.png

image.png

2. 权限修饰符


2.1 概述


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

public :公共的。

protected :受保护的

default :默认的

private :私有的

2.2 不同权限的访问能力


image.png

可见, public 具有最大权限。 private 则是最小权限。

编写代码时,如果没有特殊的考虑,建议这样使用权限:

成员变量使用 private ,隐藏细节。

构造方法使用 public ,方便创建对象。

成员方法使用 public ,方便调用方法。

小贴士:不加权限修饰符,其访问能力与 default 修饰符相同

3. 内部类


3.1 概述


什么是内部类

将一个类 A 定义在另一个类 B 里面,里面的那个类 A 就称为 内部类 , B 则称为 外部类

成员内部类

成员内部类 :定义在 类中方法外 的类。

定义格式:

image.png

在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Car中包含发动机类 Engine ,这时, Engine 就可以使用内部类来描述,定义在成员位置。

代码举例:

image.png

访问特点

内部类可以直接访问外部类的成员,包括私有成员。

外部类要访问内部类的成员,必须要建立内部类的对象。

创建内部类对象格式:

 image.png

image.png

image.png

image.png

内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的 .class 文件,但是前面冠以外部类的类名和 $ 符号 。

比如, Person$Heart.class

3.2 匿名内部类【重点】


匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 类对象

开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作,

1. 定义子类

2. 重写接口中的方法

3. 创建子类对象

4. 调用重写后的方法


我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。

前提

匿名内部类必须继承一个父类或者实现一个父接口

格式

image.png

使用方式

以接口为例,匿名内部类的使用,代码如下:

定义接口:

image.png

image.png

通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。代码如下:

image.png

以上两步,也可以简化为一步,代码如下:

image.png

相关文章
|
21天前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
49 9
|
21天前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
47 8
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
44 4
|
2月前
|
Java 程序员 编译器
|
Java C++ Python
Java 的关键字 final 和 static
Java 中最经典 final 修饰的类就是 String 了,它无法被任何类继承,不仅仅是为了保证 String 的不变性,同时在早期的 Java 版本中会将 final 修饰的方法转化为内嵌调用,提高程序性能(后来的 Java 会自动进行优化,不需要显式地用 final 修饰)。不过要注意的一点是,final 修饰的引用变量,其指向的对象的内容是可以被改变的。final 修饰符可以用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
71 0
|
2月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
223 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
6月前
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
36 0
|
7月前
|
Java
Java里的关键字 __final
Java里的关键字 __final
|
安全 Java 编译器
【Java用法】Java关键字 —— final的用法
【Java用法】Java关键字 —— final的用法
100 0
|
安全 Java