当前位置: 首页 > news >正文

JavaSE学习进阶day2_01 包和权限修饰符

第一章 包

1.1 包

包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护。

在IDEA项目中,建包的操作如下:

 这个咱们在基础班就谈到过。

包名的命名规范

路径名.路径名.xxx.xxx
// 例如:com.itheima.oa
  • 包名一般是公司域名的倒写。例如:黑马是www.itheima.com,包名就可以定义成com.itheima.技术名称。

  • 包名必须用”.“连接。

  • 包名的每个路径名必须是一个合法的标识符,而且不能是Java的关键字。

  • 以后开发项目javabean类经常会写在一个叫domain包里

1.2 导包

什么时候需要导包?

情况一:在使用Java中提供的非核心包中的类时

情况二:使用自己写的其他包中的类时

什么时候不需要导包?

情况一:在使用Java核心包(java.lang)中的类时

情况二:在使用自己写的同一个包中的类时

1.3 使用不同包下的相同类怎么办?

假设demo1和demo2中都有一个Student该如何使用?

代码示例:

//使用全类名的形式即可。
//全类名:包名 + 类名
//拷贝全类名的快捷键:选中类名crtl + shift + alt + c 或者用鼠标点copy,再点击copy Reference
com.itheima.homework.demo1.Student s1 = new com.itheima.homework.demo1.Student();
com.itheima.homework.demo2.Student s2 = new com.itheima.homework.demo2.Student();

如下图:

强调一下什么是全类名

全类名: 包名+类名(非常重要的概念)后面我们会多次用到全类名

不知道大家还记不记得我在java基础班的第二节课在使用idea时讲了一个自动导包设置,在这里就体现出来了,idea会自动寻找这个类,并在代码上方自动加一行导包的语句。

第二章 权限修饰符

2.1 权限修饰符

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,我们之前已经学习过了public 和 private,接下来我们研究一下protected和默认修饰符的作用。

  • public:公共的,所有地方都可以访问。

  • protected:本类 ,本包,其他包中的子类都可以访问。

  • 默认(没有修饰符):本类 ,本包可以访问。

    注意:默认是空着不写,不是default

  • private:私有的,当前类可以访问。 public > protected > 默认 > private

3.3 不同权限的访问能力

publicprotected默认private
同一类中
同一包中的类
不同包的子类
不同包中的无关类

为了方便大家理解,我在这里还是做一个例子吧。但是public和private由于之前就接触过来,就不再测试他俩:

先来说默认情况:(以下情况都指的是在不同包中

如图所示,父类中变量a的权限为默认类型,但是在 其他包的子类是不能用的

如果改为protected,如下:

 改为protected类型后,发现可以访问了。但是只能在子类中访问。如果不在子类中呢?

再看:

发现又不能访问了,则protected修饰的成员,只能在它的所继承的子类中访问 。

既然protected都只能在继承的子类中才能访问。那么默认类型的就更不能在其他类中访问了

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

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

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

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

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

小贴士:不加权限修饰符,就是默认权限

在以后的开发中,基本只会用到public和private两个关键字,其余两个基本用不到。了解即可。

小结:

第三章 final关键字

3.1 概述

学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。

如果有一个方法我不想别人去改写里面内容,该怎么办呢?

Java提供了final 关键字,表示修饰的内容不可变。

  • final: 不可改变,最终的含义。可以用于修饰类、方法和变量。

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

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

    • 变量:被修饰的变量,有且仅能被赋值一次。

3.2 使用方式

3.2.1 修饰类

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

格式如下:

final class 类名 {
}

代码:

final class Fu {
}
// class Zi extends Fu {} // 报错,不能继承final的类

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

3.2.2 修饰方法

final修饰的方法,不能被重写。 格式如下:

修饰符 final 返回值类型 方法名(参数列表){//方法体
}

代码:

class Fu2 {final public void show1() {System.out.println("Fu2 show1");}public void show2() {System.out.println("Fu2 show2");}
}
​
class Zi2 extends Fu2 {
//  @Override
//  public void show1() {
//      System.out.println("Zi2 show1");
//  }@Overridepublic void show2() {System.out.println("Zi2 show2");}
}

3.2.3 修饰变量-局部变量

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

public class FinalDemo1 {public static void main(String[] args) {// 声明变量,使用final修饰final int a;// 第一次赋值 a = 10;// 第二次赋值a = 20; // 报错,不可重新赋值
​// 声明变量,直接赋值,使用final修饰final int b = 10;// 第二次赋值b = 20; // 报错,不可重新赋值}
}

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

写法1:

final int c = 0;
for (int i = 0; i < 10; i++) {c = i;System.out.println(c);
}

写法2:

for (int i = 0; i < 10; i++) {final int c = i;System.out.println(c);
}

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

3.2.4 修饰变量-成员变量

成员变量涉及到初始化的问题,初始化方式有显示初始化和构造方法初始化,只能选择其中一个:

  • 显示初始化(在定义成员变量的时候立马赋值)(常用);

public class Student {final int num = 10;
}
  • 发现final修饰成员变量不赋值要报错, 因此用final修饰成员变量时,一定要赋值。而修饰局部变量却不会报错。如下:

  • 构造方法初始化(在构造方法中赋值一次)(不常用,了解即可)。

    注意:每个构造方法中都要赋值一次!

public class Student {final int num = 10;final int num2;//报错!!final修饰的成员变量必须手动赋值!!
​public Student() {this.num2 = 20;
//     this.num2 = 20;}public Student(String name) {this.num2 = 20;
//     this.num2 = 20;}
}

被final修饰的常量名称,在C语言里相当于const修饰的变量,称之为常变量。一般都有书写规范,所有字母都大写

相关文章:

JavaSE学习进阶day2_01 包和权限修饰符

第一章 包 1.1 包 包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术&#xff0c;不同的技术类放在不同的包下&#xff0c;方便管理和维护。 在IDEA项目中&#xff0c;建包的操作如下&#xff1a; 这个咱们在基础班就谈到过。 包名的命名规范&#xff1a; 路径…...

Android性能调优 - 省电优化

省电&#xff1a;通过工具Battery Historian查看到:耗电大头: 屏幕、网络、cpuled/oled屏幕显示:降低亮度&#xff0c;开深色模式&#xff1b;锁屏间隔缩短到 &#xff1b;亮屏需要一直持有唤醒锁&#xff0c;还有gps定位也需要用到唤醒锁;网络&#xff1a; 常用的网络优化措施…...

ElasticSearch - SpringBoot整合ES之全文搜索匹配查询 match

文章目录1. 数据准备2. match 匹配查询1. 全文检索2. 简化查询DSL语句3. match 匹配查询原理官方文档地址&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/index.html权威指南&#xff1a;https://www.elastic.co/guide/cn/elasticsearch/guide/current/…...

句子的改写和扩写

目录 1.句子改写 2.句子扩写 &#xff08;不低于15个句子算是长句子&#xff0c;不能太多长句子&#xff09; 1.句子改写 我绝不会嫁给你的。 如果你是世界上最后一个男人&#xff0c;我就去寺庙。 If you married me,I would jump into the well. 如果你嫁给我&#xff0c;我…...

DockerFile创建及案例

DockerFile dockerfile是用来构建docker镜像的文件&#xff0c;命令脚本参数脚本&#xff01; 构建步骤 编写一个dockerfile文件docker build 构建成为一个对象docker run 运行镜像docker push 发布镜像&#xff08;DockerHub、阿里云镜像仓库&#xff09; 去官网Docker-Hub…...

第十四届蓝桥杯三月真题刷题训练——第 1 天

目录 题目1&#xff1a;数列求值 代码&#xff1a; 题目2&#xff1a;质数 代码&#xff1a; 题目3&#xff1a;饮料换购 代码&#xff1a; 题目1&#xff1a;数列求值 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出…...

基于容器云提交spark job任务

容器云提交spark job任务 容器云提交KindJob类型的spark任务&#xff0c;首先需要申请具有Job任务提交权限的rbac&#xff0c;然后编写对应的yaml文件&#xff0c;通过spark内置的spark-submit命令&#xff0c;提交用户程序(jar包)到集群执行。 1、创建任务job提交权限rbac …...

Linux系统调用之目录操作函数

前言 如果&#xff0c;想要深入的学习Linux系统调用中mkdir&#xff0c;rmdir&#xff0c;rename&#xff0c;chdir&#xff0c;getcwd等这些有关于目录操作函数&#xff0c;还是需要去自己阅读Linux系统中的帮助文档。 具体输入命令&#xff1a; man 2 mkdir/rmdir/rename/ch…...

设计模式-策略模式

前言 作为一名合格的前端开发工程师&#xff0c;全面的掌握面向对象的设计思想非常重要&#xff0c;而“设计模式”是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的&#xff0c;代表了面向对象设计思想的最佳实践。正如《HeadFirst设计模式》中说的一句话&…...

面试+算法:罗马数字及Excel列名与数字互相转换

概述 算法是一个程序员的核心竞争力&#xff0c;也是面试最重要的考查环节。 试题 判断一个罗马数字是否有效 罗马数字包含七种字符&#xff1a;I&#xff0c;V&#xff0c;X&#xff0c;L&#xff0c;C&#xff0c;D和M&#xff0c;如下 字符数值I1V5X10L50C100D500M1000…...

Connext DDS路由服务Routing Service(1)

1 简介 RTI路由服务是一种开箱即用的解决方案,允许开发人员快速扩展和集成不同或地理位置分散的实时系统。它跨域、LAN和WAN扩展RTI ConnextDDS应用程序,包括防火墙和NAT穿越。 它还支持DDS到DDS的桥接,允许您对数据进行转换。这允许未修改的DDS应用程序进行通信,即使它们是…...

如何使用SaleSmartly进行Facebook Messenger 营销、销售和支持

如何使用SaleSmartly&#xff08;ss客服&#xff09;进行Facebook Messenger 营销、销售和支持上篇文章我们讲了什么是Facebook Messenger CRM以及获得Facebook Messenger CRM的注意事项&#xff0c;现在你有更多时间与客户聊天&#xff0c;让我们看看你如何使用SaleSmartly&am…...

教资教育知识与能力中学教学

目录 3.1 教学概述 3.2 教学过程 3.3 教学原则*【简答/辨析重点】 3.4 教学方法 3.5 教学组织形式 3.6 教学工作基本环节 3.7 教学评价 3.1 教学概述 1、教学的意义【14/18辨析】 教学是传授系统知识、促进学生发展的最有效形式&#xff1b; 教学是学校进行全面发展教…...

IDEA中使用Tomcat的两种方式:集成本地Tomcat使用Tomcat Maven插件

一、前言 在IDEA中创建完一个Maven Web项目&#xff0c;并补齐了目录以后&#xff0c;准备使用Tomcat时&#xff0c;就需要在自己创建的项目中去部署Tomcat&#xff0c;前文已经介绍了如何创建Maven Web&#xff0c;所以这里就不多加赘述&#xff0c;直接讲述部署Tomcat的方法…...

IP 地址的简介

IP 地址 Internet 依靠 TCP/IP 协议&#xff0c;在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的主机之间的互联。在 Internet 上&#xff0c;每一个节点都依靠唯一的 IP 地址相互区分和相互联系&#xff0c;IP 地址用于标识互联网中的每台主机的身份&#xff0c…...

3D动作/动画特效

硕士/博士符合一本高校人才引进条件的硕士、博士&#xff0c;教研能力突出者可签合作高校正式编制本科/硕士成绩优异专业扎实、有创新思维者可在签约工作后在校继续读研读博【产业模式】数字经济→数字孪生→升级转型【细份领域】数字产业、数字工程、数字教研、数字政企【合作…...

python 多线程编程之_thread模块

_thread模块除了可以派生线程外&#xff0c;还提供了基本的同步数据结构&#xff0c;又称为锁对象&#xff08;lock object&#xff0c;也叫原语锁、简单锁、互斥锁、互斥和二进制信号量&#xff09;。 下面是常用的线程函数&#xff1a; 函数描述start_new_thread(function,…...

vue:vue2与vue3的区别

一、背景 vue2是指的2.X vue3是指的3.0以及更新的版本&#xff08;3.2版本在script标签里可以写setup&#xff0c;极大的简化了开发&#xff09; 本文对比两者区别。 二、官网 生命周期选项 | Vue.js API 参考 | Vue.js Vue.js - 渐进式 JavaScript 框架 | Vue.js Vue.…...

SQL数据库语法

目录 1. 常用数据类型 2. 约束 4. 数据库操作 5. 数据表操作 1. 常用数据类型 int 整型double 浮点数varchar 字符型data 年月日datetime 年月日 时分秒2. 约束 主键 primary key : 物理上存储的顺序(存在真实排序), 主键…...

人机界面艺术设计

人机界面艺术设计 2.1人机界面艺术设计思路 人们经常有意通过某种工具或创造来解决难题&#xff0c;然而这并不意味着人们乐于接受别人或其他事情&#xff0c;他们很难提出问题。在用户使用网页或软件的时候&#xff0c;他们有明确的目标&#xff0c;他们利用电脑来帮助自己达…...

低空经济落地第一站:工业无人机巡检的格局重构、技术革命与黄金增长期

在海拔4500米的青藏高原特高压输电线路上&#xff0c;一架全自主工业无人机沿着预设航线平稳飞行&#xff0c;以厘米级精度悬停在绝缘子旁&#xff0c;红外热成像镜头精准捕捉到导线的微小发热点&#xff0c;端侧AI大模型实时完成缺陷识别与风险分级&#xff0c;数据同步回传至…...

STM32CubeMX + EG2131预驱芯片:搞定无刷电机六步换向的硬件配置避坑指南

STM32CubeMX与EG2131预驱芯片的无刷电机六步换向实战解析 引言 在嵌入式电机控制领域&#xff0c;无刷直流电机&#xff08;BLDC&#xff09;因其高效率、长寿命和低维护成本等优势&#xff0c;正逐步取代传统有刷电机。然而&#xff0c;当工程师们从理论转向实践时&#xff0c…...

保姆级教程:在若依框架里给你的系统加个AI客服(通义千问+流式响应)

企业级智能客服系统集成实战&#xff1a;若依框架与通义千问的完美结合 1. 智能客服系统架构设计 在当今数字化转型浪潮中&#xff0c;智能客服已成为企业提升服务效率、降低人力成本的关键工具。基于若依框架与通义千问构建的智能客服系统&#xff0c;能够无缝集成到现有企业应…...

开源字体完全指南:免费商用与跨平台优化实践

开源字体完全指南&#xff1a;免费商用与跨平台优化实践 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在当今数字化设计领域&#xff0c;选择合适的字体不仅关乎视觉呈现&#xff0c…...

新手必看,用快马生成的示例代码轻松学懂stm32f103c8t6引脚配置

作为一个刚接触STM32的开发者&#xff0c;我完全理解新手面对芯片引脚配置时的困惑。最近在InsCode(快马)平台尝试生成STM32F103C8T6的示例代码时&#xff0c;发现它特别适合用来建立引脚功能与代码的映射关系。下面分享我的学习过程&#xff1a; 理解芯片引脚特性 STM32F103C…...

11. v4 版本升级指南

11. v4 版本升级指南 1. 概述 Tailwind CSS v4 是一个重大版本更新&#xff0c;从 JavaScript 配置转向 CSS 优先的配置方式。 1.1 主要变化 变化v3v4配置方式tailwind.config.jsCSS 文件 (theme)安装方式postcss tailwindcsstailwindcss/vite 等暗色模式dark: 前缀相同&a…...

五大赛道齐亮相!第四届世界科学智能大赛启动报名,首设人文科学赛道

随着人工智能深入科研实践&#xff0c;它不仅在各领域课题的预测、计算等方面屡创新高&#xff0c;也正介入曾被认为高度依赖人类直觉与经验的文化阐释工作。继第四届世界科学智能大赛的创新赛道“AI4S智能体CNS挑战赛”在一个月前率先发布&#xff0c;吹响了自主科研智能体的攻…...

如何在Windows 11上高效配置三指拖拽功能:完整实用指南

如何在Windows 11上高效配置三指拖拽功能&#xff1a;完整实用指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDragO…...

Linux下objdump反汇编实战:从二进制文件到可读代码的深度解析

1. 初识objdump&#xff1a;二进制世界的翻译官 第一次接触objdump时&#xff0c;我把它比作"二进制世界的翻译官"。这个比喻来自我调试段错误时的经历——当时面对崩溃的core dump文件手足无措&#xff0c;直到同事教我用了objdump -d。这个GNU工具链中的瑞士军刀&a…...

Windows 10/11下Frida逆向分析环境搭建避坑指南(含ADB驱动安装)

Windows 10/11逆向工程实战&#xff1a;Frida环境搭建全流程与疑难解析 逆向工程的世界就像一场数字考古&#xff0c;而Frida无疑是当前最趁手的工具之一。但很多新手在Windows平台搭建Frida环境时&#xff0c;往往会陷入Python版本地狱、ADB驱动失效、设备连接失败等连环陷阱。…...