【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

相关文章
|
1天前
|
缓存 Java 开发者
深入理解Java的五种引用类型
深入理解Java的五种引用类型
9 1
|
6天前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
2天前
|
Java
java之final关键字
java之final关键字
7 1
|
15天前
|
Java 编译器
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
12 0
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
|
3天前
|
Java
Java内部类相关内容总结和解读
Java内部类相关内容总结和解读
|
4天前
|
存储 Java
Java 五种内部类演示及底层原理详解
Java 五种内部类演示及底层原理详解
6 0
|
6天前
|
Java
详解Java中的protected修饰的访问权限
详解Java中的protected修饰的访问权限
|
10天前
|
存储 缓存 Java
【Java】Java中的引用类型(全面解读)
【Java】Java中的引用类型(全面解读)
10 0
|
15天前
|
Java 编译器 程序员
Java基础9-深入理解Java内部类及其实现原理
Java基础9-深入理解Java内部类及其实现原理
12 0
|
30天前
|
安全 Java 编译器
Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
42 0