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

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

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

相关文章:

  • win7 的 vmware tools 安装失败
  • 【杂记-浅谈OSPF协议之IR、ABR、ASBR、BR】
  • element 问题整合
  • Linux下vi文件的时候替换指定的内容
  • 【知识学习】阐述Unity3D中MaterialTexture的概念及使用方法示例
  • java创建0byte的空文件
  • Qt 实战(6)事件 | 6.2、事件过滤器
  • 【PyTorch】【机器学习】图片张量、通道分解合成和裁剪
  • 如何提高工业交换机的电源功耗?
  • 源站静态文件更新后,CDN会自动刷新吗
  • Token的应用场景
  • 机器学习课程复习——奇异值分解
  • Java--乐观锁
  • 静默升级oracle 11g (从11.2.0.1升级到11.2.0.4)
  • 什么是模型训练,如何选择合适的Batch大小
  • 【线上绘图网站分享】
  • Snipaste截图工具如何控制框线箭头的粗细程度
  • GISSERVER 管理器 1.0(私有化地图离线部署)
  • Eureka服务治理深度解析:服务下线与剔除机制揭秘
  • 苹果笔记本双系统怎么安装
  • 探索网络爬虫技术:原理、实践与挑战
  • GitHub国内使用方法
  • Java调用第三方HTTP接口的常用方式
  • DOPE-PEG2000-FITC荧光特性
  • 华为Pura70支持5G功能吗?看完你就清楚了
  • android 4大组件用法
  • qt pro工程文件通用宏定义
  • 这次让我们隆重的介绍一下
  • 大语言模型系列-Transformer
  • Node.js 语言特定指南