11.2.回顾方法的调用
11.2.1静态方法(static)和非静态方法(非static)
例子1
package com.javaStudy.oop;
//先在同级目录下定义了Student类
public class Student {
public static void say(){
System.out.println("学生说话了");
}
public void says(){
System.out.println("学生正在窃窃私语");
}
}
package com.javaStudy.oop;
public class Demo02 {
public static void main(String[] args) {
Student.say();//在同级目录下,可直接找到Student类,且say()方法是static静态方法类,所以可以直接调用Student.say()方法
System.out.println("========");
Student student = new Student();//在同级目录下,可直接找到Student类,但says()方法是非静态方法,所以需要new引用Student类后,再调用方法
student.says();
}
//下面的 a b 方法都是非静态方法 或 都是静态方法既可以相互调用,但如果 一个是static静态方法,一个是非static(非静态方法),则会报错
//原因:static(静态方法) 是和 类 一起加载的,所以当 Demo02类加载的时候,static方法就存在了,而 非static(非静态方法)的方法是跟 对象 有关的,对象创建之后才存在
//简单理解就是:static方法比 非static方法 存在的更早,所以当一个已经存在的方法去调用一个还没有存在的方法,就会报错
public void a(){
b();
}
//类实例化之后才存在
public void b(){
a();
}
}
例子2
package com.javaStudy.oop;
public class Demo03 {
public static void main(String[] args) {
int sum1 = add(1,2); //调用static静态方法:方法一
int sum2 = Demo03.add(2,3); //调用static静态方法:方法二
System.out.println(sum1);
System.out.println("------");
System.out.println(sum2);
}
public static int add(int a, int b){
return a+b;
}
}
11.2.2.值传递和引用传递
-
值传递
package com.javaStudy.oop;
public class Demo04 {
public static void main(String[] args) {
//值传递
int a = 1;
System.out.println(a);
System.out.println("===================");
Demo04.change(a);//虽调用了change方法(没有返回值),将 a的值改变了,但并未返回值,所以 a的值还是不变
System.out.println(a);
System.out.println("===================");
System.out.println(Demo04.changes(a));// 调用了changes方法(有返回值),将 a的值改变了,且返回了值,所 a的值改变了
}
//返回值为空
public static void change(int a){
a = 10;
}
//有返回值
public static int changes(int a){
return a = 10;
}
} -
引用传递
package com.javaStudy.oop;
public class Demo05 {
public static void main(String[] args) {
//引用传递:对象,本质还是值传递
Person person = new Person();
System.out.println(person.name);
System.out.println("-----------");
Demo05.change(person);
System.out.println(person.name);
}
//定义一个方法:Person person 相当于 String person 相当于 int person(定义一个名称要带类型)
public static void change(Person person){
//person是一个对象:指向的---->Person person = new Person(); 这是一个具体的人,可以改变属性!
person.name = "西部开源";
}
}
//一个类里面只能有一个 public class,但可以有多个 class
class Person{
String name;
}