Java世界里一切皆对象

在Java世界里一切皆对象Java有两种对象:Object实例对象和 Class对象。每个类运行时的类型信息用Class对象表示,它包含与类名 称、继承关系、字段、方法有关的信息。JVM将一个类加载入自己的方 法区内存时,会为其创建一个Class对象,对于一个类来说其Class对象 是唯一的。

Class类没有公共的构造方法,Class对象是在类加载的时候由Java虚 拟机调用类加载器中的defineClass方法自动构造的,因此不能显式地声 明一个Class对象。

所有的类都是在第一次使用时被动态加载到JVM中的(懒加载), 其各个类都是在必需时才加载的。这一点与许多传统语言(如C++)都 不同,JVM为动态加载机制配套了一个判定一个类是否已经被加载的检 查动作,使得类加载器首先检查这个类的Class对象是否已经被加载。如 果尚未加载,类加载器就会根据类的全限定名查找.class文件,验证后加 载到JVM的方法区内存,并构造其对应的Class对象。

普通的synchronized实例方法,其同步锁是当前对象this的监视锁。 如果某个synchronized方法是static(静态)方法,而不是普通的对象;

静态方法属于Class实例而不是单个Object实例在静 态方法内部是不可以访问Object实例的this引用(也叫指针、句柄)的。

所以,修饰static方法的synchronized关键字就没有办法获得Object实例的 this对象的监视锁。

实际上,使用synchronized关键字修饰static方法时,synchronized的 同步锁并不是普通Object对象的监视锁,而是类所对应的Class对象的监 视锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值