1,定义方法
修饰符 方法返回类型 方法名(方法参数列表) {
若干方法语句;
return 方法返回值;
}
2,private方法示例
class PersonTest{
private String name; // 私有属性
public void setName(String name) { //括号里面表示输入的参数类型
this.name=name; //this.name表示定义的name属性(this不可省略),name表示输入的name
}
public String getName() { //String表示调用到的参数类型
return name; //此处省略this
}
}
public class Main {
public static void main(String[] args) {
PersonTest p1=new PersonTest();
PersonTest p2=new PersonTest();
p1.setName("Alice"); //setname赋值
p2.setName("Tom");
System.out.println(p1.getName()+" is beautiful"); //getname调用
System.out.println(p2.getName()+" is handsome");
}
}
3,方法可以包含0个或任意个参数。方法参数用于接收传递给方法的变量值。调用方法时,必须严格按照参数的定义一一传递。可变参数用**类型…**定义,可变参数相当于数组类型
class PersonTest{
private String[] name;
public void setName(String... name) {
this.name=name;
}
}
public class Main {
public static void main(String[] args) {
PersonTest p1=new PersonTest();
p1.setName("Alice","Lucy","LiLy"); //传入三个值
p1.setName("Alice");//传入一个值
p1.setName();//传入0个值
p1.setName(new String[] {"Alice","Lucy","LiLy"});//传入一个String[]
}
};
4,参数绑定
调用方把参数传递给实例方法时,调用时传递的值会按参数位置一一绑定.
4.1,基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响.
class PersonTest{
private int age;
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
PersonTest p=new PersonTest();
int n = 15; // n的值为15
p.setAge(n); // 传入n的值
System.out.println(p.getAge()); // 15
n = 20; // n的值改为20,但未传入
System.out.println(p.getAge());
}
};
4.2,引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方(因为指向同一个对象)
class PersonTest{
private String[] name;
public String getName() {
return this.name[0] + " " + this.name[1];
}
public void setName(String[] name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
PersonTest p=new PersonTest();
String[] fullname = new String[] { "Homer", "Simpson" };
p.setName(fullname); // 传入fullname数组
System.out.println(p.getName()); // "Homer Simpson"
fullname[0] = "Bart"; // fullname数组的第一个元素修改为"Bart"
System.out.println(p.getName());
}
};
5,构造方法
在创建对象实例时就把内部字段全部初始化为合适的值就是构造方法,创建实例的时候,实际上是通过构造方法来初始化实例的.如示例中定义一个构造方法,能在创建Person实例的时候,一次性传入name和age,完成初始化;
class PersonTest{
private String name;
private int age;
public PersonTest(String name, int age) { //与类名一样的方法就是构造方法
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
public class Main {
public static void main(String[] args) {
PersonTest p=new PersonTest("Alice",12);
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
如果一个类没有定义构造方法,编译器会自动生成一个默认构造方法,它没有参数,也没有执行语句,类似于一个空壳,当有新的构造方法时可以一起执行.如果既要能使用带参数的构造方法,又想保留不带参数的构造方法,那么只能把两个构造方法都定义出来.
class PersonTest{
private String name;
private int age;
public PersonTest() {
}
public PersonTest(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
public class Main {
public static void main(String[] args) {
PersonTest p1=new PersonTest("Alice",12);
PersonTest p2=new PersonTest();
//System.out.println(p1.getName());
//System.out.println(p1.getAge());
}
}
多构造方法
可以定义多个构造方法,在通过new操作符调用的时候,编译器通过构造方法的参数数量、位置和类型自动区分:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this(name, 18); // 调用另一个构造方法Person(String, int)
}
public Person() {
this("Unnamed"); // 调用另一个构造方法Person(String)
}
}
参考文章:
https://www.liaoxuefeng.com/wiki/1252599548343744/1260452774408320