JAVA接口及静态方法不能被重写

接口

1、接口中可以有 default 方法、静态方法,静态方法可通过接口直接调用, default 方法必须通过对象调用。实现接口的类不能继承接口静态方法,接口中可以声明 abstract 方法,此时,abstract 方法跟接口中的普通方法具有相同效果。

2、函数式接口 @FunctionalInterface 作用,当在接口中添加第二个抽象方法时,编译器会报错。

3、方法引用关键字 ::,引用静态方法通过类名引用,引用普通方法要通过对象引用。引用构造方法使用 ::new 方式。

4、Lambda 表达式中使用局部变量需要局部变量为隐式 final。使用成员变量和静态变量,可在匿名类中修改变量值。

5、接口中带有的具有默认实现的方法不能在 lambda 表达式中使用。

6、函数式接口 Supplier 只能使用对象无参构造器。

7、Reduce 接口,通过入参的 Function 对象,能够将 list 归约为一个值,返回类型是 Optional 类型。

Java内存使用

1、运行时数据区域

 1、虚拟机栈是方法执行时用于存储局部变量表(基本数据类型、对象引用、方法返回),操作数栈、动态链接、方法出口等信息。

2、堆。所有线程共享的内存区域,在JVM启动时创建。大部分对象及数组在堆上分配内存。堆是垃圾收集器主要管理的内存区域。堆大小通过虚拟机参数:-Xmx 和 -Xms 控制。

3、方法区,虚拟机规范中方法区是堆的一个逻辑部分,但它有个别名叫“非堆”,属于线程间共享内存。方法区用于存储已被虚拟机加载的类信息、常量、静态变量、编译后的代码等。垃圾收集器基本不在方法区内活动。

4、直接内存。JDK1.4 中新加入了 NIO,引入了基于通道(channel)和缓冲区(Buffer)的IO 方式,可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样可以避免 Java 堆和 Native 堆来回复制数据,提高了性能。

对象创建的过程

 对象内存布局

HotSpot 虚拟机中,对象在堆内存中的布局可以分为三部分:对象头、实例数据、补齐。

对象头包括两类信息:Mark Word 和类型指针。类型指针用来确定该对象是哪个类的实例。不是所有虚拟机实现都必须在对象数据上保留类型指针。

对象访问定位。主流访问方式主要有使用句柄和直接指针两种

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值