接口为什么不能实例化?

  • 我在进行JDK源码测试发现一个问题:
Map<String, Double> map = new Map<>();会显示错误,
  • 下面具体的解释一下:
  • 首先Map是一个接口,它不能实例化,但是我感觉大家看到过这种情况
Thread t = new Thread(new Runable(){
@Override
public void run(){
}
}

Runable是一个接口,但是我们看到有new的情况,但是这种情况其实不是接口实例化,只是换了一种写法,写法如下:

class MyThread implements Runnable(){
@Override
public void run(){}
}
Thread t = new Thread(new MyThread());

只是省略了上面的写法。

  • 接下来介绍一下接口为什么不能实例化
    实例化实际上就是在JVM的堆中开辟一块内存空间,比如如下代码
Student t = new Student();

其中对象Student存放在堆的内存空间中,t指向内存空间的具体地址,这块地址存放的就是Student的一些属性,也就是Student的成员变量。

其中t存放在栈中,指向这个类的具体引用。

  • 如果我们实例化接口,这个接口所占用的地址会存放什么值呢?
    首先java的内存空间分为四类:栈,堆,代码,静态数据。由此可见接口中的值是存放在代码和静态数据,内存空间中是没有值的,所以实例化一个接口只会占用一个空间,不会实际存储什么值的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值