代码块
语句:一条语句,一行代码
代码块:任意条语句,用大括号括起来,作为整体出现
- 代码块决定了我们变量的作用域,代码块中定义的变量只能作用于代码块,外部定义的变量,可以在代码块中使用
方法
定义
方法就是有名字的一段代码块,方法类似于面向过程语言的函数,在面向过程语言程序就是由多个函数相互调用形成的。方法依附于类。一个类中可以定义多个方法,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入栈 } }
方法重载
- 概念:同一个类中,同名不同参的方法,就是方法的重载。
- 同一个类中发生
- 两个或者以上方法名必须相同
- 参数列表不同(参数个数不同,参数类型不同):看个数,个数相同的情况下,看对应位的类型,只要一个不同
- 同一个类不能有相同名字的方法(特殊:重载)
- 作用:一般来说,如果同一个类中出现功能相似的方法,方法名相同更好理解,方便调用,少起名字