第08章:随堂复习与企业真题(面向对象-高级)
一、随堂复习
1. 关键字:static
-
static:静态的,随着类的加载而加载、执行。
-
static用来修饰:属性、方法、代码块、内部类
-
熟悉:static修饰的类变量、类方法与不使用static修饰的区别。
- 类变量:类的生命周期内,只有一个。被类的多个实例共享。
-
掌握:我们遇到属性或方法时,需要考虑是否声明为static的。
2. 单例模式(或单子模式)
- 经典的设计模式有23种
- 解决的问题:在整个软件系统中,只存在当前类的唯一实例。
- 实现方式:饿汉式、懒汉式、枚举类等
- 对比饿汉式和懒汉式
- 饿汉式:“立即加载”,线程安全的。
- 懒汉式:“延迟加载”,线程不安全。
- 需要会手写饿汉式和懒汉式
3. 理解main()方法
- public static void main(String[] args){}
- 理解1:作为程序的入口;普通的静态方法
- 理解2:如何使用main()与控制台进行数据的交互。
- 命令行:java 类名 “Tom” “Jerry” “123”
4. 类的成员之四:代码块
- 分类:静态代码块、非静态代码块
- 使用频率上来讲:用的比较少。
- 静态代码块:随着类的加载而执行
- 非静态代码块:随着对象的创建而执行
总结:对象的实例变量可以赋值的位置及先后顺序
① 默认初始化
② 显式初始化 或 ⑤ 代码块中初始化
③ 构造器中初始化④ 有了对象以后,通过"对象.属性"或"对象.方法"的方法进行赋值
执行的先后顺序:
① - ②/⑤ - ③ - ④
5. 关键字:final
-
最终的
-
用来修饰:类、方法、变量(成员变量、局部变量)
- 类:不能被继承
- 方法:不能被重写
- 变量:是一个“常量”,一旦赋值不能修改。
6. 关键字:abstract
- 抽象的
- 用来修饰:类、方法
- 类:抽象类:不能实例化。
- 方法:抽象方法:没有方法体,必须由子类实现此方法。
7. 关键字:interface
-
interface:接口,用来定义一组规范、一种标准。
-
掌握:接口中可以声明的结构。
-
属性:使用public static final修饰
-
方法:jdk8之前:只能声明抽象方法,使用public abstract修饰
jdk8中:声明static方法、default方法。
jdk9中:声明private方法。
-
-
笔试题:抽象类、接口的对比。
8. 类的成员之五:内部类
> 成员内部类的理解
> 如何创建成员内部类的实例
> 如何在成员内部类中调用外部类的结构
> 局部内部类的基本使用(关注:如何在方法内创建匿名局部内部类的对象)
9. 枚举类:enum
- 掌握:使用enum关键字定义枚举类即可。
10. 注解:Annotation
- 框架 = 注解 + 反射 + 设计模式
- Java基础阶段:简单。@Override 、 @Deprecated、@SuppressWarnings
- 元注解:对现有的注解进行解释说明。
- @Target:表明可以用来修饰的结构
- @Retation:表明生命周期
- 如何自定义注解。
11. 包装类的使用
- 掌握:基本数据类型对应的包装类都有哪些?
- 掌握:基本数据类型、包装类、String三者之间的转换
- 基本数据类型 <-> 包装类:自动装箱、自动拆箱
- 基本数据类型、包装类 <-> String
- String的valueOf(xxx)
- 包装类的parseXxx(String str)
12. IDEA:快捷键和debug
二、企业真题
2.1 static关键字
1. 静态变量和实例变量的区别?(保*丰、*软国际、*软华*、北京明**信)
类似问题:
> 说明静态变量和实例变量之间的区别和使用场景(上海*动)
略
2. 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?(*度)
类似问题:
> 在java中,可以重载一个static方法吗?可以覆盖一个static方法吗?(Vi*o)
静态方法不能被重写。不存在多态性。
3. 是否可以从一个static方法内部发出对非static方法的调用?(同*顺)
只能通过对象来对非静态方法的调用。
4. 被static修饰的成员(类、方法、成员变量)能否再使用private进行修饰?(联*优势)
完全可以。除了代码块。
2.2 设计模式
1. 知道哪些设计模式?(*通快递、蚂**服)
单例模式、模板方法、享元设计模式
2. 开发中都用到了那些设计模式?用在什么场合? (久*国际物流)
略
2.3 main()
1. main()方法的public能不能换成private,为什么(凡*科技、顺*)
可以改。但是改完以后就不是程序入口了。
2. main()方法中是否可以调用非静态方法?(浩*科技)
只能通过对象来对非静态方法的调用。
2.4 代码块
1. 类的组成和属性赋值执行顺序?(航*拓普)
类似问题:
> Java中类的变量初始化的顺序?(*壳)
略。
2. 静态代码块,普通代码块,构造方法,从类加载开始的执行顺序?(恒*电子)
类似问题:
> 类加载成员变量、静态代码块、构造器的加载顺序(*科软、软**力、同*顺)
> static代码块(静态代码块)是否在类的构造函数之前被执行(联*优势)
静态代码块 --> 普通代码块 --> 构造器
2.5 final关键字
1. 描述一下对final理解(华**博普)
略
2. 判断题:使用final修饰一个变量时,是引用不能改变,引用指向的对象可以改变?(*米)
引用不能改变。
引用指向的对象实体中的属性,如果没有使用final修饰,则可以改变。
3. 判断题:final不能用于修饰构造方法?(联*优势)
是的。
4. final或static final 修饰成员变量,能不能进行++操作?(佳*贸易)
不能。
2.6 抽象类与接口
1. 什么是抽象类?如何识别一个抽象类?(易*支付)
使用abstract修饰。
2. 为什么不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法?(止**善)
略。 为了语言的自洽。
3. 接口与抽象类的区别?(字*跳动、阿*校招、*度校招、**计算机技术及应用研究所、航*拓普、纬*、招**晟、汇*云通、数信**科技、北京永*鼎力、上海*连科技)
略。
4. 接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?(航*拓普、*蝶、深圳德*科技)
类似问题:
> 接口A可以继承接口B吗?接口A可以实现接口B吗?(久*国际物流)
是;是;是;
5. 接口可以有自己属性吗?(华*中盛)
可以。必须是public static final的
6. 访问接口的默认方法如何使用(上海*思)
使用实现类的对象进行调用。而且实现还可以重写此默认方法。
2.7 内部类
1. 内部类有哪几种?(华油**普、来*科技)
略。
2. 内部类的特点说一下(招通**)
类似问题:
> 说一下内部类的好处(北京楚*龙)
> 使用过内部类编程吗,有什么作用(软**力)
8.匿名类说一下(阿*校招、上海立*网络)
略
2.8 枚举类
1. 枚举可以继承吗?(顺*)
使用enum定义的,其父类就是Enum类,就不要再继承其他的类了。
2.9 包装类
1. Java基本类型与包装类的区别(凡*科技)
略。
2.10 综合
1. 谈谈你对面向对象的理解(君*科技、航*拓普、…)
- 面向对象的两个要素:类、对象 —> 面向对象编程。“万事万物皆对象”。
- 面向对象的三大特征
- 接口,与类并列的结构,作为一个补充:类可以实现多个接口。
2. 面向对象的特征有哪些方面? (北京楚*龙、深圳德*科技、直*科技、米*奇网络、航*拓普)
类似问题:
> 面向对象核心是什么?(平**服)