复习3----浅谈Java中的单例模式,静态方法,与非静态方法

静态方法:与静态成员变量一样,属于类本身,在类装载的时候被装载到内存中,不会进行自动销毁,会一直存在内存中,直到JVM(Java Virtual Machine(Java虚拟机)的缩写)关闭
非静态方法:又称实例化方法,属于实例对象,实例化之后才能分配内存,必须通过类的实例来引用,当实例对象被JVM回收之后,也跟着消失
区别
(1)生命周期:静态方法的生命周期是从进程创建就开始的,一直到进程结束,所以说静态方法是全局的,贯穿整个进程
非静态方法的生命周期是从实例化对象才开始,一直到实例化对象被注销回收之后结束
所以,非静态方法的生命周期短语静态方法的生命周期,这也是实例方法中不能调用静态方法的原因
(2)调用方法:在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象.方法名的方式”,也就是说调用静态方法不需
要创建对象
实例化方法只能使用“对象.方法名”的方式
(3)访问权限:静态方法在访问本类成员时,只允许访问静态成员(既静态变量和静态方法),而不允许访问实例成员变量和实例化方
法,而实例化方法则无限制
实例成员变量是属于某个对象的,在执行静态方法时,并不一定存在该对象,同理,如果允许静态成员访问实例成员方
法,就间接可以访问实例成员变量,所以不能访问实例成员方法,基于这样的道理,静态方法中也不能使用关键字this
(4)执行顺序:当一个class文件被ClassLoader load(类加载器加载)进入JVM之后,方法指令保存在Stack中,此时Heap区并没有数
据。然后程序技术器开始执行指令,如果是静态方法,直接依次执行指令代码,当然此时指令代码是不能访问Heap数据
区的;如果是实例方法(实例方法有一个隐含的传入参数,该参数是JVM给它的,这个参数就是实例对象在Stack中的内
存地址,因此实例方法才可以找到在Heap中属于自己的数据),则在调用前必须实例化该对象,在Heap中分配数据,
并将Stack中的内存指针通过JVM的隐含参数传给实例方法。若不实例化直接调用,由于隐含参数没有值,会报错。
其中: Stack(堆栈)存取速度仅次于寄存器,存储效率比heap高,可共享存储数据,但是其中数据的大小和生存期必须在运行前确定。
Heap(堆)是运行时可动态分配的数据区,从速度看比Stack慢,Heap里面的数据不共享,大小和生存期都可以在运行时再确定

package com.example.demo.studytwo;

public class jingtai {
   
    static String qq = "静态变量";
    String ww = "非静态变量";
    public static void test1(){
   
        System.out.println("静态方法");
    }
    public void test2(){
   
        System.out.println("非静态方法");
    }
}
class Run{
   
    public static void main(String[] args) {
   
        jingtai.test1();//无需实例化就可以调用到方法
        System.out.println(jingtai.qq);
        jingtai j = new jingtai();//需要实例化之后才能调用到方法
        j.test2();
        System.out.println(j.ww);
    }
}

//静态的方法一般的可以直接调用
class A{
   
    public static String ss(){
   
        return "静态A";
    }
    class a{
   
        public String dd(){
   
            return A.ss();
        }
    }
}
//非静态方法需要new出一个对象:
class B{
   
    public String ff(){
   
        return "非静态B";
    }
    class b{
   
        public String gg(){
   
            B b = new B<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值