• 8.19方法调用笔记


    方法的定义、调用、重载

    一、方法

    概念:完成某一功能的程序块相当于其他语言的函数。

    main本身也是一个方法。

    将参数传递给方法(或函数)

    按值调用--表示方法接收的是调用者提供的值

    按引用调用--表示方法接收的是调用者提供的变量地址

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

    --Java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝,特别的是,方法不能修改传递给它的任何参数变量的内容

    参数值和参数变量的内容区别

     1 package B19fangfa;
     2 
     3 public class Test1paixu {
     4     /**
     5      * @param args
     6      */
     7     public static void main(String[] args) {
     8         // TODO Auto-generated method stub
     9         int x = 10;
    10         Test1paixu s = new Test1paixu();
    11         s.san(x);
    12         System.out.println(x);
    13     }
    14 
    15     public int san(int x) {
    16         x = 3 * x;
    17         return x;
    18     }
    19 }

    运行结果为:10

     1 package B19fangfa;
     2 
     3 public class Test1paixu {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         int p = 10;
    11         System.out.println(p);
    12     }
    13 
    14     public void san(int x) {
    15         x = 3 * x;
    16     }
    17 }

    运行结果为:10

    此含义相同,但是书写方法略有不同,并不懂。

     此处分析下具体的执行过程:

    p=10
    x=30

     拷贝

    3倍的值

    1)x被初始化为p值的一个拷贝(也就是10)

    2)x被乘以3后等于30.但是p值还是10

    3)这个方法结束之后,参数变量x不再使用

    --既然改变不了这个p变量的值,那还有何意义了

    --如何才能将输出的结果变做3倍p的值呢

    二、为什么要用方法

    1.代码重用

    2.团队分工合作(做接口实现)

    三、分类

    JDK自带方法

    用户自定义方法

    四、用户自定义方法

    1.定义

    [访问修饰符] 返回值类型 方法名(参数类型1 参数名1,...,参数类型n 参数名n)

    public

    private

    区别

    返回值类型--怎么判断有无返回值

    1).如果没有返回值,必须写void,这是不可以省略的。

    2).如果有返回值,程序中必须有return与返回值类型匹配的变量或者表达式。

    方法名命名规则与变量名一样。

    “骆驼命名法”

    参数可有可无

    参数:参与运算的数据

    在定义的时候--形参

    在调用的时候--实参

     2.分类

    1).是否有参数

    有参数

    无参数

    方法参数

    2).方法参数分类:是否有返回值

    有:基本数据类型(数字、布尔值 )

    有:引用数据类型(对象引用)

    无:void

    定义在类的下面、class里

     一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了------哪里不同了,根本没反应过来好嘛

    对象的引用

    由此可见,实现一个对改变参数状态的方法并不是一件难事,因为方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用一个对象。

    很多程序设计语言提供了俩种参数传递的方式:值调用和引用调用。Java对对象采用的是引用调用,实际上这种理解是不对的(Java中只有传值调用一种方式。Java中的方法参数为那几种基本数据类型的情况跟C++中一样,传入的只是变量的拷贝。而当参数类型为类对象是,则有可能会误以为是传址调用),这里给出一个反例:

     1 package B19fangfa;
     2 
     3 public class Test1paixu {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9     int a =5;
    10     int b=10;
    11     Test1paixu s=new Test1paixu();
    12     s.swap(a,b);
    13     System.out.println(a);
    14     System.out.println(b);
    15     }
    16     public void swap(int a,int b){
    17         int temp=a;
    18         a=b;
    19         b=temp;
    20         }
    21     }

    这并没有实现交换数据,显然该方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。

    这个过程说明:Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递

    引用和调用一样吗

    总结一下java程序设计语言中方法参数的使用情况:

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

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

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

    3.调用

    main方法调用自定义方法

    方法所在类的类名 随便起个名字=new 方法所在类的类名();

    随便起个名字.方法(参数)

    //不管在不在同一个类中,都这么写

    参数是什么

    如果定义是int[] a,参数竟然只要a吗?

    除了main方法,俩个自定义方法互相调用

    1)俩个方法在同一个类 

    a(){

    b();

    }

    2)俩个方法在不同类

    假设a方法在A类,b方法在B类,a方法中调用b方法

    class A{

    a(){

    B XXX=new B();

    XXX.b();

    }

    }

     ------------------------------------------------并不是很透彻

     

    2015-08-19

    23:42:15

  • 相关阅读:
    b_lc_第k个排列(暴搜 / 数学剪枝)
    sql语句大全(2)
    经典SQL语句大全
    存储过程格式
    经典SQL语句大全(实例)非常不错的和excel等文档实例结合的sql
    触发器MSSQL常用操作
    最好的C#学习网站
    C# 反射入门知识
    MSSQL经典语句
    一些很酷的.Net技巧
  • 原文地址:https://www.cnblogs.com/tongx123/p/4743861.html
Copyright © 2020-2023  润新知