跳到主要内容

介绍

Java 知识

Java的实例构造器是不是静态方法

https://rednaxelafx.iteye.com/blog/652719

静态是指什么

在Java中,“static”可以有多个意思,对方法而言,至少包括下面两点: 1、Java语言中的“static”关键字用于修饰方法时,表示“静态方法”,与“实例方法”相对。 2、在讨论方法的具体调用目标时,一个方法调用到底能否在运行前就确定一个固定的目标,是则可以进行“静态绑定”(static binding),否则需要做“运行时绑定”(runtime binding)。这与“static”关键字不是一回事。

实例方法和静态方法的区别

“类方法”(“静态方法”)与“实例方法”在概念中的JVM上的区别:在调用类方法时,所有参数按顺序存放于被调用方法的局部变量区中的连续区域,从局部变量0开始;在调用实例方法时,局部变量0用于存放传入的该方法所属的对象实例(Java语言中的“this”),所有参数从局部变量1开始存放在局部变量区的连续区域中。 从效果上看,这就等于在调用实例方法时总是把“this”作为第一个参数传入被调用方法。

jvm中四种方法的调用的字节码指令

Java虚拟机规范第二版中定义了四种不同的字节码指令来处理Java程序中不同种类的方法的调用。包括,

  • invokestatic - 用于调用类(静态)方法
  • invokespecial - 用于调用实例方法,特化于super方法调用、private方法调用与构造器调用
  • invokevirtual - 用于调用一般实例方法(包括声明为final但不为private的实例方法)
  • invokeinterface - 用于调用接口方法

其中,invokestatic与invokespecial调用的目标必然是可以静态绑定的,因为它们都无法参与子类型多态;invokevirtual与invokeinterface的则一般需要做运行时绑定,JVM实现可以有选择的根据final或实际运行时类层次或类型反馈等信息试图进行静态绑定。

Java new和构造器

在Java语言里,“new”表达式是负责创建实例的,其中会调用构造器去对实例做初始化;构造器自身的返回值类型是void,并不是“构造器返回了新创建的对象的引用”,而是new表达式的值是新创建的对象的引用。

Java中的"Hello"和new String("Hello") 以及 String#intern

https://www.zhihu.com/question/55994121 最重要的 https://rednaxelafx.iteye.com/blog/774673 https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html https://www.zhihu.com/question/57109429