【JAVA】包、权限修饰符、final关键字、常量、枚举、抽象类、接口
1 包
- 包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。建包语句必须在第一行
- 建包的语法格式:package 公司域名倒写.项目名称。包名建议全部小写
- 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用。假如一个类中需要用到两个类名称一样的类,那么默认只能导入一个类,另一个类需要带包名访问
- 导包格式:import 包名.类名
2 权限修饰符
- 权限修饰符:用来控制一个成员能够被访问的范围
- 可以修饰成员变量、方法、构造器、内部类,不同权限修饰符修饰的成员能够被访问的范围将受到相应的限制
- 权限修饰符的范围:private<缺省<protected<public
| 修饰符 | 同一个类中 | 同一个包中的其它类 | 不同包下的子类 | 不同包下的无关类 |
|---|---|---|---|---|
| private | √ | |||
| 缺省 | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
定义成员(方法、成员变量、构造器等)一般满足如下要求:
- 成员变量一般私有
- 方法一般公开
- 如果该成员只希望本类访问,用private访问
- 如果该成员只希望本类的同一个包下的其他类和子类访问,使用protected修饰
3 final关键字
- final关键字是最终的意思,可以修饰方法、变量、类
| final修饰方法 | 表明该方法是最终方法,不能被重写 |
|---|---|
| final修饰变量 | 表明该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次) |
| final修饰类 | 表明该类是最终类,不能被继承 |
- final修饰的变量是基本类型:那么变量存储的数据值不能发生改变
- final修饰的变量是引用数据类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的(但是数值可以变化)
4 常量
- 常量是使用了public static final修饰的成员变量,,而且执行的过程中其值不能被改变
- 常量的作用和好处:可以做系统的配置信息,方便程序维护,同时也能提高可读性
// 常量命名规范:英文字母全部大写,多个单词下划线相连
public static final String PASS_WORD = "123";
常量的执行原理:
- 在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量
- 好处:让使用常量的程序的执行性能与直接使用字面量是一样的
选择常量做信息标志和分类:代码可读性好,实现了软编码形式
5 枚举
- 枚举类都是继承了枚举类型:java.lang.Enum
- 枚举都是最终类,不可以被继承
- 枚举类的构造器都是私有的,枚举对外不能创建对象。
public static void main(String[] args) {Season s1 = Season.AUTUMN;Season s2 = Season.WINTER;// !!!!但是不能创建对象//Season s = new Season();}
// 枚举的第一行默认都是罗列枚举对象的名称
enum Season{SPRING, SUMMER, AUTUMN, WINTER;
}
编译后:
public final class Season extends java.lang.Enum<Season>{public static final Season SPRING = new Season();public static final Season SUMMER = new Season();public static final Season AUTUMN = new Season();public static final Season WINTER = new Season();public static Season[] values();public static Season valueOf(java.lang.String);
}
6 抽象类
在Java中abstract是抽象的意思,如果一个类中的某个方法的具体实现不能确定,就可以申明为abstract修饰的抽象方法(不能写方法体),这个类必须用abstract修饰,被称为抽象类。
// 抽象类
public abstract class Animal{// 抽象方法public abstract void run();
}
- 抽象类作用:可以被子类继承,让子类来实现方法的具体功能,充当模板,同时也可以提高代码复用
- 样式:只有方法签名,没有方法体,使用abstract修饰
- 一个类如果继承了抽象类,必须重写完抽象类中的全部抽象方法,如果不能,则这个类也得改为抽象类
- 得到了抽象方法,但是抽象类不能创建对象(因为若可以创建对象了,就可以用里面方法,但是又没有方法体)
- 类的成员(成员变量、方法、构造器)抽象类都具备
- 不能用abstract修饰变量、代码块、构造器
7 接口
- 接口只能定义常量和抽象方法,接口不能实例化(就是不能在别的地方new该接口)
public interface Student{// 常量// public static final String NAME = "ABC";// 会默认加上public static final// 下面和上面一样String NAME = "ABC";// 2 抽象方法// 默认加上public abstract//public abstract void score();void score();
}
- 接口时用来被类实现(implements)的,实现接口的类被称为实现类。实现类可以理解为子类
修饰符 class 实现类 implements 接口1,接口2,....{}
- 一个类实现接口,必须重写完接口的全部抽象方法,否则这个类需要定义为抽象类
| 类和类 | 单继承 |
| 类和接口 | 多实现 |
| 接口和接口 | 多继承,一个接口可以同时继承多个接口 |
jdk8之后的新增功能:默认方法,静态方法
jdk9新增功能:私有方法(必须在接口内部才能访问)
public interface PeopleInter{// 必须default修饰,默认用public权限// 1 默认方法,接口不能创建对象,这个方法只能给实现类,由实现类的对象调用default void score(){System.out.println("100分")// 3 的私有方法,可以在这调用graduation();}// 2 静态方法,必须使用static修饰,默认public权限// 必须接口名调用,不能实现类调用public static void queryScore(){System.out.println("查询科目分数为满分")}// 3 私有方法,接口内部才能访问private void graduation(){System.out.println("恭喜您毕业啦")}
}// ------------------------------------class Student implements PeopleInter{
}// ====================================class Test{public static void main(String[] args){Student s = new Student();s.score();// 静态方法,接口名调用PeopleInter.queryScore();}
}
注意事项
- 接口不能创建对象
- 一个类实现多个接口,多个接口中有同样的静态方法不冲突,因为静态方法只能接口名调用
- 一个类继承了父类,同时又实现了接口,父类和接口中又重名的方法,默认用父类的
- 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可
- 一个接口继承多个接口,没有问题,但是若多个接口中存在规范冲突,则不能多继承
相关文章:
【JAVA】包、权限修饰符、final关键字、常量、枚举、抽象类、接口
1 包 包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。建包语句必须在第一行建包的语法格式:package 公司域名倒写.项目名称。包名建议全部小写相同包下的类可以直接访问,不同包下的类必须导包,才可…...
6.s081/6.1810(Fall 2022)Lab5: Copy-on-Write Fork for xv6
前言 本来往年这里还有个Lazy Allocation的,今年不知道为啥直接给跳过去了。. 其他篇章 环境搭建 Lab1: Utilities Lab2: System calls Lab3: Page tables Lab4: Traps Lab5: Copy-on-Write Fork for xv6 参考链接 官网链接 xv6手册链接,这个挺重要…...
项目实战 — 消息队列(7){虚拟主机设计(2)}
目录 一、消费消息的规则 二、消费消息的具体实现方法 🍅 1、编写消费者类(ConsumerEnv) 🍅 2、编写Consumer函数式接口(回调函数) 🍅 3、编写ConsumeerManager类 🎄定义成员变…...
手把手教你快速实现内网穿透
快速内网穿透教程 文章目录 快速内网穿透教程前言*cpolar内网穿透使用教程*1. 安装cpolar内网穿透工具1.1 Windows系统1.2 Linux系统1.2.1 安装1.2.2 向系统添加服务1.2.3 启动服务1.2.4 查看服务状态 2. 创建隧道映射内网端口3. 获取公网地址 前言 要想实现在公网访问到本地的…...
【Linux取经路】揭秘进程的父与子
文章目录 1、进程PID1.1 通过系统调用接口查看进程PID1.2 父进程与子进程 2、通过系统调用创建进程-fork初始2.1 调用fork函数后的现象2.2 为什么fork给子进程返回0,给父进程返回pid?2.3 fork函数是如何做到返回两次的?2.4 一个变量怎么会有不…...
iOS链式编程风格 -- 富文本字符串
一、概念 链式编程风格是一种将多个函数调用连接起来,形成一条函数调用链的编程风格。这种风格的代码可以通过返回 self 或某个适当的对象来实现。 1.优点 代码简洁、连贯、易于阅读。可以将一个方法的输出直接作为下一个方法的输入,降低中间变量的使…...
后端开发5.Redis的搭建
使用docker安装 Redis【redis】(6379) 拉取Redis镜像 docker pull redis:6.2.6 启动Redis容器 docker run -di --name=redis -p 6379:6379 redis:6.2.6 启动Redis容器并设置密码 docker run -di --name=redis -p 6379:6379 redis:6.2.6 --requirepass "密码" 测…...
推特群推王构建你的流量池
随着社交媒体的兴起,推特已成为了一个信息传播、交流、互动的重要平台。在这个充满了各种声音和观点的数字世界里,如何有效地将自己的声音传达出去,吸引更多的关注和互动,已经成为了一个备受关注的话题。而在这个过程中࿰…...
【从零学习python 】12.Python字符串操作与应用
文章目录 学习目标字符串介绍字符串表示方式小总结转义字符 下标和切片一、 下标/索引1. 如果想取出部分字符,那么可以通过下标的方法,(注意在计算机中,下标从 0 开始)2. 遍历3. 切片 进阶案例 学习目标 字符串的表示…...
MongoDB创建用户 、数据库、索引等基础操作
MongoDB的权限认证是相对来说比较复杂的,不同的库创建后需要创建用户来管理。 本机中的MongoDB是docker 启动的,所以先进入docker的镜像中 docker exec -it mongodb bash 这样就进入到了镜像MongoDB中,然后输入命令连接MongoDB数据库 注…...
Docker容器监控(Cadvisor +Prometheus+Grafana)
环境部署,接着上一篇文章Docker容器部署(Cadvisor InfluxDBGrafana)开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…...
家电用PCM板:市场现状研究分析与发展前景预测
家电PCM板属于一种兴起不久的功能性复合材料。属于家电复合外观材料中占比较大的一种。家电复合外观材料主要分为覆膜板(VCM)系列和有机涂层板(PCM)系列两大类:VCM系列表面复合各类功能性薄膜,可根据需要实…...
详解lambda表达式(一):表达式定义与异常处理
目录 一、lambda表达式 二、lambda表达式实现函数接口 2.1 函数式接口 2.2 lambda表达式实现无参抽象方法 2.3 lambda表达式实现有参抽象方法 2.4 lambad表达式使用代码块 三、lambda表达式调用外部变量 3.1 lambda表达式可以更改类成员变量 3.2 lambda表达式无法更改…...
UE5、CesiumForUnreal接入WMTS格式地图瓦片,如ArcGIS、Mapbox、天地图
文章目录 1.实现目标2.实现过程2.1 WMTS与TMS2.2 cesium-native改造2.3 CesiumForUnreal插件改造2.4 WMTS瓦片加载测试2.5 EPSG:3857与43263.参考资料1.实现目标 通过改造cesium-native和CesiumForUnreal插件,参考tms的栅格瓦片地图加载逻辑,实现在UE5中通过CesiumForUnreal…...
AI模型公司如何定位 ?
AI模型公司如何定位 ? 企业与消费者? 和 多用途与利基市场? 文本将分解每个象限。 消费类和多用途 最有价值的象限并引发了人工智能热潮。 顶级公司: Open AI - 通过 ChatGPT 为消费者构建,并通过其旗舰 GPT 模型为企…...
C#,OpenCV开发指南(01)
C#,OpenCV开发指南(01) 一、OpenCV的安装1、需要安装两个拓展包:OpenCvSharp4和OpenCvSharp4.runtime.win 二、C#使用OpenCV的一些代码1、需要加头文件2、读取图片3、在图片上画矩形框4、 在图片上画直线 一、OpenCV的安装 1、需…...
windows永久关闭更新
不要去services.msc 服务里面关闭windowUpdata了,对win11和部分win10根本不管用,下面在教你一招永久关闭(原理不是关闭,只是延长更新时间,时间可以设置百年后,所以和关闭差不多) windows图形化…...
python类型转换笔记.python运算符笔记
进制 现代的计算机和依赖计算机的设备里都用到二进制(即0和1)来保存和表示数据,一个二进制表示一个比特(Bit)。 在二进制的基础上,计算机还支持八进制和十六进制这两种进制。 除了计算机里的进制以外,我们生活中经常用到的是十进制。 Pyt…...
【CSS】背景图定位问题适配不同机型
需求 如图, 实现一个带有飘带的渐变背景 其中头像必须显示飘带凹下去那里 , 需要适配不同的机型, 一不下心容易错位 实现 因为飘带背景是版本迭代中更新的, 所以飘带和渐变背景实则两个div 飘带切图如下 , 圆形部分需要契合头像 <view class"box-bg"><…...
20 个实例玩转 Java 8 Stream
先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。统计员工的最高薪资、平均薪资、薪资之和。将员工按薪资从高到低排序,同样薪资者年龄小者在前。将员工按性别分类&…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
