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

【从零开始学Java | 第十一篇】包、final、权限修饰符

目录

前言

一、什么是包?

使用其他类的规则

二、final关键字

注意细节

三、权限修饰符

权限修饰符分类


前言

第十一篇的内容主要是介绍面向对象中的一些细节性的知识点,内容比较杂。

一、什么是包?

包就是文件夹,用来管理各种不同功能的Java类,方便后期代码的维护

如果说你把所有的类都定义到同一个包中,随着项目文件越来越多,之后在寻找特定的类时很难去找到你想要找的类,因此我们要使用包来管理不同的类

包名的规则:公司域名反写+包的作用,需要全部英文小写,见名知意。

例如:com.alibaba.domain

当你在自己创建的包中新建类时,Idea会自动在首行生成当前所在的包。

package com.sprneft.extendsdemo01; public class Dog extends Animal { public void bark(){ System.out.println(name + ":汪汪"); } }

使用其他类的规则

使用其他类时,需要使用全类名

public class Test{ public static void main(String[] args){ com.alibaba.domain.Dog d = new com.alibaba.domain.Dog(); } }

小明说:“这样写太麻烦了吧,有没有简洁一点的方式。”

老师说:“有的,同学,有的。”

可以使用import关键字将本包外的类导入进来。

import com.alibaba.domain.Dog; public class Test{ public static void main(String[] args){ Dog d = new Dog(); } }

具体的规则是这样的:

  • 使用同一个包中的类时,是不需要导包的;
  • 使用java.lang包中的类时,不需要导包;比如String类
  • 其他情况都需要导包;
  • 如果同时使用两个包中的同类名,需要用到全类名。/*容易忽略,要注意*/

二、final关键字

final是最终的、不可改变的意思。

final只能修饰方法、类和变量

当final修饰方法时,表明该方法是最终方法,不能被重写。

当final修饰类时,表明类是最终类,不能被继承。

当final修饰变量时,叫做常量,只能被赋值一次。

在我们实际开发当中,使用final修饰方法和类是很罕见的,比较常见的是使用final来修饰变量。

具体用法如下:

public class Test{ public static void main(String[] args){ final int a = 10; System.out.println(a);//会输出10 a = 20;//a被final修饰,会报错 } }

注意细节

实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性。

常量的命名规范

  • 单个单词:全部大写
  • 多个单词;全部大写,单词和单词之间使用下划线隔开

细节

final修饰的变量如果是基本数据类型,那么变量中存储的数据值是不能发生改变的。

final修饰的变量如果是引用数据类型,那么变量中存储的地址值不能发生改变,对象的内部属性值可以发生改变。

三、权限修饰符

权限修饰符:用来控制一个成员能够被访问的范围的。可以修饰成员变量、方法、构造方法,内部类。

权限修饰符分类

有四种权限修饰符,作用范围由小到大为:private<缺省(默认不写)<protected<public

修饰符同一个类同一个包中其他类不同包下的子类不同包下的无关类
private
缺省
protected
public

场景演示:

包family:

package com.family; // 注意包名 public class Father { private String diary = "私密日记"; // private String tv = "客厅电视"; // 缺省 (什么都不写) protected String recipe = "祖传秘方"; // protected public String blog = "公开博客"; // public public void testSelf() { // 在本类中,自己看自己的东西,全部合法!✅ System.out.println(diary); System.out.println(tv); System.out.println(recipe); System.out.println(blog); } }
package com.family; // 同样的包 public class Roommate { public void test() { Father f = new Father(); // f.diary; // ❌ 报错!私有属性,室友看不了 System.out.println(f.tv); // ✅ 缺省属性,同包可以看 System.out.println(f.recipe); // ✅ protected,同包也可以看 System.out.println(f.blog); // ✅ public,谁都能看 } }

包outsider:

package com.outsider; // 注意!包名变了 import com.family.Father; public class Son extends Father { public void test() { // this.diary; // ❌ 报错!日记是私有的,儿子也看不了 // this.tv; // ❌ 报错!不同包,缺省的电视看不了了 System.out.println(this.recipe); // ✅ protected 发力了!虽然不同包,但是是子类,可以看祖传秘方! System.out.println(this.blog); // ✅ public 随便看 } }
package com.outsider; import com.family.Father; public class Stranger { public void test() { Father f = new Father(); // f.diary; // ❌ // f.tv; // ❌ // f.recipe; // ❌ 陌生人看不了祖传秘方 System.out.println(f.blog); // ✅ 陌生人只能看公开的博客 } }
http://www.jsqmd.com/news/494843/

相关文章:

  • 基于Simscape的双PID比例调速阀与比例溢流阀液压控制系统建模与仿真
  • 【路径规划】基于时空A星算法求解带时间约束的多机器人路径规划问题附matlab代码
  • 动静态库原理与ELF文件详解
  • 2026 年最新漏洞挖掘终极指南|从基础到精通,收藏这一篇足够
  • 【C++】C++设计心得--轮询、事件、异步
  • 2026年最值得用的降AI率工具实测:认准这几款就够了
  • 大模型函数调用(Function Calling)
  • 简单中文分词工具scws的安装和使用方法
  • 2026年深圳4G监控品牌优选:海康威视与大华权威评测与推荐
  • Flink知识点(一)|Flink中的双流关联
  • TCL发布会解析:Q9M Pro领衔,T7M系列双星登场,163吋Micro LED双曜压轴
  • 森林防火系统早期烟雾识别的误报率控制:面向测试工程师的实战指南
  • 【LLM基础】6. LLM 推理时的温度值、top_p、top_k等采样算法原理
  • 『NAS』将NAS变成单词收割机-QwertyLearner
  • 基于深度学习的表格识别技术:通过多模态预处理、神经网络分析和高精度OCR识别,实现复杂银行流水的自动化解析
  • 【第10篇】Mamba 100篇合集 · 从入门到天花板
  • 少走弯路:10个降AI率网站开源免费测评与推荐
  • java面试题总结2
  • LeetCode 1727.重新排列后的最大子矩阵:枚举矩形底边是哪一行 + 排序
  • 2026年塑料瓶粉碎机厂家实力榜TOP3,谁是行业领头羊?
  • 2026年主流论文降AI率工具实测:亲测有效的神器全在这
  • Windows系统漏洞MS17-010全解析
  • 一次签名毁掉数亿美元,深度拆解DeFi历史级漏洞
  • geocode.com.cn:经纬度查询省市县乡街道的地理编码服务
  • 花2千块法人号码核验百万条号码,结果一半是空号”:B端拓客的核验陷阱,该到头了,终于找到了个便宜的法人号码核验就是氪迹科技
  • 7-2 然后是几点
  • 2026年AI编程实战:如何用Gemini 3.1 Pro与国内镜像站提升开发效率
  • 2026年知网AIGC检测4.0升级了什么?这样降AI才有效
  • 做立辉物性表学到的word技巧
  • RabbitMQ在大数据领域的应用场景全解析