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

news/2024/7/6 22:27:11

文章目录

  • 面向对象思想
  • 封装

面向对象思想

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

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

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热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

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

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

相关文章

第 3 章使用图像和标签

现在您已经对 SwiftUI 有了基本的了解,并了解了如何显示文本内容,现在是时候学习如何在应用中显示图像了。在本章中,我们将探讨Label最常见的用户界面组件之一的用法,以及Image用于在屏幕上渲染图像的视图。与上一章中所做的类似,我将通过构建一个简单的演示向您展示如何使…

ADS SIPro使用技巧之数据分坐标轴显示

在SIPro data display页面中显示数据时,逐个显示数据非常地麻烦,可读性也较差; 常规的做法,是将数据拖入到一个显示窗口中进行显示,但是,当数据量较多或者各数据之间的数值差异较大时,可视化效果…

70年,800个,全球AI大模型数据可视化;750名工程师透露的AI真相;GenAI将取代初级程序员?NO!出海美国的创始人必读手册 | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. Anthropic 发布 Claude Artifacts,大模型从「聊天」正式迈入「工作流」 上周,Anthropic 公司发布了最新的大模型 Claude 3.5 Sonnet&am…

掌握rpc、grpc并探究内在本质

文章目录 rpc是什么?又如何实现服务通信?理解rpcRPC的通信过程通信协议的选择小结RPC VS Restful net_rpc实践案例net/rpc包介绍创建服务端创建client 看看net_rpc的通信调度实现的内部原理明确目标基于自己实现的角度分析我会怎么做代码分析 grpc介绍与…

西门子PLC数据 转 CCLink IE Field Basic项目案例

1 案例说明 设置网关采集西门子PLC数据把采集的数据转成CCLink IE Field Basic协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协议转换网关,是把一种协议转换成另外一种协议。网关可以采集西门子,欧姆龙,三菱,AB PLC&am…

Chromium 开发指南2024 Mac篇-Xcode安装(二)

1.引言 在开始编译和开发 Chromium 之前,确保开发环境的正确配置是至关重要的。对于 Mac 用户来说,Xcode 是不可或缺的工具,因为它不仅提供了必需的编译器和工具链,还包含了与 macOS 系统深度整合的开发资源。在本系列指南的第一…