zoukankan      html  css  js  c++  java
  • 2020.7.23

    学习内容:

    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关键字、综合实例

  • 相关阅读:
    //设N是一个四位数,它的9倍恰好是其反序数(例如:1234 的反序数是4321),求N的值。
    安装oracle后,电脑变卡变慢的解决办法
    JSONP
    vue-resource发起get、post、jsonp请求
    Vue实例的生命周期
    自定义全局指令让文本框获取焦点
    自定义全局按键修饰符
    es2017 提供的针对字符串填充的函数:padStart、padEnd
    自定义私有过滤器
    fiddler教程
  • 原文地址:https://www.cnblogs.com/ltw222/p/13395947.html
Copyright © 2011-2022 走看看