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

第5章-第3节-Java中对象的封装性以及局部变量、this、static

1、局部变量

【问题1】:什么是局部变量?
答:定义在局部位置的变量就是局部变量。

【问题2】:什么是局部位置?
答:方法的形参位置、方法体的内部。

【位置关系图】:
class Xxx {
    //成员位置
    public ...(局部位置) {
        //局部位置
    }
    //成员位置
}

作用:限制变量的使用范围


成员变量和局部变量的区别:

1).代码定义位置

成员变量:定义在类的成员位置;
局部变量:定义在类的局部位置;

2).作用域

成员变量:作用域大,可以在整个class的大括号内部被使用;
局部变量:作用域小,只能在定义的作用范围内被使用;

3).内存所在位置

成员变量:在堆中;
局部变量:在栈中;

4).默认值

成员变量:有默认值;
局部变量:没有默认值;

5).生命周期现象

成员变量:随着对象在堆中被创建也一并生成,随着对象被gc回收一并被清理;
局部变量:随着方法进栈在栈中创建空间区域,随着方法的弹栈也一并被回收;


2、类和对象的关系

搭建场景:

    对象:某人、某车、某房子...

    类型:老师(Teacher)

类型:
    由多个对象共性内容进行抽取得到的抽象描述,称为:类型;
    类可以理解为一张设计图,创建对象的模板。

对象:
    通过类的实例化得到,在内存中占用资源 ==> 实实在在的个体;
    一旦得到了对象就可以访问类中的成员完成需求。


3、面向对象特性之封装性

生活层面:食品、快递、机箱...

作用:提高安全性

程序层面:
    1)、类、方法
    2)、私有化与隐藏

关键字:private
实例化对象完毕后,使用对象名.属性名的方式为对象属性进行显示赋值操作,
很有可能赋的值会违背生活的逻辑和常态 ==> 数据不安全
所以我们考虑没收外界对象名访问属性的权利,私有化该属性 ==> 使用private修饰
在本类中提供外界访问属性的一组公共的方法(getter&setter)
格式如下:
    getter方法
        public 数据类型 get属性名(){
            return 属性名;
        }

    setter方法
        public void set属性名(数据类型 形参名){
            属性名 = 形参名;
        }

举例:
    属性:private double money;

    getter方法:
        public double getMoney(){
            return money;
        }

    setter方法:
        public void setMoney(double m){
            money = m;
        }

【结论】:
    在之后的学习和开发环境下,绝大多数情况,类中的属性都需要被私有化,
    并且提供对应的getter&setter方法,记住:上述两个方法内部都不需要提供数据合理性校验操作


4、this关键字

使用在三个领域/三个作用:

1)、记录了正在被创建或者已经创建完毕对象的内存地址;
2)、区分同名的成员变量和局部变量;
3)、本类重载构造方法之间相互调用。

5、this关键字

第三个作用:本类构造方法之间相互调用

格式:
    this(...);

注意:
    1)、构造方法内部调用本类重载构造,只能在首行位置进行调用
    2)、构造方法之间相互调用不能形成闭合回路


6、static关键字

解释:静态的

核心理解:
    1)、静态的成员和类有关,非静态的成员和对象有关;
    2)、类加载要远远早于对象加载 ==> 先有类,后有对象;
    3)、早出现的不能调用晚出现的,晚出现的可以调用早出现的。

修饰的领域:

1)、修饰方法

称为:静态方法、类方法


格式:
    类名.静态方法名(...);

好处:
    不依赖于对象,即不需要创建对象,类名直接调用
    理解:
        1)、代码定义更加简洁;
        2)、更加节省内存资源,提高开发效率。

【问题】:什么方法需要设计为静态方法,什么方法需要设计为非静态方法?
      答:在设计自定义方法的过程中:
      发现方法体中不需要访问调用非静态成员(属性、方法),则该方法可以设计为静态方法,
      返之一旦方法体中有访问调用非静态成员(属性、方法),则该方法就必须设计为非静态方法。


2)、修饰属性

称为:静态属性、类属性

访问静态属性的格式:
    类名.静态属性名

好处:
    静态属性和类有关,不依赖于对象,不需要创建对象
    理解:
        1)、代码定义更加简洁;
        2)、更加节省内存资源,提高开发效率。

【问题】:什么属性可以被定义为静态属性,什么属性可以被定义为非静态属性?
      答:某属性对于该类所有对象都是唯一的值,则该属性可以被定义为静态属性;
      否则就必须定义为非静态属性。

本电子书目录:《Java基础的重点知识点全集》

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

相关文章:

  • IP应用场景的规划
  • 27 redis 的 sentinel 集群
  • 计算机网络 网络安全技术
  • WebAssembly 的魅力:高效、安全、跨平台(下)
  • 二维码智慧门牌管理系统升级:确保公安机关数据安全无忧
  • Golang leetcode59 螺旋矩阵
  • 深度学习(Deep Learning) 简介
  • 服务器raid中磁盘损坏或下线造成阵列降级更换新硬盘重建方法
  • Ubuntu 常用命令之 exit 命令用法介绍
  • 依托亚马逊云科技构建韧性应用
  • Prometheus-JVM
  • flink sql1.18.0连接SASL_PLAINTEXT认证的kafka3.3.1
  • pytorch张量的创建
  • Web自动化测试工具的优势分析
  • 黑豹程序员-读properties属性文件本地正常,打包jar后运行出错
  • PyQt6 QTimer计时器控件
  • Vue:defineAsyncComponent(异步组件)、component(动态组件)、keep-alive(缓存组件)
  • 14 款最佳文件恢复软件 [2024 年最佳精选工具]
  • Redis基础篇-004 Redis的Java客户端
  • 【数据结构和算法】---栈和队列的互相实现
  • 机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM
  • GO设计模式——17、解释器模式(行为型)
  • 基于SSM的大学生兼职平台的设计与实现
  • Ignite内存配置
  • 前端基础vue路由懒加载
  • C++系列第九篇 数据类型下篇 - 复合类型(指针高级应用)
  • python三大开发框架django、 flask 和 fastapi 对比
  • html基础2
  • 基于博弈树的开源五子棋AI教程[5 启发式搜索]
  • JavaScript原型,原型链 ? 有什么特点?