栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试题-回忆往昔

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题-回忆往昔

面试题-回忆往昔
  • 1. @autowired与@resource的区别
  • 2. 单例模式
  • 3 new 对象

1. @autowired与@resource的区别

@autowired
首先尝试通过类型注入,然后通过名字注入
当有多个子实现类时:

  1. 可以改为注入类型的名字
  2. 或者通过@qulifier指定名称
  3. 或者在其中一个实现类使用@primary (优先使用

@resource
首先通过名字进行注入,然后通过类型注入
当有多个子实现类:
可以改为注入类型的名字

2. 单例模式

恶汉式:不存在线程安全问题
直接实例化恶汉式
枚举类
静态代码块 需要初始化数据(通常私有参数使用静态块 ,加载配置文件注入)

懒汉式
线程安全版:使用synchronized块保证线程安全,在块的上一层加上对象非空判断,以提高性能。同时使用volatile保证原子性
静态内部类:把实例化静态对象的操作放到静态内部类中;在外部提供公有静态方法。因为静态内部类只有被用到的时候才会被初始化

3 new 对象

两个过程:

  1. 类的初始化过程clinit()
  • 一个类创建实例需要先加载并初始化该类(main方法所在的类需要首先被加载和初始化)
  • 一个字累被初始化需要先初始化父类
  • 一个类被初始化就是执行clinit()方法
    clinit方法组成:由静态变量显示赋值代码 和 静态代码块组成
    静态变量显示赋值代码 和 静态代码块 按顺序自上而下执行
    clinit方法 只执行一次
    先执行父类clinit(),再执行字类clinit()
  1. 类的实例化过程init()
  • init()方法可以重载,有几个构造器就有几个init()
  • init()方法由 非静态实例显示赋值 、 非静态代码块、构造器代码块组成
  • 非静态实例显示赋值 、 非静态代码块 自上而下执行,构造器代码块最后执行
  • 每次实例化对象,调用构造器,就是调用init方法
  • init方法首先是super()或者super(参数),即对应父类的init()
  1. 方法的重载
    父类方法被重写,子类初始化
    父类调用该方法,是调用重写的(因为子类初始化,是当前对象调用的,子类所有的非静态方法和父类非private、非静态的,非final修饰的方法都加了this)
    哪些方法不能被重写: static,final,private
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/922268.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号