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

Java之包,权限修饰符,final关键字详解

2.1 包

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

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

包名的命名规范

 
路径名.路径名.xxx.xxx
// 例如:com.itheima.oa

 

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

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

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

2.2 导包

什么时候需要导包?

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

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

什么时候不需要导包?

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

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

2.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();

权限修饰符

3.1 权限修饰符

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

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

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

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

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

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

3.2 不同权限的访问能力

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

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

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

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

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

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

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

final关键字

4.1 概述

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

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

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

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

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

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

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

4.2 使用方式

4.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修饰的,目的就是供我们使用,而不让我们所以改变其内容。

4.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");}
}

4.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。这也是大家需要注意的地方。

4.2.4 修饰变量-成员变量

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

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

public class Student {final int num = 10;
}
  • 构造方法初始化(在构造方法中赋值一次)(不常用,了解即可)。

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

public class Student {final int num = 10;final int num2;
​public Student() {this.num2 = 20;
//     this.num2 = 20;}public Student(String name) {this.num2 = 20;
//     this.num2 = 20;}
}
 

被final修饰的常量名称,一般都有书写规范,所有字母都大写

http://www.lryc.cn/news/134040.html

相关文章:

  • “深入解析JVM:Java虚拟机内部原理揭秘“
  • Mac下Jmeter安装及基本使用
  • 云计算与边缘计算:加速数字化转型的关键驱动力
  • TheGem主题 - 创意多用途和高性能WooCommerce WordPress主题/网站
  • Pytorch-day10-模型部署推理-checkpoint
  • vue使用websocket
  • jmeter入门:接口压力测试全解析
  • go、java、.net、C#、nodejs、vue、react、python程序问题进群咨询
  • 树莓派4B最新系统Bullseye 64 bit使用xrdp远程桌面黑屏卡顿问题
  • EasyExcel入门介绍及工具类,网络下载excel
  • 【HarmonyOS北向开发】-04 ArkTS开发语言-ArkTS基础知识
  • 【Alibaba中间件技术系列】「RocketMQ技术专题」小白专区之领略一下RocketMQ基础之最!
  • 营销活动:提升小程序的用户活跃度的关键
  • Neo4j之CALL基础
  • 【TypeScript】元组
  • 数据仓库一分钟
  • 提升Python代理程序性能的终极解决方案:缓存、连接池和并发
  • CSS和AJAX阶段学习记录
  • Android自定义View知识体系
  • Springboot 自定义 Mybatis拦截器,实现 动态查询条件SQL自动组装拼接(玩具)
  • Go 1.21新增的 slices 包详解(三)
  • Python 在logging.config.dictConfig()日志配置方式下,使用自定义的Handler处理程序
  • Anaconda, Python, Jupyter和PyCharm介绍
  • axios 各种方式的请求 示例
  • 基于开源模型搭建实时人脸识别系统(四):人脸质量
  • 【开发笔记】ubuntu部署指定版本的前后端运行环境(npm nodejs mysql)
  • 用于优化开关性能的集成异质结二极管的4H-SiC沟道MOSFET
  • 优化个人博客总结
  • 从零构建深度学习推理框架-9 再探Tensor类,算子输入输出的分配
  • Vue使用element-ui