(一)定义:
Java的方法是为了完成某个操作而组合在一起的语句组。可以理解成 一个固定的程序段,可供重复使用。
定义方法:方法名称、参数列表、返回值类型以及方法体组成的。,其语法形式如下:
返回值类型 方法名称 (参数列表)
{
方法体;
}
①形式参数(简称形参):type name;type1 name1;……typen namen;//其中type ,type1……typen为类型标识符,表示形参类型。name ,name1……namen是形参名; 其main方法的形参为(String [] args),其形参也称命令行参圆,由操作系统在启动程序时初始化。不过命令行参数的数量和类型有特殊要求。函数在没有被调用时是静止的,此时的形参只是一个符号,它标志着在形参出现的位置应该有一个什么类型的数据。函数在被调用时才执行,也是在被调用时才由主调函数将实际参数(简称实参)赋予形参。
参数是有具体含义的,通常代表当前这个函数的功能需要具备的参数。
②返回值和返回值类型:
方法可以有一个返回值,方法的返回值是需要返回给主调方法的处理结果。类型说明
符规定了方法返回值的类型。方法的返回值由return语句给出,格式如下,
return 表达式;
除了指定方法的返回值外,return 语句还有一个作用,就是结束当前方法的执行。
一个方法也可以不将任何值返回给主调方法,这时它的类型标识符为void,可以不写return语句,但也可以写一个不带表达式的return语句,用于结束当前函数的调用。主方法是类的入口点,它定义了程序从何处开始;主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。主方法的语法如下:
public static void main(Stringll args){
//主方法}
在主方法的定义中可以看到其具有以下特性:
①主方法是静态的,所以如要直接在主方法中调用其他方法,则该方法必须是静态的。
②主方法没有返回值。
③主方法的形参为数组。其中args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.len gth获取参数的个数。
(二)方法的调用
变量在使用之前需要首先声明,类似地,方法在调用之前也需要声明。方法声明的形式如下:
类型说明符 方法名(含类型说明的形式参数表) ;
函数参数:
//形参--->创建函数时用的参数(类型修饰的)
//实参--->调用函数时用的参数(没有类型修饰)
所有传参方式都是赋值方式
注意:声明方法时,形参表只要包含完整的类型信息,形参名可以省略;即原型声明的形参表可按下面格式书写:type,type1……typen
声明方法原型之后,可使用方法名(实参列表)调用子方法;
注意:方法调用的时候,形参和实参类型必须一致;不一致会存在强制类型转换 ,如果转换不了程序直接崩掉
实参列表中应给出与方法原型形参个数相同、类型相符的实参,每个实参都是一个表达式,方法调用可以作为一条语句,这时方法可以没有返回值。方法调用也可以出现在表达式中,这时就必须有一个明确的返回值。
调用一个方法时,首先计算方法的实参列表中各个表达式的值,然后主调方法暂停执行,开始执行被调方法,被调方法中形参的初值就是主调方法·中实参表达式的求值结果。当被调方法·执行到return语句,或执行到方法末尾时,被调方法·执行完毕,继续执行主调方法·。
嵌套调用:方法·允许嵌套调用。方法的调用可以通过用一个方法调用另一个方法来实现,这就形成了方法的嵌套调用。例子:
递归调用:方法可以直接或间接地调用自身,称为递归调用。
所谓直接调用自身,就是指在一个方法的方法体中出现了对自身的调用表达式,相关代码
package com.sxt;
import java.util.Scanner;
public class Test {
//主方法: public static void main(String[] args),有且仅有1个主函数
public static void main(String[] args)
{
int i=0;int y=9;int z=4;
System.out.println(max(i,y));
System.out.println(max(max(i,y),z));//简单递归:自己调用自己
System.out.println( squareSum(6,8));
}
public static int max(int num1,int num2)
{
return (num1>num2?num1:num2);
}
public static int square(int num1 )
{
return num1*num1;
}
public static int squareSum(int num1,int num2)
{
return square(num1)+square(num2);//函数嵌套
}
}
(三)方法重载
方法重载是多态性的一种,所谓功能多态性,是指可以向功能传递不同的消息,以便让对象根据相应的消息来产生一定的行为。对象的功能通过类中的方法来体现,那么功能的多态性就是方法的重载。
方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。方法的返回类型和参数的名字不参与比较,也就是说,如果两个方法的名字相同,即使类型不同,也必须保证参数不同。
class A{
int getA(int a,double b)
{
return (int)(a*b);
}
double getA(int a,double b)
{
return (a*b);
}
double getA(int a,float d,float c)
{
return (a*b*z);
}
public class AA{
public static void main(String args[]){
A a=new A();
System.out.println("面积:"+a.getA(10,3.64));
System.out.println("面积:"+a.getA(10.0,8));
}}
(4)方法的参数传递
⒈ 当方法未被调用时,方法的形参并不占有实际的内存空间,也没有实际的值。只有在方法被调用时才为形参分配存储单元,并将实参与形参结合。 当方法被调用时,如果方法有参数,参数必须实例化。即参数变量必须具有具体的值。每个实参都是一个表达式,其类型必须与形参相符(如果不符,则向该参数传递的值的级别不高于该参数的级别)。方法的参数传递指的就是形参与实参结合(简称形实结合)的过程,形实结合的方式有值传递和引用传递。
方法参数一定要有意义,自己十分清楚参数的意义,如解释不了就别写。
注意
数组传参的特殊性:
数字类数组当做函数参数时,一定要传入输入长度。
二维数组传参列数不能缺省。
字符串当做函数参数,可以不需传入长度,因为字符串具有字符串结束标记'\0'
⒉ 引用类型参数的传值
Java 的引用型数据包括我们学习过的对象、数组以及后面将要学习的接口。当参数是引用类型时,“传值”传递的是变量的引用而不是变量所引用的实体。
如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化,因为两个引用型变量如果具有同样的引用,就会用同样的实体,但改变参数的引用不会影响向其传值的变量的引用。
(5)Java中的类方法和实例方法的区别
Java中的类方法: 用static关键字修饰的方法
实例方法:没有用static关键字修饰的方法
类方法在Java源文件被编译成字节码,字节码执行时被加载到栈内存中就已经分配了入口地址,因此类方法可以直接用类名调用也可以用实例调用; 而实例方法在创建对象之前未被分配内存地址,需要实例化后,才能被分配堆内存空间,只能被实例调用。
实例方法只能通过实例对象去引用,类方法即可以通过实例对象又能通过类名去引用。