静态方法 及值传递

代码块

语句:一条语句,一行代码

代码块:任意条语句,用大括号括起来,作为整体出现

  • 代码块决定了我们变量的作用域,代码块中定义的变量只能作用于代码块,外部定义的变量,可以在代码块中使用

方法

定义

方法就是有名字的一段代码块,方法类似于面向过程语言的函数,在面向过程语言程序就是由多个函数相互调用形成的。方法依附于类。一个类中可以定义多个方法,main就是一个静态方法,jdk官方规定了main这个静态方法作为程序的入口存在。

调用通过类或者对象来调用的。只能定义在类中,方法都是独立的,平等关系。

  • 方法:就是完成特定需求的一段代码,有名字
  • 可以复用,使得代码更简洁,结构清晰
语法
【修饰符。。。修饰符】 返回值类型 方法名 (【数据类型 变量1,数据类型 变量2.。。】){
    语句。。。
    return 返回值;
}
  • 修饰符:static,final,public,用来修饰这个方法,定义了这个方法的属性,目前public static
  • 返回值类型:void表示没有返回值,其他的任意返回都写对应的类型,可以是任意类型
  • 方法名:就是这个方法的名字,小驼峰,见名知意,在同一个类中方法名可以重复,但是如果没有特殊要求,最好不重复,调用的时候就是通过方法名
  • 参数列表:数据类型 变量1.。。,就是你调用方法所需要的变量/数据
  • return:用来返回方法的返回值的。如果方法没有返回值,return可以省略不写,也可以写上。
  • 返回值:就是运行方法得到的数据。
调用
  • 如果是静态方法:通过类名调用,Arrays.sort();也可以通过对象调用,在同一个类中,就可以省略类名不写,直接写方法名
  • 如果是普通方法:只能通过对象调用
分类
  • 有参有返回
int a = nextInt(10);
  • 有参无返回
Arrays.sort(arr);
  • 无参有返回
int a = input.nextInt();
  • 无参无返回
System.out.println();

在能达到需求的同时,怎么简单/对你来讲怎么有利怎么来。

方法的三要素
  • 返回值类型:告诉你调用之后得到的数据类型
  • 方法名:就是给这个方法起的名字
  • 参数列表:调用方法时需要的数据
  • 方法名+参数列表:方法签名
形参、实参
  • 方法的定义:定义一个方法,从无到有,不一定调动,在调用之前就定义
  • 方法的调用:使用这个方法,运行方法
  • 形参:方法定义时写的参数
  • 实参:实际调用过程中传入的参数
值传递(*)

值拷贝:java中只有值拷贝,没有引用拷贝

  • 基本数据类型:形参改变了,实参没有改变,基本数据类型,存在于栈内存中,方法调用过程中,将实参的值拷贝了一份给形参。此时实际形参跟实参只是值相等,在方法中修改了形参的值,实参没有动,实参作用只是拷贝了值给形参。
  • 引用数据类型:形参变了,实参也变了,引用数据类型,保存的实际是堆中数据的地址,方法调用过程中,将实参的值(地址)拷贝了一份给形参,此时实参跟形参值相等。在方法中修改了形参的值对应的堆中的数据。实参没有动,实参的作用只是拷贝了自己的值给形参,但是此时实现根据地址访问堆数据,堆数据已经改变了。
参数

实参跟形参只有值有关系,其他没有关系,就是两个参数,命名只要符合规定就可以,随意。在方法中操作的时候一定注意,是形参,操作的变量只能是它作用域能达到的。

static

静态的,修饰符,有static修饰的方法就是静态方法。static修饰变量就是静态变量。没有呢就是普通方法。

静态代码块中只能调用静态的方法或者静态变量,非静态方法中可以调用任意的。

静态的代码块或者变量都是伴随类产生的。而非静态的伴随对象。

方法的执行顺序
  • 方法的调用:在main

  • 方法之间互相调用形成完整的项目

  • 方法在栈中执行。有入栈操作,开始执行,执行过程中遇到调用其他方法,被调用的方法开始入栈进行统一的操作。直到执行结束以后出栈。回到入栈的地方。(程序计数器)

  • 方法的执行顺序跟定义的顺序没有关系。

    import java.util.*;
    public class Demo{
    	
    	public static void a() {//a入栈后开始执行
    		System.out.println("我是a方法的第一行");//1
    		b();//遇到b方法,b开始执行
    		System.out.println("我是a方法的第三行");//7
    	}//出栈
    	public static void b() {//b入栈
    		System.out.println("我是b方法的第一行");//2
    		c();//遇到c方法,c开始执行
    		System.out.println("我是b方法的第三行");//6
    	}//出
    	public static void c() {//c入栈执行
    		System.out.println("我是c方法的第一行");//3
    		d();//d入栈执行
    		System.out.println("我是c方法的第三行");//5
    	}//出栈
    	public static void d() {//执行
    		d();//
    		a();
    	}
    	public static void main(String[]args) {//入栈
    		a();//中途执行a,a入栈
    	}
    }
    
方法重载
  • 概念:同一个类中,同名不同参的方法,就是方法的重载。
  • 同一个类中发生
  • 两个或者以上方法名必须相同
  • 参数列表不同(参数个数不同,参数类型不同):看个数,个数相同的情况下,看对应位的类型,只要一个不同
  • 同一个类不能有相同名字的方法(特殊:重载)
  • 作用:一般来说,如果同一个类中出现功能相似的方法,方法名相同更好理解,方便调用,少起名字
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值