回顾方法及加深之静态和非静态方法的调用(03)

21.回顾方法及加深----(静态和非静态方法)调用总结

1. 不同类之间的方法调用

创建两个类	Demo02		Student
//类:学生类
public class Student {
    //学生类下面的方法:此方法为静态方法,因为加了static
    public static void say(){//为啥不写参数啊!??
        System.out.println("学生说话了");
    }
    //上面没写形参,下面写了形参 ,注意调用的区别
    public static void say1(String a){//为啥写参数啊
        System.out.println("学生又说话了");
    }


    //学生类下面的方法:此方法为非静态方法,因为没有加static
    public void sleep(){
        System.out.println("学生睡觉了");
    }
}
public class Demo02 {
    public static void main(String[] args){
        System.out.println("Hello World !");
		
        //*****************  静态方法的调用  ****************************
        //静态方法  加了static
        //调用法一:类名.方法名()调用
        Student.say();
        Student.say1("啊哈哈哈");//因为say1()方法里写了String形参,所以此处要给形参传递值

        //*****************  非静态方法的调用  ****************************
        //非静态方法  没有加static
        //调用不能直接通过类名.方法名调用
        //法:第一:实例化这个类 new
        new Student();//new Student()就代表把这个类实例化了
        new Student().sleep();//实例化之后就能 .sleep() 调用了

        //法二:但是通常写成下面的方式
        //万能公式:变量类型 变量名 = 变量的值;
                 //对象类型 对象名 = 对象的值;
        Student student = new Student();    //也是把对象值变为实例化对象的过程
        //然后调用 对象名.方法名();
        student.sleep();
        
        
        /**  (适用非静态的方法)
         * 理解:new Student() :把Student类 实例化了
         * Student student = new Student(); 实例化之后,又赋值给了student这个对象
         * 用student这个对象:所以student这个对象 可以通过 对象名.方法名()调用 。即: 					student.sleep();
         * */
		
     

    }
}

2. 同一个类下的方法调用

创建一个类,比如Demo03
public class Demo03 {
    public static void main(String[] args){
        System.out.println("Hello World !");
    }

    //定义两个普通静态方法a,b
    //此时两静态方法c和d可以互相直接调用,也能被main方法直接调用
    public static void a(){
        b();
    }
    public static void b(){
        a();
    }

    //定义两个普通非静态方法c,d
    //此时两非静态方法a和b可以互相直接调用,但不能被main方法直接调用
    public void c(){
        d();
    }
    public void d(){
        c();
    }

    //定义一个静态方法e,一个非静态方法f
    //此时静态方法e不能直接调用非静态方法f ,但是非静态方法f可以直接调用静态方法e
    public static void e(){
        //f();不能直接调用
        //类实例化之后才能调用 new
        Demo02 demo02 = new Demo02();
        demo02.f();
    }
    public void f(){
        e();
    }
    
    
    /**
    static 是和类一起加载的(时间片很早:当类存在的适合,它就存在了)
    没有static的非静态方法f 是在类实例化之后才存在(是跟对象有关的,对象创建之后才存在)
    所以已经存在了的e()方法 直接调用一个不存在的f()方法 会报错。
    
     * 因为被static修饰的内容会跟随类的加载而加载,所以静态化内容可以不用实例化就能被直接调用
     * 同时两静态方法之间也可以互相直接调用
     * */
    
    /**
     * 因为被static修饰的内容会跟随类的加载而加载,所以静态化内容可以不用实例化就能被直接调用
     * 同时两静态方法之间也可以互相直接调用
     * */
    /**  
     ** static 静态方法是和类一起加载的,创建了类 它也就有了。而非静态方法还没创建,是不存在的。
     * 所以存在的 调用不存在的 肯定不行的
     * 非静态方法在 类实例化之后才存在
    **/

    /**
    *静态方法只能直接调用静态方法(言外之意 静态方法可以间接调用非静态方法。如实例化),非静态方法可以调用静态方法
    */
}

3. 总

public class Demo20 {
    public static void main(String[] args){
        //调用同一类的静态方法
        print();
        //类名.方法名
        Demo20.print();

        //调用不同类的静态方法
        //类名.方法名
        Student.say();
        Student.say1("abc");

        //调用同一类的非静态方法
        //法一
        new Demo20().print1();
        Demo20 demo20 = new Demo20();
        //法二
        demo20.print1();

        //调用不同类的非静态方法
        //法一
        new Student().sleep();
        Student student = new Student();
        //法二
        student.sleep();
    }


    public static void print(){
        System.out.println("Hello");
    }

    public void print1(){
        System.out.println("hello");
    }
}
posted @ 2022-03-22 18:41  intelliyu  阅读(33)  评论(0编辑  收藏  举报