修饰符的笔记

news2024/11/24 14:53:05

修饰符

完整的教程参考下面的链接
菜鸟教程-修饰符
下面是我总结的比较精简的内容
常见的修饰符有权限修饰符和非权限修饰符

权限修饰符

权限修饰符就是我们所熟知的 private,public,protect,default(什么都不写,默认),我们通过这个权限修饰符来限制
image.png
总之:
权限修饰符就是用来管理这个类中的变量和方法的访问权限的,具体的访问权限设置参考上面的表
image.png

image.png

非权限修饰符

常用的是 final,static, abstract

Static

静态变量

举例

我们定义了一个学生类, 然后通过这个类创建多个学生对象, 每个学生对象有一个属性是年龄, 姓名, 性别和老师,
这些学生对象有一些属性是各不相同的, 但是也有一个属性是公有的, 就是这个老师的属性, 这些学生对应的老师是相同的,
我们如果要给这些学生对象进行赋值的话, 那么久太麻烦了, 所以我们引入 static 关键字, 通过这个关键字我们可以实现一个变量被多个对象所共有, 同时我们的这个 static 定义的变量还可以直接通过类名进行访问

比如我们定义了一个 student 类, 然后里面的 tearchname 是 static 类型的, 然后我们就可以直接
Student. Teachname 进行访问变量

Static 修饰符, 是修饰这个变量属于这个类, 而不是属于对象
我们通过这个类名来访问这个 static 变量,而不是通过变量名
static 的关键特点

  1. 其被改类所有对象共享
  2. 可以通过类名调用, 我们推荐这种
  3. 也可以被对象名调用

内存分析

这个 static 定义的关键字的对象存放到堆区的一个静态空间中,

image.png

静态方法

被 static 修饰的成员变量, 叫做静态变量
被 static 修饰的成员方法, 叫做静态方法
特点

  1. 多用于测试类和工具类中
  2. Javabean 类中很少会用

调用方式

  1. 类名调用
  2. 对象名调用

三种不同的类的区别

  1. JavaBean 是用来描述一类事物的类, 比如 student ,user
  2. 测试类用来检查其他类是否书写正确, 带有 main 方法的类, 是程序的入口
  3. 工具类, 不是用来描述一些事物的, 而是帮我们做一些事情的类

工具类

  1. 类名要见名知意
  2. 私有化构造方法,因为这个工具类, 不是用来描述一些事物的, 你创建这个工具类的对象, 没有意义, 所以我们要私有化, 防止外界调用
  3. 简单来说这个工具类就是我们封装的一系列的函数, 我们可以直接进行使用, 例如这个. Length 这个函数

Static 的注意事项

  1. 静态方法只能访问静态变量和静态方法

  2. 非静态方法可以访问静态变量或者静态方法, 也可以访问非静态的成员变量和非静态的成员方法

  3. 静态方法中是没有 this 关键字的

  4. 静态方法中, 只能访问静态, 非静态是变化的, 静态是不能访问非静态的, 因为它不知道要访问的是哪一个对象的变量

  5. 非静态方法可以访问所有

  6. 静态方法没有 this 关键字, 因为 this 指向的是对象, 但是静态方法指向的确实这个类,

Static 是用来声明静态变量的,无论一个类新建了多少份,但是静态变量有且只能有一份,比如说,学生类对象,每个学生都有一个老师如果我们每个学生类对象都新建一个老师对象的话,第一就是占用内存,第二就是有可能造成老师的数据错误,因此我们可以创建这个静态对象。
举例,例如下面的这个

public class Students {
    private String name;
    private int age;
    private String sex;
    private static String teacherName;
}

Final

Final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。

  1. 如果用 final 修饰方法,表示方法是最终方法,不能被重写
  2. 如果用 final 修饰类,表明该类是最终类,不能被继承
  3. 如果用 final 修饰变量,叫做常量,只能被赋值一次

如果 final 修饰引用数据类型,记录的地址值不能发生改变,内部的属性值还是可以发生改变的。
比如说,对象类型,数组类型
我们常常可以将这个 final 和 static 搭配使用,实现创建这个静态常量
关于这个字符串的一些解释:
我们在学习字符串的时候知道字符串是不可以进行变化的,这也就是因为字符串的源代码中是 final 类型的。
image.png
常量
实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性。
常量的命名规范:

  1. 单个单词: 全部大写
  2. 多个单词: 全部大写,单词之间用下划线隔开

细节:

  1. Final 修饰的变量是基本类型: 那么变量存储的数据值不能发生改变。
  2. Final 修饰的变量是引用类型: 那么变量存储的地址值不能发生改变,对象内部的可以改变。、

abstract

abstract 用来构造抽象类和抽象方法

抽象类

抽象类是必须要进行重写的, 不能够直接创建对象, 我们可以采用多态的方法进行创建对象

对象代表什么, 就得封装对应的数据, 并提供相应的数据
当数据类型比较多的时候, 我们就会用到继承,
当子类的某个行为大致方向相同, 但是具体不同的话, 我们一般是在父类中随便写一个, 然后再子类中用多态进行重写

抽象类的定义格式

定义的时候我们就是直接再 class 前面加入 abstract

抽象方法和抽象类

抽象方法: 将共性的行为(方法)抽取到父类之后。
由于每一个子类执行的内容是不一样,所以,在父类中不能确定具体的方法体。该方法就可以定义为抽象方法。
抽象类: 如果一个类中存在抽象方法,那么该类就必须声明为抽象类
注意事项

  1. 抽象类不能实例化, 就是不能创建对象
  2. 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类-否则系统会报错的
  3. 可以有构造方法, 当创建子类对象的时候, 给属性进行赋值
  4. 抽象类的子类, 写的时候会出现错误, 我们可以 alt 加回车有两个选择
    1. 要么重写抽象类中的所有抽象方法
    2. 要么是抽象类

当父类的某个方法写什么都不太合适的时候我们这个时候就将其转化为抽象方法.

格式修饰符 +abstract + 返回值类型 +函数名 ( ){ }

强制你这样命名, 防止格式不规范,构建抽象类之后,之后继承的子类的都要重写这个抽象方法,然后格式必须和父类的抽象方法一样。

public abstract class Animal {
    //这是一个抽象类,作为所有动物比如说猫狗等的父类,
    //对于这种父类对象,其要继承给所有子类对象一个喜欢吃的方法,但是这个吃的方法怎么写都不合适,因为子类都有自己喜欢的,此时就要重写方法,这个时候就用到抽象类了
    private String name;
    private int age;
    public abstract void eat();
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return this.name;
    }
    public int getAge() {
        return this.age;
    }

}

public class dog extends Animal {
    public dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        //重写方法的内容,此时狗最喜欢的是骨头
        System.out.println(getName()+"最喜欢吃骨头");
    }

    // 抽象类不能实例化
    // 抽象类不能创建对象
    // 抽象类中可以有抽象方法,也可以没有抽象方法
    // 抽象类中可以有普通方法,也可以没有普通方法
    // 抽象类中可以有静态方法,也可以没有静态方法
    // 抽象类中可以有构造方法,也可以没有构造方法
    // 抽象类中可以有属性,也可以没有属性

    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云云耀云服务器L实例评测|基于华为云云耀云服务器L实例搭建EMQX大规模分布式 MQTT 消息服务器场景体验

文章目录 前言一、😄华为云云耀服务器二、😄产品实例创建相关1、🧨开通华为云云耀服务器2、🧨创建华为云云耀服务器实例3、🧨终端登录4、🧨华为云云耀云服务器密码重置 三、😄安装开源产品EMQX四…

python diffusers StableDiffusionXLPipeline 离线使用

下载sd_xl_base_1.0.safetensors https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main 我这下载后放到项目 models 里 model_path "./models/v1-5-pruned-emaonly.safetensors" # model_path "./models/v1-5-pruned.safetensors" # model…

人工智能创业,2023爆火风口项目:实景无人直播帮实体店精准获客

软件图片素材来自于公众号:生财风暴 关注进行领取价值1000元的采集软件,和呆头鹅批量剪辑和矩阵管理系统演示 把AI和直播结合在一起的实景自动直播你知道吗?如果提起人工智能创业项目啊,你还只知道CHHGPP的话,那不妨把…

光伏浪涌保护器综合应用工程方案

光伏浪涌保护器是一种用于保护光伏发电系统中的设备和线路免受雷电或其他瞬态过电压的影响的装置。光伏发电系统由于其分布式、室外、大面积等特点,容易受到雷电直击或感应,导致系统内部产生高能量的浪涌电流和电压,从而损坏光伏组件、逆变器…

竞赛选题 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称: 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 &…

【Git】Git 快照 Snapshot

Git 快照 Snapshot 在对 Git 基础的学习过程中,我们了解了 Git 仓库的基本结构: 工作目录暂存区版本库,即 .git 仓库 下面我们就通过一次修改、暂存以及提交的工作流程,来理解快照(Snapshot)的概念。 现…

基于Docker的JMeter分布式压测实战讲解

一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试。如本网站所示,一个JMeter实例将能够控制许多其他的远程JMeter实例,并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互。JMeter主站…

Linux:基础开发工具之Makefile和缓冲区的基本概念

文章目录 动静态库自动化构建代码缓冲区 动静态库 首先要知道什么是链接: C程序中,并没有定义printf的函数实现,且在预编译中包含的stdio.h中也只有该函数的声明,而没有定义函数的实现 系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没…

旋转偏心裁切刀切向跟踪及半径补偿

1 裁刀半径补偿问题的提出 偏心裁刀一般皮革和纸箱行业用的比较多,它适用于裁切比较厚的材料。对于如图1所示的偏心裁刀,它的刀尖和旋转轴(也就是刀心)存在一个距离,设为半径r。由于改刀刀刃有方向,所以用该刀去切割直线时&#…

使用nvm管理node.js

使用nvm管理node.js 一、简介 nvm是一个node的版本管理工具。可以在多种系统上管理Node.js 版本的工具。使用 NVM,可以轻松地切换不同版本的Node.js,并方便地管理不同版本的全局包和本地包。 二、安装与下载 1.删除原有node.js 首先需要卸载已安装的…

免费音乐下载网站分享(MP3文件格式)

免费音乐下载网站分享(MP3文件格式) 最近需要下载一些歌曲,发现很多音乐app上下载文件都需要vip,再上网查询了一番,最后发现了一个宝藏网站,可以免费下载各种格式的MP3文件,在这里给大家分享一…

建设数字孪生智慧城市是未来城市的重要增长点

中国国家创新与发展战略研究会学术委员会常务副主席、重庆市原市长黄奇帆在《瞭望》撰文指出: AI时代的城市是由实体空间和数字空间组成的数字孪生城市,要充分重视对数字空间的治理。随着城市数字化进程的加快,城市、企业、个人开始形成多样化…

软件需求怎么写?

前言:一般来说,软件产品的需求人员的主要输出物就是软件需求,如果这个软件产品就XX系统,人们口中的“系统需求”和“软件需求”就没有什么区别了。在车企行业,推行这ASPICE体系,在这个体系中明确申请了系统…

2023工博会,正运动开放式激光振镜运动控制器应用预览(三)

展会倒计时:4天 本次的中国国际工业博览会正运动技术将携开放式激光振镜运动控制器ZMC408SCAN-V2亮相。 •绿色生产,减少材料和资源浪费,提升可持续性; •节省多套硬件成本,替代传统的激光加工系统,降低项…

【深度学习】树莓派Zero w深度学习模型Python推理

在机器学习开发过程中,当模型训练好后,接下来就要进行模型推理了,根据部署环境可分为三类场景: 边缘计算:一般指手机,嵌入式设备,直接在数据生成的设备上进行推理,因为能避免将采集…

MAC MINI 2012安装Montery折腾笔记

MAC MINI 2012安装Montery折腾笔记(作为电视盒子/远程开发机) 起因: 手头有个mac mini,2018年买的2手。一直都是10.12系统,处理python和苹果开发都受制于旧系统,很多软件也装不上,于是有了升级…

Qt开发 入门

1.Qt概述 什么是Qt 不论我们学习什么样的知识点首先第一步都需要搞明白它是什么,这样才能明确当前学习的方向是否正确,下面给大家介绍一下什么是Qt。 Qt是一个跨平台的C应用程序开发框架 具有短平快的优秀特质: 投资少、周期短、见效快、效益高几乎支持…

Java-集合类

集合 Java集合是Java中用于存储和管理一组对象的工具。Java集合提供了相应的方法,用于用户对集合内数据的操作。 Java集合类提供了许多不同的数据结构,如列表、队列、栈、集合和映射,以满足不同类型的编程需求。 程序中如何存储大批量同类型…

vue项目中使用特殊字体的步骤

写在前面 在项目中使用特殊字体,需要注意,所使用的特殊字体是否被允许商用或是个人开发,以及如何使用,切记不要侵权。 首先需要在对应字体网站下载字体文件,取出里面后缀名为.ttf的文件 然后把该文件放到src -> ass…

python自(2)切片 字典 遍历删除添加修改查询定义函数函数返回值作用域序列化异常报错urllib使用一个类型六个方法下载 视频音频图片

切片 # # 切片# s hello word# # 下标索引为0的 # print(s[0]) #h# # 左闭右开 (左是下标开始的,右是几个索引值)例如从0开始算 4个索引值 # print(s[0:4]) #hell# # 更改起始值的开始位置 # print(s[1:]) #ello word# # 下标结束位置 # p…