java静态方法(static method)与实例方法(instance method)

    技术2022-07-16  90

        被static修饰的方法为静态方法,之外的方法为实例方法。静态方法可直接使用类调用,实例方法必须创建实例后才能调用。java-doc

    1. 示例

    @Test void staticMethodTest(){ //直接调用静态方法 Boss.work(); //创建实例 Boss boss = new Boss(); //调用实例方法 boss.programming(); } class Boss { String name; public void programming(){ System.out.println("I am programming."); } public static void work(){ System.out.println("I am working."); } }

      执行结果

    I am working. I am programming.

    2. 区别

       2.1 类外部调用

            静态方法可直接使用类调用,实例方法必须创建实例后才能调用。

      2.2 类内部调用

            实例方法内可以调用静态方法,但是静态方法只能调用静态方法,不能调用实例方法。

    //实例方法 public void programming(){ System.out.println("I am programming."); work(); // 静态方法 } //静态方法 public static void work(){ System.out.println("I am working."); // 无法调用 programming() 实例方法 }

        2.3 使用synchronized修饰

            被synchronized修饰时,若为静态方法,monitor则与该静态方法的所属类的Class对象相关联;若为实例方法,monitor则与调用该方法的实例对象关联。

        官方示例   

    class Test { int count; synchronized void bump() { count++; } static int classCount; static synchronized void classBump() { classCount++; } } // 效果与下面一致 class BumpTest { int count; void bump() { synchronized (this) { count++; } } static int classCount; static void classBump() { try { synchronized (Class.forName("BumpTest")) { classCount++; } } catch (ClassNotFoundException e) {} } }

     

    Processed: 0.008, SQL: 9