第五天 java

什么是方法

java方法是语句的集合,他们在一起执行了一个功能.,比如司机开车,老师教书等

方法是解决一类问题的步骤的有序组合

方法在类和对象中

方法在程序中被创建,在其他地方被引用

方法的优点

使程序变的更加简短清晰;

有利于维护

提高程序开发效率

提高代码的重(cong)用性,一次编写多吃使用

方法的定义

扫描二维码关注公众号,回复: 2545477 查看本文章

一般情况下定义一个方法如下 

修饰符 返回类型 方法名(参数类型 参数名,参数类型 参数名2){
    ...
    方法体
    ...
    return 返回值;
}


修饰符

可选的,告诉编译器如何编译方法,定义了方法的访问类型.

方法的修饰符分为访问控制修饰符和非访问控制修饰符.修饰符在之后具体学习.

返回类型 方法的返回值类型,如果方法不返回任何值,为void.
参数类型 用于限定调用方法时传入数据类型,
参数名 一个变量用于接收调用方法接收的参数.
return 

用于结束方法并且返回方法指定类型的值  .方法返回值必须为方法声明的反复类型,

如果没有返回值也就是说 返回类型为void,此时return可省略.

返回值
被renturn语句返回的值,返回给调用者.
方法体: 方法体包含具体的语句,定义该方法的功能。

参数列表

(参数类型 参数名1,参数类型 参数名2)

用于描述方法被调用时需要接受的参数类型. 参数是可选的,可以不包含任何参数只写();
方法名 自定义的名字,但要符合命名规范,最好使用 lowerCamelCase 风格,必须遵驼峰形式

例子:

public static int age(int age){...}


多个参数

static float getnumber(float a,float b){...}


方法的调用

java支持两种方法调用方法:

当程序调用方法的时候,就把控制权交给了被调用的方法,当被调用的方法的返回语句执行或者到达方法体闭括号时候交还给程序.

当方法返回一个一个值的时候,方法调用通常被当作一个值;例如

调用方式:对象名.方法名

int larger = max(30, 40);

当方法的返回值是void,方法调用一定是一条语句例如:

System.out.println("hello world!");

实例:定义了一个getArea()方法用于求矩形的面积,参数x和y分别用于接收调用方法时传入的高和宽,return语句用于返回计算所得的面积。在main()方法中通过调用getArea()方法,获得矩形的面积,并将结果打印。 方法println返回void。下面的调用是个语句:


public class MethodDemo01 {
    public static void main(String[] args) {
    int area = getArea(3, 5); // 调用 getArea方法
    System.out.println(" The area is " + area);
}
// 下面定义了一个求矩形面积的方法,接收两个参数,其中x为高,y为宽
public static int getArea(int x, int y) {
    int temp = x * y; // 使用变量temp记住运算结果
    return temp; // 将变量temp的值返回
    }
}


main 方法的头部是不变的,如例子所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表明参数是字符串数组。

方法的调用过程

从mian方法入口,开始执行程序

从mian方法的代码开中开始执行程序

调用方法getArea,传递参数3和5进去.(参数传递时有顺序的) 

getArea方法开始执行

计算temp=w*h=30

return temp;将return后面的数据返回给方法的调用者.

在方法定义后,参数变量w,h没有具体的数值,在调用的时候,数值由传递着传递过来.

方法的参数变量称为形式参数,形参 intgetArea(int w,int h) wh为形参 

而调用方法的时候,传递的数据为实际参数,就是实参int a= getArea(a,b) ab就是实参

JVM将内存进行了划分,分为了5个区域

寄存器:内存和CPU之间

本地方法栈:JVM调用了系统的功能,

方法和数据共享区:运行时期claa文件进去的地方

方法栈:所有的方法运行的时候进入的时候内存

堆:存储容器和对象.比如数组

方法调用内存图

程序运行时期,必须要进入内存

运行文件后,编译的class文件进去内方法和数据共享区

JVM虚拟机调用mian方法,

main方法进发方法栈开始运行

mian方法中调用方法getArea并传递参数

getArea方法进栈运行

计算结果返回调用者.

方法getArea结束出栈,释放内存资源

方法定义的注意事项:

方法不能定义在另一个方法里面

写错方法名

写错了参数列表

方法重复定义问题

调用方法的时候,返回值是void,不能卸载输出语句中

方法参数

按值传递:方法接受的是调用者提供给的值

按引用传递:方法接受的是调用者提供的变量对应的变量值.

一个方法可以修改传递引用所对应的变量值,而不能更改传递值所对应的变量值

java程序设计语言总是采用按值调用

方法参数共有两种:

基本数据类型:

对象引用:

基本数据类型例子:

publci static void value(int x){

    x = 3 * x;

}

调用这个方法

int a = 10;

value(a)

//结果a为10

无论这样,调用这个方法之后,a的值还是10,具体过程

形参x被初始化a值的拷贝(也就是10)

x乘3后等于30 但是a任然是10;

方法结束后 x不在使用

一个方法不能修改一个基本数据类型的参数,

对象引用例子


public class MethodDemo_3{

      public static void main(String[] args){

            int[] arr = {1,2,3,4};

            System.out.println(arr[2]); // 3

            change(arr);

            System.out.println(arr[2]); //  100

      }

      

      public static void change(int[] arr){

            arr[2] = 100;

      }

      

      

}



总结:一个方法不能修改一个基本数据类型的参数(数值型和布尔型)

        一个方法可以改变一个对象参数的状态

        一个方法不能让对象引用一个新的对象

方法重载

如果多个方法有相同的名字,不同的参数,便产生了重载.编译器必须挑选具体执行那个方法,他通过各种方法给出的参数类型与特定方法调用所

使用的类型进行匹配,来挑选出相应的方法.如果编译器找不到匹配的参数,或者找出多个可能的匹配,就会产生编译时错误.这个过程称为重载解析,

java运行重载任何的方法.

因此要完整的描述一个方法需要指出方法名和参数类型,这个叫做方法的签名.

返回类型不是方法签名的一部分也就是说,不能有两个名字相同,参数类型也相同却返回不同类型的方法

public class MethodOverLoadDemo{

      public static void main(String[] args){

            //对于重载的调用,根据参数传递进行区分

            //System.out.println();

            double sum = getSum(2.3,3.5);

            System.out.println(sum);

      }

      /*

        对参数求和,利用方法的重载特性

      */

      public static int getSum(int a,int b){

            System.out.println("两个int参数");

            return a+b;

      }

      public static int getSum(int a,int b,int c){

            System.out.println("三个int参数");

            return a+b+c;

      }

      public static double getSum(double a,double b){

            System.out.println("两个double参数");

            return a+b;

      }

      /*

         定义方法,对参数求和

         参数,没规定几个,数据类型

      

      public static int getSum(int a ,int b){

            return a+b;

      }

      

      public static double getSumDouble(double a,double b){

            return a+b;

      }

      public static int getSum3(int a,int b, int c){

            return a+b+c;

      }*/

}





猜你喜欢

转载自blog.51cto.com/10760006/2154701