定义方法
public void SetName(String name) {
if(name == null || name.isBlank()){
throw new IllegalArgumentException("invalid name");
}
this.name = name.strip();//去掉首尾空格
}外部代码不能直接读取 private 字段,但可以通过方法间接获取private字段的值。所以一个类通过定义方法
可变参数
可变参数用类型...定义,可变参数相当于数组类型:
class Group {
private String [] names;
public void steNames(String... names) {
this.names = names;
}
}上面的setNames()就定义了一个可变参数。调用时,可以这么写:
var group = new Group();
group.setNames();//不传string
group.setNames("zhangge"); //传入一个string
group.setNames("zhanggee","guoyancha");//传入多个完全可以把可变参数改写成String[]类型:
class Group {
private String[] names;
public void steNames(String[] names) {
this.names = names;
}
}使用时需要自己先构造String[]
参数绑定
基本类型参数绑定
调用方把参数传递给实例方法时,调用时传递的值会按照参数位置一一绑定。
public class Main{
public static void main(String[] args){
var p = new Person();
int n = 20;
p.setAge(n);
System.out.println(p.getAge);
n = 30;
System.out.println(p.getAge);
}
}
class Person {
private int age;
public int getAge() {
return this.age;
}
public void setAge() {
this.age = age;
}
}//运行代码发现修改局部变量n的值,不影响实例中age字段的值。因为setAge()方法获得了参数,复制了n的值,因此p.age的值和局部变量n
的值互不影响。
结论:基本类型参数传递,是调用方值的复制。双方后续各自的修改不对其另外一方造成影响。
引用类型参数绑定
结论:引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方(因为指向同一个对象嘛)。



京公网安备 11010502036488号