介绍
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