方法调用栈
什么是方法调用栈?
方法被调用时在内存中的位置被称为方法调用栈
当前正在执行的方法位于调用栈的顶部。当前方法执行完成后,就从调用栈的顶部移除,控制流程返回栈中的前一个方法。当一个新方法被调用后,这个新的方法就放在调用栈的顶部。
在方法调用栈中,正在被调用的方法位于调用栈的顶部,执行完成后从顶部移除,控制流程返回栈中的前一个方法。Java程序第一个被调用的方法是main()方法,是由JVM调用的。只有一个方法调用栈的被称为单线程,Java程序是多线程应用程序,有多个调用栈。
调用方法的作用
方法的调用:
一个方法被调用时,该方法就被放在调用栈的顶部,直到方法执行完成。当一个方法正在执行时,会发生三种情况:
1、方法返回一个值。在这种情况下,一个基本数据类型或引用类型被传回给方法的调用者。
2、方法不返回一个值。在这种情况下,返回值被声明为void。
3、方法抛出一个异常给方法的调用者。
Java是一个严格的面向对象编程语言,在Java中的方法只能出现在类中。没有声明为静态(static)的方法只能在实例中调用。声明为static的静态方法可以不需要实例化一个类,可以在任何时候,任何人调用
创建方法
方法的标签:方法的声明部分
方法的标签中包括:方法名,参数列表--在程序中进行数据的传递(也可以传递对象),返回值的数据类型等
方法标签的作用:通过方法标签我们可以了解到调用一个方法时所需知道的一切
方法的创建格式:访问修饰符(可选修饰符) 返回值类型 方法名 (形式参数列表){};
访问修饰符:public 所有类都可以访问 protected 本类,同包类,子类可以访问 默认(什么都不写) 本类,同包类可以访问 private 只有本类可以访问
可选修饰符:包含static、final等等类的方法中可以有零到多个可选修饰符
返回值类型:分为有返回值(数据类型)和无返回值(void)。Java中可以从方法的返回中返回任何类型的数据
方法名:方法的名称,有效的Java标识符
形式参数列表:方法在调用时,数据可以通过该方法的调用者传递进来。传递进来的数据被赋值到形式参数中。一个形式参数由:一个数据类型+一个标识符。参数与参数之间由,隔开
方法通过形式参数与实际参数之间的值传递进行数值的传递,形式参数(形参):一个方法中包含一个形式参数的列表,用于声明传递到方法中的数据的类型。 实际参数(实参):调用方法时传递给方法中形式参数的数据称为实际参数,用于传递给方法具体的数值
方法调用之间复制数据的过程称为按值调用,若传递的实参是一个大的对象,传递的不是对象本身,而是对象的引用。
方法的重载
定义:在一个类中,有两个或多个同名但是有不同参数列表的方法
作用:简化了方法的编写和使用
用法:只需要方法的形式参数列表不同就可以了,参数个数不同,参数顺序不同,参数类型不同
构造器
定义:在对象实例化时,初始化对象的成员变量的一个特殊方法
作用:当对象使用new关键字实例化时,JVM为对象分配内存,并初始化,以保证对象的数据有意义。
构造器与方法不同之处在于构造器必须满足如下两个属性:1、构造器的名称必须与类名相同。2、构造器不能声明返回值,也不能返回void。
在一个类中没有添加构造器,编译器会给类添加一个默认的构造器。这个默认的构造器用public访问修饰符限定,没有形式参数,而且不做任何事情。如果我们自己在类中添加了一到多个构造器,那么编译器就不会为类添加默认构造器。
使用:当一个对象使用关键字new实例化时,构造器就被调用了。一个类可以有多个构造器,这种情况下,要调用哪个构造器就取决于new运算符所用的实际参数。如果一个类有一个构造器,那么就只有一种方法来初始化该类的一个对象。
构造器内的使用的this关键字,与代表每个对象本身的this引用是不相同的。用this关键字来调用本类中的其它构造器,那么这个this语句必须是本构造器的第一行,否则,会产生一个编译器错误。