java面向对象编程——第五章 对象的行为

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引用是不同的。

时间: 2024-10-10 08:56:38

java面向对象编程——第五章 对象的行为的相关文章

java面向对象编程(五)--四大特征之抽象、封装

1.抽象 我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版).这种研究问题的方法称为抽象. 2.封装 封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作. java中实现封装的方法: 案例:不能随便查看人的年龄,工资等隐私[Demo116.java] //封装案例[Demo116.java] public class Demo116{ public static

java面向对象编程(1)-类与对象

1.问题的提出      张老太养了两只猫猫:一只名字叫小白,今年3岁,白色.还有一只叫小花,今年100岁,花色.请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色.如果用户输入的小猫名错误,则显示张老太没有这只猫. //用前面学习过的知识写出代码如下: public class Demo107{ public static void main(String []args){ int a=49;//输入的名字49,50 int cat1age=3; //第一只猫 String

java面向对象编程——第四章 类和对象

OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启动程序流程,随后根据程序流程走向,调用想要的其它过程. 对象是存在的具体实体,具有明确定义的特征和行为. 万物皆为对象,对象因我关注而产生. 面向对象:一种认识事物的方式,注重对事物整体的认知,最符合人类自然的思维习惯. 对象是数据封装的结果. 类是具有相同属性和行为的一组对象的集合. 在软件系统中

java面向对象编程— —第七章 继承

7.1继承的起源 继承(Inheritance),即在面向对象编程中,可以通过扩展(extends)一个已有的类,并继承该类的属性的行为,来创建一个新的类. 已有的类称为父类(也可以称为基类,超类),而新类称为子类(也可以称为派生类). 继承的优点:代码的可重用性:父类的属性和方法可用于子类:子类可以扩展父类的属性和方法:设计应用程序变得更加简单. 7.2 继承的使用原则 观察要使用的类,确定它们之间共同的和特有的属性和行为,将这些共性数据迁移到父类里,便于子类中进行方法和属性的重用. 对于不同

使用Java实现面向对象编程——第五章 异常

1. 尝试通过if-else来解决异常问题: Eg: public class Test2 {       public static void main(String[] args) {             Scanner in = new Scanner(System.in);             -             System.out.print("请输入除数:");             int num2 = 0;             if (in.ha

java 面向对象编程-- 第十三章 反射、类加载与垃圾回收

1.狭义JavaBean规范 Javabean必须包含一个无参数的public构造方法,方便通过反射的方式产生对象. 属性必须都是私有的. Javabean必须包含符合命名规范的get和set方法,以便访问Javabean的属性. Javabean应该是可序列化(serializable)的. 2.反射 在编译时,并不清楚应该加载哪个类.类的加载是在运行期间进行的.通过反射,可以对类进行加载.探知.自审. 可以通过对象.getClass()或者通过类名.class或者通过Class.forNam

java 面向对象编程-- 第15章 集合框架

1.  集合特点:元素类型不同.集合长度可变.空间不固定 2.  java中对一些数据结构和算法进行了封装即集合.集合也是一种对象,用于存储.检索.操作和传输对象. 3.  JCF(Java Collections Framework)是JavaSE中包含的由一组类和接口组成的Java集合框架,其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架,减少程序员处理不同对象集合时的编码量. 4.  集合框架包含三个内容:接口.实现类.算法.

java 面向对象编程 第20章 XML技术解析

1.  XML:extended Markup Language  可扩展标记语言,利用标签和子标签方式描述数据. 2.  声明<?xml version=”1.0”?>版本号 注释<!--    --> 空元素:<x/>标签之间没有内容 3.  每个XML文档必须有且只有一个根元素:根元素是一个完全包括文档中其它所有元素的元素:所有的元素都必须在根元素中定义. 4.  实体在XML中是存储单元,,一个实体可以包含字符串.文件.数据库记录,以及一些其它数据.预定义的符号

java面向对象编程--第十一章 异常处理

1.异常:描述出错信息的对象. 字节码校验时,如发生错误,则会抛出异常. 2.所有异常的父类是Exception,异常可以捕获,可以处理. 所有错误的父类是Error,错误可以捕获,但不能处理. Throwable是Exception和Error的父类. 3.通过try{}catch(Exception e){e.printStackTrace();}可以捕获异常,其中try表示需要检测的代码块,catch表示捕获,Exception e表示创建变量e,如果try块中抛出了异常,虚拟机就用e变量