静态方法 static :可以直接通过 类名.方法名 调用
非静态方法:需要实例化类进行调用 new 类.方法名
public class Demo02{
public static void main(String[] args) {
// 静态方法调用
Student.talk();
// 非静态方法调用 需要先实例化类
// 对象类型 对象名 = 对象值;
Student student = new Student();
student.say();
}
}
// 学生类
public class Student {
// 非静态方法
public void say() {
System.out.println("学生说话了");
}
// 静态方法 static
public static void talk() {
System.out.println("学生说话了");
}
}
注意:
静态方法调用静态方法、非静态方法调用静态方法和非静态方法是没问题的。
但是静态方法调用非静态方法是会报错的。因为静态方法和类一起加载,而非静态方法需要类实例化后才存在。
public class Demo03 {
public static void main(String[] args) {
// 实际参数和形式参数的类型要对应!
int add = Demo03.add(1, 2);
System.out.println(add);
}
public static int add(int a, int b) {
return a+b;
}
}
// 值传递
public class Demo04 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
Demo04.change(a);
System.out.println(a);
}
// 返回值为空
public static void change(int a) {
a = 10;
}
}
运行结果:
这就是值传递,虽然在 change 方法中把10赋值给了 a ,但只是在 change 方法中赋的,并没有传递到主方法,所以在主方法中 a 仍是 1
// 引用传递:对象,本质还是值传递
public class Demo05 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name); // null
Demo05.change(person);
System.out.println(person.name); // 秦疆
}
public static void change(Person person) {
// person 是一个对象:指向的是 Person person = new Person();
// 这是一个具体的人,可以改变属性!
person.name = "秦疆";
}
}
// 定义了一个 Person 类,有一个属性 name
class Person {
String name; // null
}
运行结果: