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

来源:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)

基本都是宋老师发的资料里面的内容,只不过补充几个资料里没直接给出答案的问题的答案。
不想安装markdown笔记的app所以干脆在这里发一遍。

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


一、随堂复习

1. 关键字:static

  • static:静态的,随着类的加载而加载、执行。

  • static用来修饰:属性、方法、代码块、内部类(不能修饰构造器!!!)

  • 熟悉:static修饰的类变量、类方法与不使用static修饰的区别。

    • 类变量:类的生命周期内,只有一个。被类的多个实例共享。
  • 掌握:我们遇到属性或方法时,需要考虑是否声明为static的。

2. 单例模式(或单子模式)

  • 经典的设计模式有23种
  • 解决的问题:在整个软件系统中,只存在当前类的唯一实例。
  • 实现方式:饿汉式、懒汉式、枚举类等
  • 对比饿汉式和懒汉式
    • 饿汉式:“立即加载”,生命周期长,线程安全的。
public class BankTest {
    public static void main(String[] args) {
        Bank bank1 = Bank.getInstance();
        Bank bank2 = Bank.getInstance();
        System.out.println(bank1 == bank2); //实际上是同一个对象
    }
}

//饿汉式
class Bank{
    //1.类的构造器私有化
    private Bank(){

    }

    //2.内部提供当前类的实例,即内部构建对象
    //4.此时,对象也要静态
    private static Bank instance = new Bank();

    //3.提供公共的静态方法,返回当前对象
    public static Bank getInstance(){
        return instance;
    }
}
  • 懒汉式:“延迟加载”,线程不安全。
public class GirlfriendTest {
    public static void main(String[] args) {

    }
}

//懒汉式
class Girlfriend{

    //1.类的构造器私有化
    private Girlfriend(){

    }

    //2.声明当前类的实例
    //4.此时,对象也要静态
    private static Girlfriend instance = null;

    //3.获取当前类的实例,如果未创建对象,则在方法内部创建
    public static Girlfriend getInstance(){
        if (instance == null){
            instance = new Girlfriend();
        }
        return instance;
    }
}
  • 需要会手写饿汉式和懒汉式

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. 面向对象的特征有哪些方面? (北京楚*龙、深圳德*科技、直*科技、米*奇网络、航*拓普)
类似问题:
> 面向对象核心是什么?(平**服)

你可能感兴趣的:(Java学习相关,java)