2023年Java核心技术面试第八篇(篇篇万字精讲)

目录

十五 . 面向对象的基本要素:封装,继承,多态

 15.1 封装:

15.1.1 例子:

15.2 继承

15.2.1 例子

15.3 多态

15.3.1 例子

15.3.2 小结:谈谈多态的继承的联系


十五 . 面向对象的基本要素:封装,继承,多态

 15.1 封装:

封装:封装是将数据和功能包装在一个类中,通过对外提供公共接口来隐藏内部实现细节。这样可以保护数据免受外部直接访问和修改,只能通过类提供的方法进行操作,封装提供了数据的安全性和代码的可维护性。

15.1.1 例子:

我们可以创建一个名为"Person"的类来封装一个人的相关信息,如姓名、年龄和性别。通过定义公共方法如"setName"、"setAge"和"setGender"来设置这些属性值,而不直接暴露给外部代码。这样可以确保属性值的正确性和一致性。

public class Person {private String name;private int age;private String gender;public Person(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public static void main(String[] args) {Person person = new Person("John", 25, "Male");System.out.println("Person Name: " + person.getName());System.out.println("Person Age: " + person.getAge());System.out.println("Person Gender: " + person.getGender());// 修改属性值person.setName("Alice");person.setAge(30);person.setGender("Female");System.out.println("Updated Person Name: " + person.getName());System.out.println("Updated Person Age: " + person.getAge());System.out.println("Updated Person Gender: " + person.getGender());}
}

15.2 继承

继承:继承是指一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。

子类继承了父类的特性,并且可以在此基础上进行扩展或重写。继承实现了代码的重用和扩展性。

15.2.1 例子

我们可以定义一个"Animal"类作为父类,其中包含通用的属性和方法,如"eat"和"sleep"。然后可以创建子类如"Cat"和"Dog"来继承"Animal"类,并在子类中添加特定的属性和方法,如"meow"方法和"bark"方法。

// 定义父类 Animal
class Animal {// 父类的属性protected String name;// 父类的方法public Animal(String name) {this.name = name;}public void eat() {System.out.println(name + " is eating.");}public void sleep() {System.out.println(name + " is sleeping.");}
}// 定义子类 Cat
class Cat extends Animal {// 子类的属性private String breed;// 子类的方法,并调用父类的构造方法public Cat(String name, String breed) {super(name); // 调用父类的构造方法this.breed = breed;}// 子类的自定义方法public void meow() {System.out.println(name + " is meowing.");}
}// 定义子类 Dog
class Dog extends Animal {// 子类的属性private String breed;// 子类的方法,并调用父类的构造方法public Dog(String name, String breed) {super(name); // 调用父类的构造方法this.breed = breed;}// 子类的自定义方法public void bark() {System.out.println(name + " is barking.");}
}// 测试代码
public class Main {public static void main(String[] args) {Cat cat = new Cat("Kitty", "Persian");cat.eat(); // 调用继承自父类的方法cat.sleep();cat.meow(); // 调用子类自定义的方法Dog dog = new Dog("Buddy", "Labrador");dog.eat(); // 调用继承自父类的方法dog.sleep();dog.bark(); // 调用子类自定义的方法}
}

输出:

Kitty is eating.
Kitty is sleeping.
Kitty is meowing.
Buddy is eating.
Buddy is sleeping.
Buddy is barking.

15.3 多态

多态:多态是指同一种操作可以作用于不同的对象,并根据对象的实际类型执行不同的行为。通过多态,可以提高代码的灵活性和可扩展性。

15.3.1 例子

定义了一个抽象类 Animal,并具有一个抽象方法 sound。然后,定义了两个子类 CatDog,它们分别继承自 Animal 并实现了 sound 方法。

在测试类中,创建了一个 Animal 类型的对象数组,并分别用 CatDog 的实例来初始化数组的元素。然后通过循环遍历数组,并调用 sound 方法,可以看到根据对象的实际类型,程序会执行不同的行为。这就是多态的体现,相同的方法名 sound 可以作用于不同的对象,并根据对象的实际类型执行不同的行为。

// 定义父类 Animal
abstract class Animal {abstract void sound();
}// 定义子类 Cat
class Cat extends Animal {void sound() {System.out.println("喵喵喵");}
}// 定义子类 Dog
class Dog extends Animal {void sound() {System.out.println("汪汪汪");}
}// 测试类
public class PolymorphismExample {public static void main(String[] args) {// 创建 Animal 对象数组Animal[] animals = new Animal[2];animals[0] = new Cat();animals[1] = new Dog();// 循环遍历数组并调用 sound 方法for (Animal animal : animals) {animal.sound();}}
}

15.3.2 小结:谈谈多态的继承的联系

继承是建立类之间的一种层次关系,子类可以继承父类的属性和方法,并且可以增加自己的特定实现;而多态是在继承关系中,通过父类的类型引用来指向子类的对象,并且根据对象的实际类型执行不同的行为。继承是一种静态的关系,而多态是一种动态的行为。继承和多态通常是一起使用,多态是继承的一种体现。

十六 . synchronized 和 ReentrantLock 的区别?

 Java精心设计的高效并发机制,构建大规模应用的基础之一。

16.1 典型回答

synchronized 是Java内建的同步机制,也被人称作Intrinsic Locking,提供互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞在哪里。

Java 5 以前,synchronized 是仅有的同步手段,在代码中,synchronized可以用来修饰方法,可以在特定的代码快上,本质上synchronized方法,等同于把方法全部语句用synchronized块包起来。

ReentrantLock ,通常称为再入锁,Java提供锁的实现,语义和synchronized差不多,再入锁可以直接通过代码,直接调用Lock()方法获取,代码书写更加灵活,ReentrantLock提供了很多实用的方法,实现了很多synchronized无法做到的细节控制,可以控制fairness,也就是公平性,或者利用定义条件等,明确调用unlock()方法释放,不然就会一直持有这个锁。

synchronized和ReentrantLock的性能比较,早期synchronized再很多场景下性能相差比较大,后续进行改进后,再低竞争的场景表现可能优于ReentrantLock。

16.2 深入理解底层锁的概念

16.2.1 synchronized

16.2.2 ReentrantLock

ReentrantLock是Java提供的可重入锁实现,它具有更细粒度的控制和更多的功能。相较于synchronizedReentrantLock提供了以下优势:

  1. 公平性(Fairness)控制:ReentrantLock可以通过构造方法的参数来指定是否按照线程请求锁的顺序获取锁(公平性),以避免某些线程长时间等待锁而产生饥饿现象。
  2. 可中断性(Interruptibility):ReentrantLock提供了可中断的获取锁的方法,即线程在等待锁的过程中可以被其他线程中断,并通过捕获InterruptedException来处理中断事件。
  3. 条件变量(Condition)支持:ReentrantLock内置了Condition接口,可以创建多个条件变量,使线程能够在特定条件满足时等待或被唤醒,从而实现更灵活的线程协作。
  4. 超时控制(Timeout):ReentrantLock提供了尝试获取锁的方法,可以指定一个超时时间,在超过指定时间后如果无法获得锁,则继续执行其他操作,避免线程长时间等待。

在高竞争的多线程场景下,ReentrantLock通常表现更好,因为它提供了对锁的更细粒度的控制,并且支持更多的高级功能。

16.2.2.1 例子:

16.2.2.1.1 公平性(Fairness)控制:
16.2.2.1.2 可中断性(Interruptibility):
16.2.2.1.3 条件变量(Condition)支持:
16.2.2.1.4 超时控制(Timeout):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/53709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux--进程地址空间

1.线程地址空间 所谓进程地址空间(process address space),就是从进程的视角看到的地址空间,是进程运行时所用到的虚拟地址的集合。 简单地说,进程就是内核数据结构和代码和本身的代码和数据,进程本身不能…

【Linux】socket 编程基础

文章目录 📕 网络间的通信📕 socket 是什么1. socket 套接字2. 套接字描述符3. 基本的 socket 接口函数3.1 头文件3.2 socket() 函数3.3 bind() 函数struct sockaddr主机序列与网络序列 3.4 listen() 函数3.5 connect() 函数3.6 accept() 函数IP 地址风格…

3.BGP状态机和路由注入方式

BGP状态机 BGP路由的生成 不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将GP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。 BGP注入路由的方式有两种: Networkimport-route与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由…

Java 时间日期处理,工作必用(建议收藏)

工作中经常会遇到对时间日期进行处理的业务,像日期类的API个人觉得不需要背,需要的时候去查资料就行。我整理了Java8之前及之后日期类常用的时间日期处理方法,方便工作需要时查找,觉得有用的朋友可以收藏。 一、日期格式化和解析 …

linux挂载内网镜像源文件,支持yum安装

cd /etc/yum.repos.d/vim kylin_aarch64.repo 重建yum缓存 yum clean allyum makecacheyum repolist

RH1288V3 - 初识物理服务器

如果你拥有一台物理服务器(不是云服务器) 个人比较推荐你用物理服务器,虽然性能会比云要来的差,但是不用每月交钱上。云服务固然方便,但是几个核的性能和一点存储,想做一个动漫网站固然要很多mp4这种影视资源,云服务器…

设计模式二十一:状态模式(State Pattern)

一个对象的内部状态发生变化时,允许对象改变其行为。这种模式使得一个对象看起来好像在运行时改变了它的类,主要目的是将状态的行为从主要对象中分离出来,使得主要对象不必包含所有状态的逻辑,而是将每个状态的行为封装在独立的类…

积跬步至千里 || 数学基础、算法与编程

数学基础、算法与编程 1. BAP 技能 BAP 技能是指基础(Basic)、算法(Algorithm)和编程(Programm)三种基本技能的深度融合。理工科以数学、算法与编程为根基,这三个相辅相成又各有区别。 (1)数学以线性代数为主要研究工具和部分微积分技术为手…

最新绕过目标域名CDN进行信息收集技术

绕过目标域名CDN进行信息收集 1.CDN简介及工作流程 CDN(Content Delivery Network,内容分发网络)的目的是通过在现有的网络架构中增加一层新的Cache(缓存)层,将网站的内容发布到最接近用户的网…

打开软件提示msvcp140.dll丢失的解决方法,msvcp140主要丢失原因

今天,我将为大家介绍一种非常常见的问题——msvcp140.dll丢失。这个问题可能会导致许多应用程序无法正常运行,甚至崩溃。但是,请不要担心,我会为大家提供5种解决方法,帮助大家轻松解决问题。 首先,我们来看…

Android 全局监听软键盘弹起隐藏 动态修改布局并适配无限循环的问题

思路: 要在 Android 应用中全局检测软键盘的弹起,您可以使用 ViewTreeObserver.OnGlobalLayoutListener 监听器来监听布局树的变化。当软键盘弹起或隐藏时,布局树会发生变化,因此您可以在监听器中捕获这些变化。 以下是一个示例…

单片机学习-蜂鸣器电子元件

蜂鸣器是有什么作用的? 蜂鸣器 是 一种 一体化结构 的电子训响器,可以发出声音的电子元器件 蜂鸣器分类? ①压电式蜂鸣器(图左) 称: 无源蜂鸣器 ②电磁式蜂鸣器(图右) 称&#xf…

陪诊系统源码开发:实现个性化医疗陪护的创新之路

陪诊系统的源码开发在现代医疗中具有重要意义。本文将通过代码示例介绍陪诊系统的源码开发,展示如何实现个性化医疗陪护的创新方案。 1. 安装和环境设置: 首先,确保你的开发环境中已经安装了合适的编程语言和框架,比如Python和…

人力资源小程序的设计原则与实现方法

随着移动互联网的快速发展,小程序成为了各行各业推广和服务的新利器。对于人力资源行业来说,开发一款定制化的小程序不仅可以提升服务效率,还可以增强品牌形象和用户粘性。那么,如何定制开发人力资源类的小程序呢?下面…

使用Miniconda

Conda是一个开源的包和环境管理器,使用它可以在同一台机器上安装不同版本的Python软件包和依赖了。Anaconda和Miniconda都集成了Conda,Anaconda包括更多的工具包,Miniconda则只包括Conda和Python。 在很奇葩的Deepin下Miniconda安装之旅 中,…

8路光栅尺磁栅尺编码器或16路高速DI脉冲信号转Modbus TCP网络模块 YL99-RJ45

特点: ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 高速光栅尺磁栅尺4倍频计数,频率可达5MHz ● 模块可以输出5V的电源给光栅尺或传感器供电 ● 支持8个光栅尺同时计数,可识别正反转 ● 可以设置作为16路独立DI高速计数器 ● 可网…

探讨uniapp的组件使用的问题

1 view Flex是Flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性。 当设置display: flex后,继续给view等容器组件设置flex-direction:row或column,就可以在该容器内按行或列排布子组件。uni-app推荐使用flex布…

LeetCode——有效的括号

这里,我提供一种用栈来解决的方法: 思路:栈的结构是先进后出,这样我们就可以模拟栈结构了,如果是‘(’、‘{’、‘[’任何一种,直接push进栈就可以了,如果是‘}’、‘)’…

Windows部署SQL Server-开发者版

一、简介 SQL Server 开发者版本,是一个为开发人员准备的版本。它是免费的,但不能在生产中使用它。它包含所有 SQL Server 企业版的功能,但不能在生产中部署,是一个用于非生产环境的免费版本。 二、下载 访问 https://www.mic…

Zabbix监控系统最新版安装

setenforce 0 设置SELinux 成为permissive模式 临时关闭selinux的 [rootwww yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo % Total % Received % Xferd Average Speed Time Time Time Current …