请问静态方法和实例方法的区别

请问静态方法和实例方法的区别

老师您好,请问静态方法和实例方法到底有什么区别呢?能否举个简单例子以便更好理解。

谢谢。

下载视频          

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-03-07 09:53:44

    同学你好,静态方法和实例方法的本质区别在于方法声明,静态方法的方法声明中使用了static关键字,而实例方法没有使用。

    正是因为static关键字的存在,静态方法的初始化时机是在类信息加载的时候就已经完成了,此时还没有创建对象,所以静态方法的初始化时机远远优先于实例方法,同时静态方法也就与对象无关了。

    基于上面的特性可以看出,静态方法几乎可以应用在任何场景,因为其初始化时机早,不会出现尚未初始化的情况。但是实例方法不同,由于其初始化时机较晚,所以在静态环境(静态方法,静态代码块等)中使用的话,必须先创建对象。

    以上就是静态方法和实例方法的区别。

    祝学习愉快~


  • 提问者 HsiYuan #1

    能否请老师简单举例呢?

    所以按照我的理解,静态方法不用new对象,直接调用,但是实例方法需要new对象才能调用?

    下载视频          
    2022-03-10 17:37:46
  • 好帮手慕小蓝 回复 提问者 HsiYuan #2

    同学你好,同学的理解是正确的。

    1.静态方法调用时,可以使用对象,但是不推荐这么使用,甚至很多代码工具都会提示警告。静态方法通常通过类名来访问。

    例如我们常用的主方法,其实就是典型的静态方法,如下代码所示:


    public class Test {
        public static void main(String[] args) {
            //通过对象调用(不建议这样使用)
            Person person = new Person();
            person.method();
            //通过类名调用(推荐的使用方法)
            Person.method();
        }
    }
    class Person{
        public static void method() {
            System.out.println("I'm static method~");
        }
    }


    上面的method方法,可以通过对象调用,也可以通过类名直接调用。


    2.非静态方法如果在本来之外被调用时,任何情况下都必须先创建对象。如下代码所示:

    public class Test {
        public static void main(String[] args) {
            // 在静态方法中调用:通过对象调用
            Person person = new Person();
            person.method();
        }
        public void test() {
            // 在非静态方法中调用:通过对象调用
            Person person = new Person();
            person.method();
        }
    }
    class Person {
        public void method() {
            System.out.println("I'm static method~");
        }
    }


    3.特殊的,非静态方法在本类中被调用时,可以不创建自身对象,因为默认对象为当前对象,即this。而在Java中,本类中是可以省略this的。如下代码所示:

    class Person {
        public void method() {
            System.out.println("I'm static method~");
        }
        public void test() {
            //可以不创建对象,直接调用方法(不建议的写法)
            method();
            //默认系统会添加this,但是建议手动写入this,提高代码可读性(推荐的写法)
            this.method();
        }
    }

    4.同第3点,当静态方法在本类中使用时,也是可以省略类名的,但是此时不建议写入this。如下代码所示:

    class Person {
        public static void method() {
            System.out.println("I'm static method~");
        }
        //静态方法用于非静态方法
        public void test() {
            //可以省略类名,直接调用方法(不建议的写法)
            method();
            //可以使用this来调用方法(不建议的写法)
            this.method();
            //通过类名调用方法(推荐的写法)
            Person.method();
        }
        //静态方法用于静态方法
        public static void test1() {
            //可以省略类名,直接调用方法(不建议的写法)
            method();
            //此处编译错误,因为在静态方法中不存在当前对象,即不能使用this
            this.method();
            //通过类名调用方法(推荐的写法)
            Person.method();
        }
    }

    如果同学依然有疑问,欢迎继续提问。

    祝学习愉快~


    2022-03-10 18:01:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师