方法的定义

  1. 修饰符
  2. 返回值的类型
  3. break和return的区别
    -break跳出循环
    -return结束方法,返回一个结果
  4. 参数列表:参数类型,参数名
  5. 异常抛出 throws

方法的调用

  1. 自身的调用:递归
  2. 静态方法static
  3. 非静态方法
  4. 形参,实参
  5. 值传递和引用传递
    -JAVA都是值传递
  6. this关键字:调用本类中的方法或者属性

静态方法与非静态方法

  • static静态方法与类一起加载
  • 非静态方法与对象有关,当类实例化为一个对象,它才存在
  • 调用方法的两种方式:类名调用,对象名调用
  • 静态方法可以互相调用
  • 非静态方法也可以互相调用
  • 静态方法不可以调用非静态方法
  • 非静态方法可以调用静态方法

Demo01类

//Demo01类
public class Demo01 {
    //main方法
    public static void main(String[] args) {
        //调用Student类中的静态say()方法
        Student.say();
        //调用Student类中的非静态say1()方法
        //Student.say1();//报错
        //解决方法,实例化new这个类
        new Student().say1();
        //但习惯上new一个对象
        //对象类型 对象名字 = 对象值(为实例化的一个对象)
        Student student = new Student();
        student.say1();
    }
    
    //1.当方法a为非静态,方法b也为非静态,a和b可以互相调用
    //2.当方法a为静态,方法b也为静态,a和b可以互相调用
    //3.当方法a为静态,方法b为非静态,a不可以调用b
    //4.当方法a为非静态,方法b也为静态,a内可以调用b
    
    //非静态方法a
    public void a(){
        b();
    }
    //静态方法b
    public static void b(){
    	//a();//报错
    }

}

Student类

public class Student {
    public static void main(String[] args) {

    }
    //静态方法
    public static void say(){
        System.out.println("学生的静态方法");
    }
    //非静态方法
    public void say1(){
        System.out.println("学生的非静态方法");
    }
}

形参,实参的关系

public class Demo02 {
    public static void main(String[] args) {
        //形参和实参的类型要对应
        System.out.println(Demo02.add(1, 2));//类名.方法名
        System.out.println(add(1, 2));//方法名
    }
    //add方法
    public static int add(int a, int b){
        return a+b;
    }
}

值传递和引用传递

引用传递:传递对象,本质还是值传递

//值传递
public class Demo03 {
    public static void main(String[] args) {
        int a = 1;
        change(a);//方法名
        Demo03.change(a);//类名.方法名
        System.out.println(a);//a = 1
    }
    //无返回值
    public static void change(int a) {
        a = 10;//改变形参a为10
    }
}
//引用传递:传递对象,本质还是值传递
public class Demo04 {
    public static void main(String[] args) {
        //new实例化一个对象
        Person person = new Person();
        //打印对象的属性
        System.out.println(person.name);//null
        //传递了person对象
        change(person);
        System.out.println(person.name);//小乔
    }
    //无返回值,形参为Person类型
    public static void change(Person person) {
        //person是一个对象,指定的是Person类,可以改变属性
        //Person person = new Person();
        person.name = "小乔";//改变了person对象的属性name
    }
}
//定义一个Person类,有一个属性:name
class Person{
    //类属性,变量
    String name;//默认为null
}