滚雪球学Java(37):深入了解Java方法作用域和生命周期,让你写出更高效的代码

2023-09-21 17:00:41

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


前言

  在Java开发中,方法是程序的基本构建块之一。在编写Java代码时,必须了解Java方法的作用域和生命周期。这将有助于您更好地编写高效的Java代码。

摘要

  本文将深入了解Java方法的作用域和生命周期,包括方法的访问修饰符、方法内部变量的作用域、方法的生命周期等。同时,本文还将通过源代码、方法介绍、测试用例等方式,让您更好地理解Java方法的相关知识。

正文

方法的访问修饰符

  Java方法的访问修饰符有public、protected、private和默认四种。

  • public方法可以被任何类和任何包中的其他代码访问。
  • protected方法可以被同一包中的代码访问,也可以被不同包中的子类访问。
  • private方法只能被同一类中的其他方法调用,不能被其他类访问。
  • 默认方法(没有修饰符)只能被同一包中的代码访问。

方法内部变量的作用域

  在Java方法内部定义的变量,只能在该方法中使用。这些变量被称为局部变量。局部变量的生命周期从方法开始执行时开始,到方法执行结束时结束。

方法的生命周期

Java方法的生命周期可以分为四个阶段。

  1. 编译时
    方法的编译时阶段,主要是对方法进行语法分析和编译,生成字节码文件。

  2. 类加载时
      当类被加载时,方法也会被加载到内存中。此时,会为方法分配一块栈空间。在方法被调用时,栈空间会被使用,存储方法中定义的局部变量和方法的执行状态。

  3. 执行时
      当方法被调用时,会创建一个新的栈帧(Stack Frame),用于存储方法的局部变量和执行状态。方法执行完毕后,栈帧会被弹出,释放栈空间。

  4. 卸载时
      当类被卸载时,与之关联的方法也会被卸载。此时,方法中使用的内存空间会被释放。

源代码

public class MethodScopeDemo {
    private int privateNumber = 10;
    protected int protectedNumber = 20;
    public int publicNumber = 30;

    public void publicMethod() {
        int localVariable = 100;
        // 在此处可以访问 privateNumber、protectedNumber 和 publicNumber
        // 无法访问其他类中定义的 private 变量
    }

    protected void protectedMethod() {
        int localVariable = 200;
        // 在此处可以访问 protectedNumber 和 publicNumber
        // 无法访问其他类中定义的 private 变量
    }

    private void privateMethod() {
        int localVariable = 300;
        // 在此处可以访问 privateNumber 和 publicNumber
        // 无法访问其他类中定义的 protected 和 private 变量
    }

    void defaultMethod() {
        int localVariable = 400;
        // 在此处可以访问 publicNumber
        // 无法访问其他类中定义的 protected、private 和默认变量
    }
}

代码方法介绍

  • publicMethod:公共方法,可以被其他类和其他包中的代码访问。
  • protectedMethod:保护方法,可以被同一包中的代码访问,也可以被不同包中的子类访问。
  • privateMethod:私有方法,只能被同一类中的其他方法调用,不能被其他类访问。
  • defaultMethod:默认方法(没有修饰符),只能被同一包中的代码访问。

测试用例

public class MethodScopeDemoTest {
    @Test
    public void testPublicMethod() {
        MethodScopeDemo demo = new MethodScopeDemo();
        demo.publicMethod();
    }

    @Test
    public void testProtectedMethod() {
        MethodScopeDemo demo = new MethodScopeDemo();
        demo.protectedMethod();
    }

    @Test
    public void testPrivateMethod() {
        MethodScopeDemo demo = new MethodScopeDemo();
        demo.privateMethod();
    }

    @Test
    public void testDefaultMethod() {
        MethodScopeDemo demo = new MethodScopeDemo();
        demo.defaultMethod();
    }
}

全文小结

  本文深入了解了Java方法的作用域和生命周期,包括方法的访问修饰符、方法内部变量的作用域、方法的生命周期等。同时,本文还通过源代码、方法介绍、测试用例等方式,让读者更好地理解Java方法的相关知识。掌握了这些知识后,读者可以编写更高效的Java代码。

附录源码

  如上涉及所有源码均已上传同步在 Gitee,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

  Java方法是程序的基本构建块之一,必须了解Java方法的作用域和生命周期。在实际开发中,应选择合适的访问修饰符,定义方法内部的局部变量,合理使用栈空间等,以提高程序的执行效率。同时,还应编写测试用例,保证程序的正确性。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

📣关于我


我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

更多推荐

RS485总线浪涌解决方案!|深圳比创达EMC

在各种通讯方式当中,RS485总线是较为常见的一种,因其接口简单、系统运行稳定和通讯速率高等特点被广泛应用。但由于RS485总线一般传输距离较长,且经常暴露在外,所以非常容易受到电磁干扰,而浪涌干扰已经成为485通信使用中最常遇到的问题。下面通过一个实际案例,来说明RS485总线在防浪涌实验过程中,常遇到的问题以及需要

shell中[[]]与[],=、==和-eq的辨析

1、==、=和-eq在shell中,=和==运算符都可以用于判断两个字符串、两个字符串变量是否相同,==支持模式匹配,而=不支持模式匹配。使用-eq来判断两个整数是否相等。#字符串比较#给变量赋值时,等号前后没有空格,有空格时是条件判断string1=abcstring2=bcd#["$string1"="$strin

基座向量施密特正交化

最近再次细细的阅读了向量施密特正交化,重新系统梳理一下一、正交基地与向量的正交分解二、基化成标准正交基,是什么意思将一个向量空间中的基向量通过某种方式转化为一组标准正交基,是指将原有的基向量进行调整,使得它们满足两个条件:彼此之间两两正交(即内积为零);归一化(长度为1)。这样的转换可以用来简化向量空间中的运算,使得向

Linux 本地Yearning SQL 审核平台远程访问

文章目录前言1.Linux部署Yearning2.本地访问Yearning3.Linux安装cpolar4.配置Yearning公网访问地址5.公网远程访问Yearning管理界面6.固定Yearning公网地址前言Yearning简单,高效的MYSQL审计平台一款MYSQLSQL语句/查询审计工具,为DBA与开发人员

Redis的主从复制,哨兵和Cluster集群

一、Redis的高可用1.1redis高可用的概念在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。高可用的计算公式是1-(宕机时间)/(宕机时间+运行时间)有点类似与网络传输的参数误码率,我们用9的个数表示可用性:2个9:9

Learn Prompt-ChatGPT 精选案例:代码助理

你可以使用ChatGPT进行代码生成、生成测试用例、注释、审查和漏洞检测。代码生成​我们可以让ChatGPT自动生成一个排序算法中的快速排序的Python代码。简单的代码生成对于ChatGPT来说小事一桩。测试用例​用例来源出自StuGRua在待测函数函数定义清晰的情况下,单元测试可以通过ChatGPT来生成。写下列代

C语言学习:16、C语言指针

指针是C语言的精髓,很多人都觉得指针难学,是因为内心对指针有所恐惧,把自己吓退了。一种应用语言能有多难,只要了解了指针的本质,学习起来就超级简单。一、什么是指针1.1、指针就是一种变量,一种特殊的变量,就这么简单。这个特殊体现在,指针中保存的值是内存中的地址。前面了解过int型变量,char型变量,float型变量,它

C#-WinForm-发送邮件

登录QQ邮箱——设置——开启“POP3/SMTP服务”登陆QQ邮箱→打开设置→开启“POP3/SMTP服务”,获取“授权码”简单总结一下:1、使用SmtpClient发送电子邮件是很简单的,只要正确创建了MailMessage对象和SmtpClient就可以很容易的发送出去电子邮件。2、如果电子邮件服务器需要身份验证【

CH2--x86系统架构概览

2.1OVERVIEWOFTHESYSTEM-LEVELARCHITECTURE图中的实线箭头表示线性地址,虚线表示段选择器,虚线箭头表示物理地址2.1.1GlobalandLocalDescriptorTables全局描述符表(GDT)GDT是一个全局的段描述符表,它存储在系统内存中的一个固定位置。通常,GDT被加载

【kafka】kafka命令大全

概述本文将分享一些kafka经常使用的一些命令,不断完善中。管理创建主题,3个分区,2个副本对使用了zookeeper的kafkakafka-topics.sh--create--zookeeper192.168.2.140:2181,192.168.2.141:2181,192.168.2.142:2181--rep

iPhone 15秋季发布会召开,媒介盒子多家媒体持续报道

现如今互联网引流成本越来越高不说,难度越来越大,大多数都是投入巨大,收效甚微。因此,用有限的成本带来高回报的效果成为企业共同的追求。当然,企业想要产品服务引流绝非易事。为什么你的品牌营销不见效?新产品上市要怎么做宣传?盒子以新发布的苹果15为例分析,给你一些启发。1、时机很重要9月13日,苹果秋季发布会如期而至,各大媒

热文推荐