阿里的Java校招笔试题(经典)——代码块

前言:这道题第一眼看上去让人脑壳疼,但搞清楚代码块的知识之后(其实是很基础的知识哦),又特别有意思,有感而发。

 代码:

class HelloA{
    //构造方法
    public HelloA(){
        System.out.println("1.Hello A!父类构造方法");
    }
    //非静态代码块
    {
        System.out.println("2.i'm A class.父类非静态代码块");
    }
    //静态代码块
    static{
        System.out.println("3.static A 父类静态代码块");
    }
}
public class HelloB extends HelloA{
    //构造方法
    public HelloB(){
        System.out.println("4.Hello B!构造方法");
    }
    //非静态代码块
    {
        System.out.println("5.i'm B class.非静态代码块");
    }
    //静态代码块
    static{
        System.out.println("6.static B 静态代码块");
    }
    public static void main(String[] args){
        System.out.println("7.----start----");
        new HelloB();
        new HelloB();
        System.out.println("8.----end----");
    }
}

运行结果:

 

下面是一些关于代码块的知识点 

1.普通代码块:类中方法的方法体

public void test(){

.......

}

2. 构造块:{}

1) 定义在类中的代码块(不加任何修饰符)

2) 在对象产生时,优先于构造方法执行,有几个对象产生,就调用几次构造块

3.静态代码块:static{}

1)非主类中的静态代码块

在类加载时执行,优先于构造块执行,无论有多少对象产生,只会调用一次。

2)主类中的静态代码块

主类中的静态块优先于主方法执行

此题中,子类(HelloB)对象实例化之前首先调用父类(HelloA)构造方法产生父类对象后再调用子类构造方法实例化子类对象。

4.同步代码块:synchronized(obj){}

(这里简单说一下,它应用于多线程部分)

在方法中使用synchronized(对象),一般可以锁定当前对象this表示同一时刻只有一个线程能够进入同步代码块,但是多个线程可以同时进入方法。

在方法声明上加synchronized,表示此时只有一个线程能进入同步方法。

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值