第08章:随堂复习与企业真题(面向对象-高级)

本文详细讲解了Java中的静态关键字、单例模式实现、main方法的作用、final与abstract的用法,以及类的静态与实例变量、代码块、枚举类、注解、包装类和面向对象的特性等内容。
摘要由CSDN通过智能技术生成

一、随堂复习

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. 静态变量和实例变量的区别?(保*丰、*软国际、*软华*、北京明**信)
类似问题:
> 说明静态变量和实例变量之间的区别和使用场景(上海*动)
对比静态变量与实例变量:
       ① 个数
        >静态变量:在内存空间中只有一份,被类的多个对象所共享。
        >实例变量:类的每一个实例(或对象)都保存着一份实例变量。
       ② 内存位置
        >静态变量:jdk6及之前:存放在方法区。 jdk7及之后:存放在堆空间
        >实例变量:存放在堆空间的对象实体中。
       ③ 加载时机
        >静态变量:随着类的加载而加载,由于类只会加载一次,所以静态变量也只有一份。
        >实例变量:随着对象的创建而加载。每个对象拥有一份实例变量。
       ④ 调用者
        >静态变量:可以被类直接调用,也可以使用对象调用。
        >实例变量:只能使用对象进行调用。
       ⑤ 判断是否可以调用 ---> 从生命周期的角度解释

                    类变量         实例变量
        类            yes            no
        对象          yes            yes


       ⑥ 消亡时机
        >静态变量:随着类的卸载而消亡
        >实例变量:随着对象的消亡而消亡
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. 执行的先后顺序:

① - ②/⑤ - ③ - ④
2. 静态代码块,普通代码块,构造方法,从类加载开始的执行顺序?(恒*电子)
类似问题:
> 类加载成员变量、静态代码块、构造器的加载顺序(*科软、软**力、同*顺)
> static代码块(静态代码块)是否在类的构造函数之前被执行(联*优势)
​

静态代码块 --> 普通代码块 --> 构造器

2.5 final关键字

1. 描述一下对final理解(华**博普)
1. final的理解:最终的

2. final可以用来修饰的结构:类、方法、变量

3. 具体说明:

3.1 final修饰类:表示此类不能被继承。
    比如:String、StringBuffer、StringBuilder类

3.2 final修饰方法:表示此方法不能被重写
    比如:Object类中的getClass()

3.3 final修饰变量:既可以修饰成员变量,也可以修饰局部变量。
    此时的"变量"其实就变成了"常量",意味着一旦赋值,就不可更改。

    3.3.1 final修饰成员变量: 有哪些位置可以给成员变量赋值?
        > 显式赋值
        > 代码块中赋值
        > 构造器中赋值

   3.3.2 final修饰局部变量:一旦赋值就不能修改
        > 方法内声明的局部变量:在调用局部变量前,一定需要赋值。而且一旦赋值,就不可更改
        > 方法的形参:在调用此方法时,给形参进行赋值。而且一旦赋值,就不可更改

4. final与static搭配:修饰成员变量时,此成员变量称为:全局常量。
    比如:Math的PI
2. 判断题:使用final修饰一个变量时,是引用不能改变,引用指向的对象可以改变?(*米)

引用不能改变。

引用指向的对象实体中的属性,如果没有使用final修饰,则可以改变。

3. 判断题:final不能用于修饰构造方法?(联*优势)

是的。

4. final或static final 修饰成员变量,能不能进行++操作?(佳*贸易)

不能。

2.6 抽象类与接口

1. 什么是抽象类?如何识别一个抽象类?(易*支付)

使用abstract修饰。

2. 为什么不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法?(止**善)
不能用abstract修饰私有方法、静态方法、final的方法、final的类。
> 私有方法不能重写
> 避免静态方法使用类进行调用
> final的方法不能被重写
> final修饰的类不能有子类
3. 接口与抽象类的区别?(字*跳动、阿*校招、*度校招、**计算机技术及应用研究所、航*拓普、纬*、招**晟、汇*云通、数信**科技、北京永*鼎力、上海*连科技)
> 共性:都可以声明抽象方法
       都不能实例化

> 不同:① 抽象类一定有构造器。接口没有构造器
       ② 类与类之间继承关系,类与接口之间是实现关系,接口与接口之间是多继承关系

4. 接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?(航*拓普、*蝶、深圳德*科技)

类似问题:
> 接口A可以继承接口B吗?接口A可以实现接口B吗?(久*国际物流)

是;是;是;

5. 接口可以有自己属性吗?(华*中盛)

可以。必须是public static final的

6. 访问接口的默认方法如何使用(上海*思)

使用实现类的对象进行调用。而且实现还可以重写此默认方法。

2.7 内部类

1. 内部类有哪几种?(华油**普、来*科技)
    > 成员内部类:直接声明在外部类的里面。
        > 使用static修饰的:静态的成员内部类
        > 不使用static修饰的:非静态的成员内部类

    > 局部内部类:声明在方法内、构造器内、代码块内的内部类
        > 匿名的局部内部类
        > 非匿名的局部内部类


   > 从类的角度看:
        - 内部可以声明属性、方法、构造器、代码块、内部类等结构
        - 此内部类可以声明父类,可以实现接口
        - 可以使用final修饰
        - 可以使用abstract修饰

   > 从外部类的成员的角度看:
        - 在内部可以调用外部类的结构。比如:属性、方法等
        - 除了使用public、缺省权限修饰之外,还可以使用private、protected修饰
        - 可以使用static修饰
2. 内部类的特点说一下(招通**)
类似问题:
> 说一下内部类的好处(北京楚*龙)
> 使用过内部类编程吗,有什么作用(软**力)

8.匿名类说一下(阿*校招、上海立*网络)

略(后面补充)

2.8 枚举类

1. 枚举可以继承吗?(顺*)

使用enum定义的,其父类就是Enum类,就不要再继承其他的类了。

2.9 包装类

1. Java基本类型与包装类的区别(凡*科技)
包装类的使用
1. 为什么要使用包装类?
为了使得基本数据类型的变量具备引用数据类型变量的相关特征(比如:封装性、继承性、多态性),我们给各个基本数据
类型的变量都提供了对应的包装类。

2. 掌握基本数据类型对应的包装类类型

byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double ->Double


char -> Character
boolean -> Boolean

3. 掌握基本数据类型 与 包装类之间的转换。
   3.1 为什么需要转换

         > 一方面,在有些场景下,需要使用基本数据类型对应的包装类的对象。此时就需要将基本数据类型的变量转换为
           包装类的对象。比如:ArrayList的add(Object obj);Object类的equals(Object obj)
         > 对于包装类来讲,既然我们使用的是对象,那么对象是不能进行+ - * /等运算的。为了能够进行这些运算,就
           需要将包装类的对象转换为基本数据类型的变量。

   3.2 如何转换:
        基本数据类型 ---> 包装类:① 使用包装类的构造器 ② (建议)调用包装类的valueOf(xxx xx)
        包装类 ---> 基本数据类型:调用包装类的xxxValue()
      注意:原来使用基本数据类型变量的位置,改成包装类以后,对于成员变量来说,其默认值变化了!

      jdk5.0新特性:自动装箱、自动拆箱。

4. String 与 基本数据类型、包装类之间的转换。

   基本数据类型、包装类 ---> String类型:① 调用String的重载的静态方法valueOf(xxx xx) ; ② 基本数据类型的变量 + ""


   String类型 ---> 基本数据类型、包装类:parseXxx()

2.10 综合

1. 谈谈你对面向对象的理解(君*科技、航*拓普、...)
  • 面向对象的两个要素:类、对象 ---> 面向对象编程。“万事万物皆对象”。

  • 面向对象的三大特征

  • 接口,与类并列的结构,作为一个补充:类可以实现多个接口。

2. 面向对象的特征有哪些方面? (北京楚*龙、深圳德*科技、直*科技、米*奇网络、航*拓普)
类似问题:
> 面向对象核心是什么?(平**服)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值