Java基础学习笔记——面向对象

11.2.回顾方法的调用
11.2.1静态方法(static)和非静态方法(非static)
  1. 例子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();
   }
}
  1. 例子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.值传递和引用传递
  1. 值传递

    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;
       }
    }
  2. 引用传递

    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;
    }
上一篇:洛谷字符串题解


下一篇:Atcoder Beginner Contest 236 ABC 代码风格 格式#ifdef#else#endif ios::sync_with_stdio tie 异或 map容器 vector容器