Java学习总结——方法
1.什么是方法,如何定义?
方法是语句的集合,在一起用于实现某一功能,包含于类或对象中。
方法的定义:修饰符 方法返回类型 方法名(参数列表){若干方法语句; return 返回值}
2.方法参数
方法可以包含0个或任意个参数。方法参数用于接收传递给方法的变量值。调用方法时,必须严格按照参数的定义一一传递。
class Person {
...
public void setNameAndAge(String name, int age) {
...
}
}
//调用这个setNameAndAge()方法时,必须有两个参数,且第一个参数必须为String,第二个参数必须为int
Person Jimmy = new Person();
Jimmy.setNameAndAge("slipy",47);
可变参数(不定项参数)
可变参数用 参数类型 ... 来定义,相当于数组。
一个方法只能指定一个可变参数,不定项参数必须是参数列表的最后一项。
class Group {
private String[] names;
public void setNames(String... names) {
this.names = names;
}
}
Group Lawers = new Group();
Lawers.setNames("Jimmy","Kim","Howard");
3.构造方法
用于对实例进行初始化的方法,实例在创建时会通过new操作符调用构造方法。
构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。
如果一个类没有定义构造方法,编译器会自动为我们生成一个默认构造方法,它没有参数,也没有执行语句。果我们自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法
public class Main {
public static void main(String[] args) {
Person p = new Person("Xiao Ming", 15);
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
class Person {
}
4.方法重载
特征:在同一个类中多个方法采用同一个方法名,但是参数不同。
用途:例如对一个实例进行初始化采用构造方法时,可以对默认的无参构造方法进行overload以传入属性,根据几种可能传入属性的个数不同的情况,重载几种不同的构造方法来对实例初始化。
5.Java的参数绑定
值传递(pass - by - value)机制
-
基本数据类型:
- 当基本数据类型(如
int
、double
、boolean
等)作为方法参数时,传递的是该数据的一个副本。 - 这意味着在方法内部对参数的修改不会影响到方法外部原始变量的值。
- 当基本数据类型(如
-
引用类型数据
-
当引用数据类型(如对象、数组等)作为方法参数时,传递的是对象的引用(即内存地址)的副本。
-
这意味着在方法内部可以通过这个引用访问和修改对象的属性。但是,如果在方法内部重新赋值引用本身,不会影响到方法外部的引用。
class Person { String name; public Person(String name) { this.name = name; } } public class Main { public static void main(String[] args) { Person person = new Person("Alice"); modify(person); System.out.println(person.name); // 输出为"Bob" } public static void modify(Person p) { p.name = "Bob"; // 如果这里重新赋值,如p = new Person("Charlie");,则不会影响main方法中的person } }
-
-
String类型
-
当对
String
对象进行操作(如拼接、替换等)时,实际上会创建一个新的String
对象。在上述modify
方法中,虽然传入的是String
引用的副本,但由于尝试对其赋值新的String
值,实际上是让方法内的引用指向了一个新创建的String
对象,而不会影响到方法外部的String
引用。public class Main { public static void main(String[] args) { String str = "Hello"; modify(str); System.out.println(str); // 输出仍然是"Hello" } public static void modify(String s) { s = "World"; } }
-