zoukankan      html  css  js  c++  java
  • 错题(父类构造器)

    What will be printed when you execute the following code?
     
    class C {
        C() {
            System.out.print("C");
        }
    }
     
    class A {
        C c = new C();
     
        A() {
            this("A");
            System.out.print("A");
        }
     
        A(String s) {
            System.out.print(s);
        }
    }
     
    class Test extends A {
        Test() {
            super("B");
            System.out.print("B");
        }
     
        public static void main(String[] args) {
            new Test();
        }
    }
     
    answer:
    CBB
     
    解析
    首先new了一个子类对象,那么就要调用构造方法来初始化该子类对象,但是该类继承自A,所以要先调用父类的构造方法,这里通过super("B")显示 的调用了父类的带参构造。执行父类的带参构造前要先对父类中的对象进行初始化,对父类中的c成员进行初始化,调用了C类的无参构造,所以调用顺序为:
    先调用C类的无参构造
    再调用A类的带参构造
    最后调用调用子类的构造
     
    重载:
    重写是子类继承父类方法并对其进行修改,可选择调用父类方法或子类重写后的同名方法
    重载是在一个类可以存在同名但参数列表不同的方法,可根据传入的参数调用相应的方法
     
     
    volatile:

    一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

    1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

    2)禁止进行指令重排序。

    volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。

    而对该变量的修改,volatile并不提供原子性的保证。

    由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况

    多线程下计数器必须使用锁保护。

     
     
     
  • 相关阅读:
    2021年2月22
    2021年2月21
    2021年2月20
    2021年2月19
    动态添加titie属性
    根据内容改变文字颜色!
    自定义弹出层!
    来回切换图标以及文字
    20180831xlVBA_WorksheetsCosolidate
    20180830xlVBA_合并计算
  • 原文地址:https://www.cnblogs.com/bb3q/p/5082311.html
Copyright © 2011-2022 走看看