Java静态方法覆盖真相

本文详述了如何使用Jenkins搭建持续集成环境,从安装Java、启动Jenkins,到配置插件、系统设置、源码库集成(以GitLab为例)、构建触发条件、构建与发布流程。重点介绍了iOS和Android项目的构建配置,包括Xcode和Gradle的使用,以及利用FTP或第三方平台(如蒲公英)进行应用分发。同时,文章还涉及了证书管理、邮件通知和权限设置等细节。

static 关键字含义

static 是 Java 中的一个修饰符,表示"静态的",主要特点:

  1. 属于类而非实例:静态成员属于类本身,而不是类的某个对象实例

  2. 共享性:所有实例共享同一个静态成员

  3. 生命周期:随着类的加载而加载,随着类的消失而消失

  4. 访问方式:可以通过类名直接访问,不需要创建实例

使用场景

1. 静态变量

java

class Counter {
    static int count = 0;  // 所有实例共享
    
    Counter() {
        count++;
    }
}

// 使用
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.count); // 输出: 2

2. 静态方法

java

class MathUtils {
    static int add(int a, int b) {
        return a + b;
    }
}

// 直接通过类名调用
int result = MathUtils.add(5, 3);

3. 静态代码块

java

class Database {
    static {
        // 类加载时执行,用于初始化静态资源
        System.out.println("数据库连接初始化...");
    }
}

关于覆盖(override)的问题

private 方法:不能覆盖

java

class Parent {
    private void privateMethod() {
        System.out.println("Parent private method");
    }
}

class Child extends Parent {
    // 这不是覆盖,只是子类自己的方法
    private void privateMethod() {
        System.out.println("Child private method");
    }
}

原因:private 方法在子类中不可见,因此无法覆盖。

static 方法:不能覆盖,但可以隐藏

java

class Parent {
    static void staticMethod() {
        System.out.println("Parent static method");
    }
}

class Child extends Parent {
    // 这不是覆盖,而是方法隐藏(method hiding)
    static void staticMethod() {
        System.out.println("Child static method");
    }
}

// 测试
Parent p = new Child();
p.staticMethod(); // 输出: Parent static method (编译时绑定)

原因:static 方法在编译时绑定(静态绑定),而不是运行时绑定(动态绑定)。

重要区别总结

特性实例方法静态方法
绑定时机运行时(动态绑定)编译时(静态绑定)
关键字可以 override不能 override,只能隐藏
调用方式通过对象实例通过类名或实例
多态性支持多态不支持多态

验证示例

java

public class TestOverride {
    public static void main(String[] args) {
        Parent parent = new Child();
        
        // static 方法 - 编译时绑定
        parent.staticMethod();    // 输出: Parent static method
        
        // 实例方法 - 运行时绑定
        parent.instanceMethod();  // 输出: Child instance method
    }
}

class Parent {
    static void staticMethod() {
        System.out.println("Parent static method");
    }
    
    void instanceMethod() {
        System.out.println("Parent instance method");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Child static method");
    }
    
    @Override
    void instanceMethod() {
        System.out.println("Child instance method");
    }
}

结论

  • private 方法:不能覆盖(子类不可见)

  • static 方法:不能覆盖,只能隐藏(编译时绑定)

  • 只有非private的实例方法才能被真正覆盖

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值