3.3 语句块
1、用花括号扩起的任意数量的java语句 ,语句块中定义的变量作用域仅限于语句块当中
2、语句块能够使用外部变量,但是外部不能使用语句块中定义的变量。
3.4 方法:带名字的语句块
1、方法定义:用来完成特定功能的代码片段,类似于其他语言的函数。
2、方法声明格式:[修饰符1 修饰符2] 返回值类型 方法名(参数类型1 参数名称、参数类型2 参数名称···){ java语句(方法体 return 返回值)}
3、方法的详细说明
①形式参数:在方法声明时用于接收外界传入的数据
②实参:调用方法时实际传给方法的数据
③返回值:方法在执行完毕后返还给调用它的数据
④返回值类型:事先约定的返回值的数据类型,⭐如无返回值,必须显示指定为void
4、注意
①实参的数目、数据类型和次序都必须相匹配
②return语句中止方法的运行并指定要返回的数据类型
③Java进行方法调用传递参数时,遵循值传递的原则(传递的都是数据的副本)
④基本类型传递的是该数据的copy值
⑤引用类型传递的是该对象引用的copy值,但指向的是同一个对象
⑥不能在一个方法内部定义方法
⑦参数如果没有,小括号可以留空
⑧方法调用之后,没有调用就不会执行,要想执行就需要调用它
⑨方法中的参数可以与方法名重名,主函数中的变量名也可以与方法名相同
5、调用方式
①单独调用。这种方法无法使用方法的参数值
②打印调用。这种方式可以将方法的返回值直接打印
③赋值调用。这种方式可以将方法的返回值赋给一个变量,需要注意数据类型必须对应
6、调用流程
根据名称找到方法==》值传递原则下参数传递==》执行方法体==》返回结果
5、值传递原则
①基本数据类型,传递的是数据的拷贝 。“值传递”,在这种方式下,被调用对象对新数据的改变不影响源数据的取值,如基本类型的传递。
②引用数据类型,传递的是传递的引用地址的拷贝,而不是该对象本身 。被调用对象新数据的改变影响源数据内容,因为新数据和源数据的引用虽然不同但却指向同一数据对象,如类型对象的传递。
3.5 方法的重载
⭐重载的方法,实际上是完全不相同的方法,只是名称相同而已
1、构成重载的条件
形参类型不同
//参数的类型存在差异会造成方法重载
public static double add(double n1,int n2) { //加了public可以被类随意调用
double sum = n1+n2;
return sum;
形参个数不同
//形参个数存在差异会造成方法重载
public static int add(int n1,int n2,int n3) { //加了public可以被类随意调用
int sum = n1+n2+n3;
return sum;
}
形参类型顺序不同
//参数的类型顺序不同会造成重载
public static double add(int n2,double n1) { //加了public可以被类随意调用
double sum = n1+n2;
return sum;
}
2、不构成重载的情况
①只有返回值不同不构成方法的重载
//编译错误,只有返回值不同不会构成重载,因为不知道返回什么
/*
public static double add(int n1,int n2) { //加了public可以被类随意调用
double sum = n1+n2;
return sum;
}
*/
②只有形参的名称不同,不构成方法的重载
/*
//编译错误,只有参数的名称不同也不会构成重载
public static int add(int n2,int n1) { //加了public可以被类随意调用
int sum = n1+n2;
return sum;
}
*/
3.6 递归结构:自己调用自己
1、递归结构的组成
①递归头:什么时候不调用自己,如果没有递归头,则程序将陷入死循环当中。
②递归体:什么时候需要调用自己的方法。
2、递归缺陷:占用大量系统堆栈,内存耗用多,消耗时间长
/**
* 测试递归调用之阶乘
* @author 14323
*
*/
public class TestRecursion02 {
public static void main(String[] args) {
long a1 = System.currentTimeMillis();//获取当前时间
System.out.println(jieCheng(10));
long a2 = System.currentTimeMillis();
System.out.println(a2-a1);//获取程序运行时间
}
static int jieCheng(int a){
if(a==1) {
return a;
}else {
return a*=jieCheng(a-1);
}
}
}