初始Java18

学习内容:

1、动态绑定

Java虚拟机调用一个类方法时,他会基于对象引用的类型(通常在编译时可知)来选择调用的方法。

相反,当虚拟机调用一个实例方法时,他会基于对象实际的类型(只在运行时得知)来选择所调用的方法。

动态绑定具体表现在向上转型上,因为只有在运行时才知道具体运行的是哪个实例

 

package day01;

public class Father {
    public void say() {
        System.out.println("father say()");
    }
    public static void main(String[] args) {
        //向上转型
        Father son=new Son();
        son.say();
    }
}
class Son extends Father{
    public void say() {
        System.out.println("son say()");
    }
}

 

结果为:son say()

2、静态绑定

静态绑定是指在程序编译时绑定的,在Java中的变量都是动态绑定的,只有private,static和final是静态绑定的

 

package day01;
public class Father {
    String name="father";
    public static void say() {
        System.out.println("father say()");
        }
    public void say2() {
        System.out.println("father say2()");
    }
    public static void main(String[] args) {
        Father f= new Son();
        //虽然是指向了Son的引用,但是变量在编译的时候就动态绑定了,所以输出的是father
        System.out.println(f.name);
        //因为Father里面的say是static,编译时被静态绑定了,所以输出father say()
        f.say();//出现警告:应该以静态方式访问类型 Father 中的静态方法 say()
//而say2不是static 方法,f是由Son new出来的,执行的时候会执行new 它的那个类的say2()方法
        //所以输出son say2(),这是Java的多态性
        f.say2();
    }
}
class Son extends Father{
    String name="son";
    public static void say() {
        System.out.println("son say()");
    }
    public void say2() {
        System.out.println("son say2()");
    }
}

 

 

 

3、static关键字

通常访问类的属性和方法需要创建该类的实例,而static 关键字的访问是不需要某个特定的实例的。

(1)静态变量

静态变量只需要在变量前加上static关键字即可,静态变量不需要通过对象来访问,直接使用“类名. 变量名”直接访问即可,并且该变量不属于具体的哪一对象

 

(2)静态方法

在方法前加上static关键字,静态方法可以使用“类名. 方法名()”来调用,不需要通过对象来调用

(3)静态代码块

static代码块也叫静态代码块,可以有多个,并且位置可以随便放,它不在任何方法体内,JVM加载类时会执行这些静态的代码块,static代码块会优先与构造器执行,如static代码块有多个,KVN将按照它们在类中出现的先后顺序依次执行,每个代码块只执行一次。

 

4、final关键字

final关键字是最终的意思,使用final修饰类,代表该类是不能被继承的

final修饰方法表示该方法不能被重写

final修饰变量,代表该变量是常量

(1)final属性

final修饰属性,代表该属性是常量,并且该属性不能修改,否则会报错

 

(2)final方法

使用final修饰方法时,该方法不能被重写。

这里所说的不能被重写,并不是子类一定不能定义同名方法。如果父类的方法是私有类型,子类是允许定义该方法的

 

 (3)final类

使用final修饰的类,表示该类不能被继承

明天要学习的内容:

abstract关键字、综合实例

 

posted @ 2020-07-23 09:08  第厘  阅读(67)  评论(0编辑  收藏  举报