|NO.Z.00057|——————————|BigDataEnd|——|Java&static关键字继承.V17|——|Java.v17|访问控制|final类修饰类|
一、final类修饰类和方法的作用:常用的访问控制符

### --- 注意事项
~~~ ——> public修饰的成员可以在任意位置使用。
~~~ ——> private修饰的成员只能在本类内部使用。
~~~ ——> 通常情况下,成员方法都使用public关键字修饰,成员变量都使用private关键字修饰。
### --- package语句的由来
~~~ ——> 定义类时需要指定类的名称,但如果仅仅将类名作为类的唯一标识,
~~~ ——> 则不可避免的出现命名冲突的问题。这会给组件复用以及团队间的合作造成很大的麻烦!
~~~ ——> 在Java语言中,用包(package)的概念来解决命名冲突的问题。
### --- 包的定义
~~~ ——> 在定义一个类时,除了定义类的名称一般还要指定一个包名,格式如下:
~~~ ——> package 包名;
~~~ ——> package 包名1.包名2.包名3...包名n;
~~~ ——> 为了实现项目管理、解决命名冲突以及权限控制的效果。
### --- 定义包的规范
~~~ ——> 如果各个公司或开发组织的程序员都随心所欲的命名包名的话,
~~~ ——> 仍然不能从根本上解决命名冲突的问题。因此,在指定包名的时候应该按照一定的规范。
~~~ ——> org.apache.commons.lang.StringUtil
~~~ ——> 其中StringUtils是类名而org.apache.commons.lang是多层包名,
~~~ ——> 其含义如下:org.apache表示公司或组织的信息(是这个公司(或组织)域名的反写);
~~~ ——> common 表示项目的名称信息;lang 表示模块的名称信息。
### --- 包的导入
~~~ ——> 使用import关键字导入包。
~~~ ——> 使用import关键字导入静态成员,从Java5.0开始支持。
### --- 基本概念
~~~ ——> final本意为"最终的、不可改变的",可以修饰类、成员方法以及成员变量。
### --- 使用方式
~~~ ——> final关键字修饰类体现在该类不能被继承。
~~~ ——> 主要用于防止滥用继承,如:java.lang.String类等。
~~~ ——> final关键字修饰成员方法体现在该方法不能被重写但可以被继承。
~~~ ——> 主要用于防止不经意间造成重写,如:java.text.Dateformat类中format方法等。
~~~ ——> final关键字修饰成员变量体现在该变量必须初始化且不能改变。
~~~ ——> 主要用于防止不经意间造成改变,如:java.lang.Thread类中MAX_PRIORITY等。
### --- 常量的概念
~~~ ——> 在以后的开发中很少单独使用final关键字来修饰成员变量,
~~~ ——> 通常使用public static final关键字共同修饰成员变量来表达常量的含义,
~~~ ——> 常量的命名规范要求是所有字母都要大写,不同的单词之间采用下划线连。
~~~ ——> public static final double PI = 3.14;
二、编程代码
package com.yanqi.task08;
public class SubFinalClass extends FinalClass {
/*@Override
public void show() {
super.show();
}*/
public static void main(String[] args) {
SubFinalClass sfc = new SubFinalClass();
sfc.show();
}
}
三、编程代码
package com.yanqi.task08;
// ctrl+shift+/ 进行选中内容的多行注释 ,再来一次取消注释
// ctrl+/ 进行当前行的单行注释 ,再来一次取消注释
public /*final*/ class FinalClass {
public final void show() {
System.out.println("FinalClass类中的show方法!");
}
}
四、编程代码
package com.yanqi.task08;
public class FinalMemberTest {
// private final int cnt = 1; // 显式初始化
private final int cnt;
/*{
cnt = 2; // 构造块中进行初始化
}*/
public FinalMemberTest() {
cnt = 3; // 构造方法体中进行初始化
}
public static void main(String[] args) {
// 声明FinalMemberTest类型的引用指向该类的对象
FinalMemberTest fmt = new FinalMemberTest();
// 打印成员变量的数值
System.out.println("fmt.cnt = " + fmt.cnt); // 0 1 2 3
}
}
五、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=50360:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task08.SubFinalClass
FinalClass类中的show方法!
Process finished with exit code 0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv002-Java面向对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通