5.1 方法调用栈

当一个方法被调用时,将导致控制流程跳转到被调用的方法。然后,控制流程执行方法中的语句。当然,被执行的方法可能会调用其它方法,导致控制流程跳转到其它方法。所有的方法调用都维护在一个称为调用栈的结构中。当前正在执行的方法位于调用栈的顶部,当前方法执行完成后,就从调用栈的顶部移除,控制流程返回栈中的前一个方法。当一个新方法被调用后,这个新的方法就放在调用栈的顶部。

在java程序中,第一个被调用的方法就是main(),该方法是JVM调用的。因此main()方法总是在调用栈的底部。

5.2 调用方法

当一个方法被调用时,该方法就放在调用栈的顶部,直到方法执行完成。当一个方法正在执行时,会发生三种情况:

  • 方法返回一个值。在这种情况下,一个基本类型或引用类型被传回给方法的调用者。
  • 方法不返回一个值。在这种情况下,返回值被声明为void。
  • 方法抛出一个异常给方法的调用者。

5.3 方法签名

通过方法签名,我们可以了解到调用一个方法时所需要知道的一切。方法的签名包括方法名、参数列表、返回值的数据类型等信息。

按照声明方法时出现的顺序,列出方法签名中每个部分如下:

  • 访问修饰符。访问修饰符的可能值包括public、private、protected或默认访问修饰符(即没有访问修饰符)。public访问修饰符允许从任何地方调用该方法。private访问修饰符意味着除了在类内部以外,没有人可以调用它。protected访问修饰符以及默认访问修饰符分别适用于继承和包。
  • 可选修饰符。方法签名的下一个部分是可选的修饰符,包括static、fina、abstract、native以及synchronized。类的方法可以不使用这些可选修饰符,也可以使用多个修饰符。

*访问修饰符和可选修饰符的次序是随意的。但是java程序员习惯将访问修饰符放在可选修饰符前面。

  • 返回值。方法签名必须包括返回值的类型。如果方法不需要返回一个值,就使用void,否则就指定返回值的数据类型。
  • 方法名。方法名必须出现在返回值之后。方法名可以是任何有效的java标识符。java命名惯例要求方法是混合大小写的驼峰法则,即方法名的第一个单词的第一个字母为小写,其它单词的第一个字母为大写。如:toString、getDay。
  • 形式参数列表。在方法名的后面必须是用一对括号括起来的形式参数列表。方法被调用时,数据可以通过该方法的调用者传递进来。这个传递进来的数据被复制到形式参数中,一个形式参数由一个数据类型和一个标识符组成。
  • 抛出的异常列表。方法可以抛出一个异常给方法的调用者。

5.4形式参数和实际参数

一个方法的签名包括一个形式参数(Parameter)的列表,形式参数列表用于声明传递到方法中的数据的类型。传递给形式参数的数据称为实际参数(Arguement)。当方法被调用时,实际参数必须传递给形式参数列表中的每个形式参数。

5.5按值调用

当实际参数传递给形式参数时,实际参数的数据被复制给形式参数。在编程中,在方法调用之间复制数据的过程称为按值调用。

在java中,我们不需要指定要传递的实际参数使用按值调用,因为它是自动发生的,实际上也是唯一的选择。其它编程语言中可能会使用按引用调用或按指针调用,这种情况下实际参数不是复制给形式参数。在java中,不能用按引用调用或按指针调用。不管传递给方法的实际参数是什么类型,相关的形式参数都会得到该数据的一份拷贝,这就是按值调用的工作原理。

5.6 方法重载

java中允许方法被重载。当一个类有两到多个同名但是有不同参数列表的方法时,就是方法重载。多个方法有相同的名字看起来是不必要的,但是方法重载在java及其他编程语言中使用却很频繁。

5.7 构造器

构造器是类中的一个特殊的方法,该方法在对象实例化时被调用。构造器的用途是当对象实例化时,初始化对象中的成员变量。

构造器与方法不同之处在于构造器必须满足如下两个属性:

  • 构造器的名称必须与类名相同;
  • 构造器不能声明返回值,也不能返回void。

当为类添加多个构造器时,应用方法重载的规则。每个构造器必须有一个唯一的形式参数列表,以与其它构造器相区别。

新建一个对象时,Object nn=new Object();其中括号就是调用构造器。

如果我们编写了一个类,但是在类中没有添加构造器,编译器就会给类添加一个默认的无参无方法的构造器。当一个对象使用关键字new实例化时,构造器就被调用了。一个类可以有多个构造器,这种情况下,要调用哪个构造器就取决于new运算符所用的实际参数。

为了避免重复代码,我们可以用所有的构造器调用一个特定的构造器,让这个特定的构造器完成重复代码的工作,在构造器中,可以使用关键字this来调用同一个类中的其它构造器。如果一个构造器用this关键字来调用本类中的其它构造器,那么这个this语句必须是本构造器的第一行,否则会产生编译错误。

在java中,this关键字有两种不同的用处,构造器内的使用的this关键字,与代表每个对象本身的this引用是不同的。

最新文章

  1. Angular初步
  2. python3.5 正则表达式
  3. (1-1)文件结构的升级(Area和Filter知识总结) - ASP.NET从MVC5升级到MVC6
  4. linux下用户账户切换
  5. wcf服务与web发布时无法访问 几种解决办法
  6. iOS开发 字符串添加行间距
  7. PHP通过IP 获取 地理位置(实例代码)
  8. HDU2094(产生冠军)题解
  9. solr 从零学习开始
  10. 阿里云server该数据光盘安装操作
  11. Docker 安装及问题处理
  12. 激活OFFICE2010时,提示choice.exe不是有效的win32程序
  13. JAVA 键盘输入数组,输出数组内容和最大值、最小值
  14. SQL Server元数据损坏(metadata corruption)修复
  15. python一些好文章链接收藏
  16. 181102 Python环境搭建(安装Sublime Text3)
  17. Python+selenium 2【测试报告】
  18. javascript面向对象精要第五章继承整理精要
  19. ldconfig , ldd 与 LD_LIBRARY_PATH 之间的关系
  20. ibatis.net:第三天,Insert

热门文章

  1. mac系统如何进行剪切
  2. js addEventListener attachEvent
  3. sciencesoftware科学软件
  4. Nginx基础知识之——配置文件信息(检查配置文件是否正确)
  5. SQLserver批量删除空表
  6. android实现系统电话通话过程中自动感应黑屏
  7. Java中去除StringBuffer最后一个字符
  8. ttttttttttt
  9. Android控件_TextView(显示文本框控件)
  10. 如何使div左右倾斜