静态函数和非静态函数的区别(静态方法和非静态方法)

首先,静态函数只有当程序结束的时候才从内存消失,生命周期长。而非静态则是动态加载到内存,不需要的时候就从内存消失。

而调用类中的静态函数,无需创建对象就可以调用了,因为当类初始化的时候,就已经加载了静态函数,所以静态函数要比对象加载的早,对象只有被创建的时候才会在堆内存中创建空间。

  另外,静态函数中不能使用非静态变量,静态方法不可以定义this,super关键字(因为静态比对象先加载,而this必须首先加载,所以导致冲突,不能使用);非静态函数可以访问静态变量。


  最后呢,说明一下创建对象的加载。

  A a = new B();

1:B.class 加载进方法区

      2:堆内存开辟空间,实例变量进行默认初始化,显示初始化。

      3:内存地址传给变量a,栈和堆建立连接


静态函数和非静态函数的使用Demo

public class PersonDemo {
    public static void main(String[] args) {
       // 访问静态成员
       // 直接通过类名来调用
       String country = Person.country;
       System.out.println(country);
       // 通过对象.成员的形式访问
       Person p1 = new Person("jack", 20, "男");
       p1.country = "US";
       p1.speak();
    }
}
class Person {
    String name;
    int age;
    String gender;
    // static 修饰成员变量
    static String country = "CN";
    static {
       System.out.println("这是静态代码块");
    }
    {
       System.out.println("这是构造代码块");
    }
    Person() {
       System.out.println("无参数构造");
    }
    Person(String name, int age, String gender) {
       this.name = name;
       this.age = age;
       this.gender = gender;
       System.out.println(" 有参数构造");
    }
    // 非静态方法
    void speak() {
       // 非静态方法可以访问静态成员
       System.out.println("国籍:" + country);
       System.out.println("国籍:" + country + " 姓名:" + name + " 性别:" + gender + " 年龄:" + age + " 哈哈!!!");
       // 非静态方法可以调用静态方法。
       run();
    }
    // 静态方法
    static void run() {
       // 静态方法只能访问静态成员变量。
       System.out.println("国籍:" + country);
    }
}



  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值