【java基础】方法的声明以及参数的调用(按值和引用)

方法是类的行为属性,标志着类所具有的功能和操作。

声明方式

修饰符1 修饰符2···返回值类型 方法名(形式参数表)[throws 异常列表]{

语句;

}

其中对于返回值的方式有两种表达:

 return 表达式;//返回结果表达式的值

 return;//用于无返回值的退出
 

实战演练:杨辉三角输出

import java.util.Scanner;

class Test{

public static int num(int i,int k){

if(k==1||i==k){ return 1;}/*如果列等于1或者列等于行,按照样式输出的应该是1,然后又发现除了1以外的每个数字就是它左右肩上的数字之和,因此,从一行作为开始向下就可以得到每个位置的值,因此采用递归,求每处的值的时候,只需要一直递进到第2层的1 1,然后又回归到第4层的3 3 依次类推到下面位置的值*/

else{

return num(i-1,k-1)+num(i-1,k);        

}

}

public static void print(int row){

for(int i=1;i<=row;i++){

for(int j=1;j<=row-i;j++){

System.out.print(" ");//呈现的样式是左右//对称的样子,所以在每行输出数字的左边输出空格

}

for(int k=1;k<=i;k++){

System.out.print(num(i,k)+" ");//输出每行的数字

}

System.out.print("\n");//输完就换行

}

}

public static void main(String[] args){

Scanner scanner=new Scanner(System.in);

System.out.print("Please enter the rows:");

int row=scanner.nextInt();

print(row);

}

}

 

 

 

参数传递

两种方式:

1.按值传递,就是实参调用方法时将自己的值传给相应的形参,在方法里发挥作用的是形参,而实参没有发挥作用(这个不必多说)

2.当一个对象被当做参数传递的方法就是引用类型的传递

实例讲解:

class User{

private String name;

public String getName(){

return name;

}

public void setName(String name){

this.name=name;

}

}

class Test{

public static void setName(User user){

user.setName("Welcome!");

//user=new User();

//user.setName("Come on!");

}

public static void main(String[] args){

Test test=new Test();

User user=new User();

test.setName(user);

System.out.println(user.getName());

}

}

很显然,最后的结果输出为Welcome!

然而我把注释解除,结果会怎么样呢?

试试就逝世!

结果还是Welcome!并不是我新user.setName("Come on!");

那么原因是什么?

首先我们要清楚,我们利用类实例化一个对象的时候实际上是在堆里创建一个对象,然后在栈里创建一个引用

这个引用指向我们在堆里创建的对象

 

User user=new User();

然后我们调用test.setName(user);方法,实际上是在栈里对原来的user对象的引用做了一次拷贝,然后存放在栈里,引用拷贝,引用指向的对象自然是一样的。都是指向的原对象

我们使用这个拷贝引用的同时也是对原对象的一种修改

结果自然是Welcome!

然而,我把注释解除

public static void setName(User user){

user.setName("Welcome!");

user=new User();

user.setName("Come on!");

}

 我们这里新创建了一个user对象,并将这个拷贝的引用指向我们新建的对象

此时内部的状态是这样的:

我们在user.setName("Come on!");是对对象'所进行的,原对象还是Welcome!

 user的拷贝引用在我new User();之前已经对原来的对象进行了修改Welcome所以返回mian方法的时候实参user.name="Welcome!"而不是Come on!

 

递归

在杨辉三角的有人体现,不用多说

Guess you like

Origin blog.csdn.net/weixin_54438368/article/details/120353507