Java绑定
java程序绑定:【静态绑定+动态绑定】
(一)首先:要知道java的编译 运行过程:
①:java编译过程:java源文件(.java文件)-->字节码文件(.class文件--->JVM可执行代码)【这个过程中java不与内存打交道,编译器解析语法,语法不正确会报错】
②:java运行过程:是JVM装载字节码文件--->解释器来解析执行。【这个过程才会创立内存布局,执行java程序】
③ :java执行字节码的方式有两种:【 .java--->.class--->机器码(不同操作系统JVM转成不同机器码) 这就是java程序一次编译到处运行的原理】
1.0 即时编译方式:解释器-->将字节码--->机器码-->执行机器码.
2.0 解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。
(二):绑定--->一个方法的调用+方法所在的类(主体)关联起来。
(三):什么是静态绑定?什么是动态绑定?
(1)①:静态绑定(前期绑定):在程序执行前,方法已经被绑定。【编译过程中就已经知道这个方法是哪个类】;注意:java当中的方法只有final,static,private和构造方法是前期绑定的。
②:final,static,private和构造方法是前期绑定的理解.
1.0 final方法:虽然可以被继承-->可以被子类调用,但是不能被重写(覆盖)--->子类调用该的都是父类写的final方法。
【好处:①防止方法被覆盖②有效关闭java中的动态绑定】
2.0 static方法:static方法可以被继承,但是不能被子类重写(覆盖)。但是可以被子类隐藏。(这里意思是说如果父类里有一个static方法,它的子类里如果没有对应的方法,那么当子类对象调用这个方法时就会使用父类中的方法。而如果子类中定义了相同的方法,则会调用子类的中定义的方法。唯一的不同就是,当子类对象上转型为父类对象时,不论子类中有没有定义这个静态方法,该对象都会使用父类中的静态方法。因此这里说静态方法可以被隐藏而不能被覆盖)【静态的随着类的定义被分配装载在内存中】
3.0 private方法:不能被继承 --->没办法通过子类调用(只能通过本身对象调用)。
4.0 构造方法:不能被继承(编译器编译的时候就知道构造方法属于哪个类)
总结:一个方法不能被继承,或者继承后不可以被重写(覆盖),--->那么这个方法就是静态绑定的。
(2):动态绑定(后期绑定):运行时,根据具体对象的类型进行绑定。【编译器此时不知道对象的类型,方法调用机制自己去调查-->找到方法正确的所属的类】,所以会在对象中安插某些特殊类型的信息。
过程:
1.0虚拟机提取对象的实际类型的方法表。
2.0虚拟机搜索方法签名。
3.0调用方法。