Java基础的重点知识-04-封装

文章目录

  • 面向对象思想
  • 封装

面向对象思想

在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。

  • 面向对象思想的三大基本特征: 封装、继承、多态

1.类和对象
类是对象的抽象,对象是类的具体实例
比如我们把所有学生归为一个类叫做学生类,那么何为对象呢?对象就是学生类的一个具体示例,比如说是一个叫小明的学生,这就是这个类的一个对象。

  • 类是对一类事物的描述,是抽象的
  • 对象是一类事物的实例,是具体的
  • 类是对象的模板,对象是类的实体
  1. 类的定义

成员变量:对应事物的属性
成员方法:对应事物的行为

public class ClassName {
	//成员变量
	//成员方法
}
  1. 对象的使用
    创建对象:类名 对象名 = new 类名();
    使用对象访问类中的成员: 对象名.成员变量;对象名.成员方法();
    代码示例:
public class Student {
    String name;
    int age;

    public void play(){
        System.out.println("我爱打篮球!");
    }


    public static void main(String[] args) {
        Student xiaoMing = new Student();
        xiaoMing.name = "小明";
        xiaoMing.age = 18;
        System.out.println(xiaoMing.name + ":" + xiaoMing.age);
        xiaoMing.play();
    }
}

在这里插入图片描述
重点(成员变量的默认值):

数据类型默认值
基本类型整数(byte,short,int,long)0
浮点数 (float,double)0.0
字符(char)‘\u0000’
布尔(boolean)false
引用类型数组,类,接口null
  1. 对象内存图
  • 一个对象调用一个方法内存图
    在这里插入图片描述

  • 两个对象,调用同一方法内存图
    在这里插入图片描述

  • 一个引用,作为参数传递到方法中内存图

在这里插入图片描述

  1. 成员变量与局部变量的区别
public class Bird {
    String name;
    int age;

    public static void main(String[] args) {
        String action = "";
    }
}

这里我们在类中方法外定义的变量是成员变量,在方法内定义的变量是局部变量,

  • 在类中的位置不同
    成员变量:类中,方法外
    局部变量:方法中或者方法声明上(形式参数)
  • 作用范围不一样
    成员变量:类中
    局部变量:方法中
  • 初始化值的不同 重点
    成员变量:有默认值
    局部变量:没有默认值。必须先定义,赋值,最后使用
  • 在内存中的位置不同
    成员变量:堆内存
    局部变量:栈内存
  • 生命周期不同
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

封装

将成员变量隐藏在对象内部,外界无法对其进行直接修改或操作,增强代码的安全性

  • 将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
  1. 如何进行封装处理
    首先是使用private关键字来修饰成员变量,再通过提供一对getXXX()方法和setXXX()方法,来供对象访问成员变量。
    代码示例:
public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int a) {
        age = a;
    }

    public static void main(String[] args) {
        Student xiaoMing = new Student();
        xiaoMing.setName("小明");
        xiaoMing.setAge(18);
        System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());
    }
}

在这里插入图片描述可以发现,我们通过公共的get、set方法来对成员变量进行设值和取值,但是这样的代码并不是最常见的。因此我们要了解this关键字。

  1. this关键字
    this代表所在类的当前对象的引用(地址值),即对象自己的引用。
    因为this表示所在类的当前对象的引用,所以我们可以通过this关键字来标识成员变量和传递的参数名,使我们的代码更加优雅。
    注意: 当我们不使用this关键字来进行区别时,无法正确的进行成员变量的赋值。
package demo01;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        Student xiaoMing = new Student();
        xiaoMing.setName("小明");
        xiaoMing.setAge(18);
        System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());
    }
}
  1. 构造方法
    无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。
    构造方法的定义
修饰符 构造方法名(参数列表){
	// 方法体
}
  • 构造方法名与类名相同
  • 构造方法没有返回值

代码示例:

package demo01;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(String name) {
        this.name = name;
    }

    public Student(int age) {
        this.age = age;
    }

    public Student() {
    }

    public static void main(String[] args) {
        Student xiaoMing = new Student("小明",18);
        System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());
    }
}

从上代码我们可以看到,构造方法是可以重载的,但是我们也要注意,当我们只设定有参的构造方法的时候,无参构造方法就会消失。但是我们java中有些框架在进行反射时是需要无参构造器的支持的,所以在我们创建类的时候最好是定义好有参构造方法以及无参构造方法

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初阶 《操作符详解》11. 下标引用、函数调用和结构成员

11. 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 操作数:一个数组名 一个索引值 int arr[10];//创建数组 arr[9] 10;//实用下标引用操作符,[ ]的两个操作数是arr和9arr[7]-->*(arr7)-->*(7arr)-->7[arr] 7[arr] 9; //编译器不会…

软考《信息系统运行管理员》-1.1信息系统概述

1.1信息系统概述 信息的含义 信息是人们关心的事情的消息或知识 信息的分类 按产生信息的客体性质分: 自然信息:声、光、热、电等生物信息:遗传信息,生物体内、生物种群内的信息交流机器信息:自动控制系统社会信息…

flask与vue实现通过websocket通信

在一些情况下,我们需要实现前后端之间的时刻监听,本文是一篇工具文档,用于解决前后端之间使用websocket交互。 一. Flask的相关配置 1. 下载相关依赖库 如果还没有配置flask的话,需要先安装flask,同时为解决跨域问题&#xff0…

C++学习全教程(day1:变量和数据类型、运算符、流行控制语句)

目录 一、变量和数据类型 1、变量 2、标识符 3、作用域 4、常量 5、数据类型 1.基本数据类型-整型 2.char类型 3.bool类型 4.浮点类型 5.字面值常量 二、运算符 1、算数运算符 2、赋值运算符 3、复合赋值运算符 4、关系和逻辑运算 1.关系运算符 -------结果是…

SAP系统中如何用事务码图形视图寻找MD04增强开发实施点

在之前发布的文章中,介绍了善用事务码的图形视图以观察事务的执行流程以及如何在MD04中实施增强以改变生产订单的显示顺序。本文结合两者,介绍一下如何利用事务码的图形视图找到增强开发的实施点。 在事务码中输入SE93,进入图形视图&#xf…

sql:between and日期毫秒精度过多导致的查询bug

复现 一般情况下,前端传的日期值大多都是yyyy-MM-dd HH:mm:ss(标准格式),比如2024-06-25 10:49:50,但是在测试环境,测试人员测出了一个带毫秒的日期:比如2024-06-25 10:49:50.9999999 这种情况下会出现查询bug SELEC…

使用 shell 脚本同步 yum 源建立本地私有仓库

文章目录 [toc]事出有因脚本内容前端展示 事出有因 有两方面原因做了这个事情: dockerhub 国内无法访问centos 7 要停止社区支持了 结合两个情况,不久的将来,可能国内也就没有对应的 yum 仓库了(现在想找 centos 7 之前的仓库&…

企业数据挖掘平台产品特色及合作案例介绍

泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具,能够一体化地完成数据集成、模型构建、模型发布,为数据分析、探索、服务流程提供支撑,提供完整的数据探索、多数据源接入、特征处理、模型搭建、…

【Python机器学习】聚类算法的对比与评估——在人脸数据集上比较算法

数据探查: 我们将k均值、DBSCAN和凝聚聚类算法应用于Wild数据集中的Labeled Faces,并查看它们是否找到了有趣的结构。我们将使用数据的特征脸表示,它由包含100个成分的PCA(whitenTrue)生成: peoplefetch_lfw_people(data_home &…

为了提高出图效率,我做了一款可视化制作气泡图谱的小工具

嗨,大家好,我是徐小夕,之前和大家分享了很多可视化低代码的最佳实践,今天和大家分享一下我基于实际场景开发的小工具——BubbleMap。 demo地址:http://wep.turntip.cn/design/bubbleMap 开发背景 之前在公司做图表开发…

LINUX操作系统:Mx Linux,用虚拟机VMware Workstation安装体验

需求说明: 操作系统目前流行有Windows、Linux、Unix等,中国人应该要知道国有操作系统,也要支持国产操作系统,为了更好支持国产操作系统,我们也要知己知彼,那么今天就来体验一把操作系统Mx_Linux_23.2的安装…

mac m芯片下安装nacos

背景:最近再研究 下载地址: https://nacos.io/download/nacos-server/ 解压zip包 unzip nacos-server-2.3.2.zip启动 进入到bin目录下 ./startup.sh -m standalone访问可视化界面 账号密码都是nacos,进行登录即可,nacos的端口为…

打破网络通信界限,推动供应链数字化转型

在当前全球经济低迷的背景下,中国经济的发展模式正在转变,从规模扩张到品质提升,通过优势的整合和叠加,释放出新的生产力。2023年前三季度,中国国内生产总值达到91.3万亿元,同比增长了5.2%1,增速…

红酒与珠宝:璀璨与醇香的奢华交响,双重诱惑难挡

在璀璨的灯光下,红酒与珠宝各自闪耀着迷人的光芒,它们如同夜空中的繁星,交相辉映,共同演绎着奢华的双重诱惑。今天,就让我们一起走进这个充满魅力的世界,感受红酒与珠宝带来的无尽魅力。 首先,让…

1966 ssm 流浪猫领养网站系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 流浪猫领养网站系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/…

红酒舞动,运动风采,品味力与美

当夜幕降临,城市的灯火渐次亮起,忙碌了一天的人们开始寻找那份属于自己的宁静与愉悦。在这个时刻,红酒与运动,这两个看似截然不同的元素,却能以它们不同的魅力,为我们带来一场视觉与感官的盛宴。 红酒&…

【八股系列】Vue中的<keep-alive>组件:深入解析与实践指南

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【探索响应式布局的奥秘:关键技术与实战代码示例】 🎠 系列专栏:【面试题-八股系列】 💖 感谢大家点赞👍收藏⭐评论…

如何在前端项目中制定代码注释规范

本文是前端代码规范系列文章,将涵盖前端领域各方面规范整理,其他完整文章可前往主页查阅~ 开始之前,介绍一下​最近很火的开源技术,低代码。 作为一种软件开发技术逐渐进入了人们的视角里,它利用自身独特的优势占领市…

要离职了,记录一下个人在用的 Mac 应用

大家好,我是楷鹏。 通用 飞书 说起来不信,第一个推荐的是【飞书】,飞书是目前用过最舒服的项目管理应用了。 单拎出来一个飞书文档,功能和体验远超市面上腾讯文档、石墨文档、语雀等等。 现在飞书还支持个人版,No…