方法与参数类型

Posted 小陈的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方法与参数类型相关的知识,希望对你有一定的参考价值。

1.有参数有返回值

有参数有返回值方法的定义:

语法:访问修饰符 返回值类型 方法名(形式参数列表){     

                                方法体;     

                                return 表达式;

}

有参数有返回值方法的调用:

语法:数据类型 变量名 = 方法名(实际参数列表);

方法的返回值也称为方法值,通过被调方法中的return 语句实现。

语法:return;或return 表达式;

return 语句是跳转语句,其主要作用如下:  

  • 结束被调方法的执行,返回主调方法。  
  • 返回一个表达式的值,该值将作为方法调用过程中方法的返回值。

方法体中位于return 语句之后的代码将不再执行

  • 返回值传递的时机:在被调方法执行完毕返回主调方法时。
  • 返回值传递的过程:接收返回值的变量 = return 语句之后的表达式的值。
  • 返回值传递的意义:将数据从被调方法传递至主调方法的一种方式。

注意:

  • 方法可以没有返回值,也可以存在返回值,但最多只能存在一个返回值。
  • 方法的返回值可以为变量、常量以及表达式。
  •  在无返回值方法中,方法体内可以没有return 语句,当被调方法执行完毕后,将自动返回至主调方法。也可以使用“return;”语句,结束被调方法的执行,返回主调方法
  • 在有返回值方法中,方法体中必须包含“return 表达式;”语句。
  • 方法体中返回值的数据类型必须与方法中定义时指定的返回值类型相匹配。
  • 使用条件结构时,必须保证每一个分支都包含返回值。

2.参数的数据类型

Java 的数据类型分为值类型和引用类型,这两种类型在作为参数使用时是有区别的。

2.1值类型的参数

当方法的参数是值类型时,因为值类型变量里存放的即变量的值,形参和实参会完成变量值的拷贝。当方法内代码完成形参值的改变时,实参不会同步改变

示例: 修改示例,定义方法实现提薪功能,每位员工的工资涨幅均为20%。

//定义方法实现员工的提薪功能
public void changeValue(int val) {
	System.out.println("方法内改变前" + num);
	val++;
	System.out.println("方法内改变后" + num);
}
MethodParameterDemo mpd = new MethodParameterDemo();
nt num = 100;
System.out.println("调用方法前" + num);
mpd.changeValue(num);
System.out.println("调用方法后" + num);

值类型的参数,形参改变不会影响实参。 

使用return关键字返回改变后的形参即可。

 2.2 引用类型的参数

  •   Java中的引用类型变量里存储的是对象的内存地址,通过内存地址可以访问到对象的属性和方法。  
  • 当引用类型变量完成相互赋值时,即完成对象地址的拷贝,而非对象属性的拷贝。

示例:

public class Person {
	int id;
	String name;

	public Person() {
	}
	public Person(int id, String name) {
		this.id = id;
		this.name = name;
	}
}
public static void main(String[] args) {
	Person p1 = new Person(1, "zhangsan");
	Person p2 = p1;
	System.out.printf("改变前p1的名字是%s,p2的名字是%s\\n", p1.name, p2.name);
	p2.name = "lisi";
	System.out.printf("改变后p1的名字是%s,p2的名字是%s\\n", p1.name, p2.name);
}

Person类型为引用类型。变量p1里存放的是内存地址,赋值时两个变量里的地址相同,指向同一个对象。 

  当我们将引用类型作为方法参数使用时,因为参数的数据类型为引用类型,变量里存放的是对象的内存地址,所以形参和实参实际是同一个对象,改变实参的值,形参也会改变。

示例:

 public void changeName(Person p){
        if(p != null){
          p.name = " 宫城诗 ";
        }
 }

 Person p1 = new Person(1, " 程旭媛 ");
 System.out.println(" 调用方法前 p1 的姓名为 "+p1.name);
 MethodParameterDemo2 mpd2 = new MethodParameterDemo2();
 mpd2.changeName(p1);
 System.out.println(" 调用方法后 p1 的姓名为 "+p1.name);

 

有参方法的调用实际就是实参为形参赋值的过程,形参和实参取值是否同步取决于参数的数据类型,当参数是值类型时,形参和实参的取值是不同步的,当参数是引用类型时,形参和实参的取值是同步的。

以上是关于方法与参数类型的主要内容,如果未能解决你的问题,请参考以下文章

在代码片段中包含类型转换

Swift6-函数

更新片段参数的最佳实践?

java基础3-重载+命令行传参+递归+数组+排序

Java初识方法

java 循环变量