⛳ java中抽象类

news/2024/4/17 7:45:20

⛳ java中抽象类

Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类用abstract关键字来修饰。

🎨 特点:

  1. 抽象类不能被实例化:抽象类不能被直接实例化,因为它只是一个模板或者说是一个蓝图,需要子类继承并实现它的抽象方法才能被实例化。
  2. 抽象类可以包含抽象方法:抽象方法是没有实现的方法,只有方法的声明,没有方法体。抽象类中可以包含抽象方法,子类必须实现这些抽象方法。
  3. 抽象类可以包含实现方法:抽象类中可以包含实现方法,子类可以直接继承并使用这些实现方法。
  4. 抽象类可以包含构造方法:抽象类可以包含构造方法,但是不能被实例化,所以构造方法只能被子类调用。
  5. 抽象类可以被继承:抽象类可以被子类继承,子类必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类。
  6. 抽象类可以实现接口:抽象类可以实现接口,这样子类就可以继承抽象类并实现接口。

总之,抽象类是一种用于封装、继承和多态的重要机制。通过抽象类,我们可以定义一些通用的方法和属性,并在子类中进行具体实现。

🐾 例子:

以下是一个抽象类的例子:

public abstract class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void makeSound();
}

在这个例子中,Animal类是一个抽象类,它有一个抽象方法makeSound(),这个方法必须在子类中被实现。Animal类还有两个实例变量name和age,以及一个构造方法。由于Animal类是抽象的,所以不能被实例化,只能被继承。

以下是一个数据库连接基础类:

public abstract class BaseDAO<T> {public final String DRIVER = "com.mysql.jdbc.Driver" ;public final String URL = "jdbc:mysql://localhost:3306/fruitdb?useUnicode=true&characterEncoding=utf-8&useSSL=false";public final String USER = "root";public final String PWD = "123456" ;protected Connection conn ;protected PreparedStatement psmt ;protected ResultSet rs ;//T的Class对象private Class entityClass ;public BaseDAO(){//getClass() 获取Class对象,当前我们执行的是new FruitDAOImpl() , 创建的是FruitDAOImpl的实例//那么子类构造方法内部首先会调用父类(BaseDAO)的无参构造方法//因此此处的getClass()会被执行,但是getClass获取的是FruitDAOImpl的Class//所以getGenericSuperclass()获取到的是BaseDAO的ClassType genericType = getClass().getGenericSuperclass();//ParameterizedType 参数化类型Type[] actualTypeArguments = ((ParameterizedType) genericType).getActualTypeArguments();//获取到的<T>中的T的真实的类型Type actualType = actualTypeArguments[0];try {entityClass = Class.forName(actualType.getTypeName());} catch (ClassNotFoundException e) {e.printStackTrace();}}protected Connection getConn(){try {//1.加载驱动Class.forName(DRIVER);//2.通过驱动管理器获取连接对象return DriverManager.getConnection(URL, USER, PWD);} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}return null ;}protected void close(ResultSet rs , PreparedStatement psmt , Connection conn){try {if (rs != null) {rs.close();}if(psmt!=null){psmt.close();}if(conn!=null && !conn.isClosed()){conn.close();}} catch (SQLException e) {e.printStackTrace();}}//给预处理命令对象设置参数private void setParams(PreparedStatement psmt , Object... params) throws SQLException {if(params!=null && params.length>0){for (int i = 0; i < params.length; i++) {psmt.setObject(i+1,params[i]);}}}//执行更新,返回影响行数protected int executeUpdate(String sql , Object... params){boolean insertFlag = false ;insertFlag = sql.trim().toUpperCase().startsWith("INSERT");try {conn = getConn();if(insertFlag){psmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);}else {psmt = conn.prepareStatement(sql);}setParams(psmt,params);int count = psmt.executeUpdate() ;if(insertFlag){rs = psmt.getGeneratedKeys();if(rs.next()){return ((Long)rs.getLong(1)).intValue();}}return count ;} catch (SQLException e) {e.printStackTrace();}finally {close(rs,psmt,conn);}return 0;}//通过反射技术给obj对象的property属性赋propertyValue值private void setValue(Object obj ,  String property , Object propertyValue){Class clazz = obj.getClass();try {//获取property这个字符串对应的属性名 , 比如 "fid"  去找 obj对象中的 fid 属性Field field = clazz.getDeclaredField(property);if(field!=null){field.setAccessible(true);field.set(obj,propertyValue);}} catch (NoSuchFieldException | IllegalAccessException e) {e.printStackTrace();}}//执行复杂查询,返回例如统计结果protected Object[] executeComplexQuery(String sql , Object... params){try {conn = getConn() ;psmt = conn.prepareStatement(sql);setParams(psmt,params);rs = psmt.executeQuery();//通过rs可以获取结果集的元数据//元数据:描述结果集数据的数据 , 简单讲,就是这个结果集有哪些列,什么类型等等ResultSetMetaData rsmd = rs.getMetaData();//获取结果集的列数int columnCount = rsmd.getColumnCount();Object[] columnValueArr = new Object[columnCount];//6.解析rsif(rs.next()){for(int i = 0 ; i<columnCount;i++){Object columnValue = rs.getObject(i+1);     //33    苹果      5columnValueArr[i]=columnValue;}return columnValueArr ;}} catch (SQLException e) {e.printStackTrace();} finally {close(rs,psmt,conn);}return null ;}//执行查询,返回单个实体对象protected T load(String sql , Object... params){try {conn = getConn() ;psmt = conn.prepareStatement(sql);setParams(psmt,params);rs = psmt.executeQuery();//通过rs可以获取结果集的元数据//元数据:描述结果集数据的数据 , 简单讲,就是这个结果集有哪些列,什么类型等等ResultSetMetaData rsmd = rs.getMetaData();//获取结果集的列数int columnCount = rsmd.getColumnCount();//6.解析rsif(rs.next()){T entity = (T)entityClass.newInstance();for(int i = 0 ; i<columnCount;i++){String columnName = rsmd.getColumnName(i+1);            //fid   fname   priceObject columnValue = rs.getObject(i+1);     //33    苹果      5setValue(entity,columnName,columnValue);}return entity ;}} catch (SQLException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} finally {close(rs,psmt,conn);}return null ;}//执行查询,返回Listprotected List<T> executeQuery(String sql , Object... params){List<T> list = new ArrayList<>();try {conn = getConn() ;psmt = conn.prepareStatement(sql);setParams(psmt,params);rs = psmt.executeQuery();//通过rs可以获取结果集的元数据//元数据:描述结果集数据的数据 , 简单讲,就是这个结果集有哪些列,什么类型等等ResultSetMetaData rsmd = rs.getMetaData();//获取结果集的列数int columnCount = rsmd.getColumnCount();//6.解析rswhile(rs.next()){T entity = (T)entityClass.newInstance();for(int i = 0 ; i<columnCount;i++){String columnName = rsmd.getColumnName(i+1);            //fid   fname   priceObject columnValue = rs.getObject(i+1);     //33    苹果      5setValue(entity,columnName,columnValue);}list.add(entity);}} catch (SQLException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} finally {close(rs,psmt,conn);}return list ;}
}

http://www.ppmy.cn/news/252529.html

相关文章

什么软件可以测试麦克风音质,怎么测试麦克风

怎么测试麦克风 内容精选 换一换 址:《大史住在大前端》原创博文目录华为云社区地址:【你要的前端打怪升级指南】JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据一. PCM格式是什么二. 浏览器中的音频采集处理三. 需求实现方案1——服务端FFmpeg实现编…

android 麦克风 动画,录音麦克风动画效果

我们常用的语音输入法会根据我们说话的大小产生一些波动动画,那么这个动画是怎么实现的呢?其实很简单。原理:一张空的麦克风图像,一张满的麦克风图像,先绘制一张空的,然后再绘制一些满的,但是满的绘制之前,有一个圆形的clip区域,这个区域就是用来显示满的显示多少。另…

计算机麦克风测试,如何进行电脑话筒测试?电脑麦克风如何设置?

如何进行电脑话筒测试?电脑麦克风如何设置? 2015-09-25 电脑使我们的生活越来越方便快捷,它是我们生活和工作之中不可缺少的一部分。当我们拥有一台新电脑的时候,如何进行电脑话筒测试?电脑麦克风如何设置?相信有很多朋友会对这些问题感到苦恼,那么下面就由小编为大家介…

java话筒音频_Java调用麦克风话筒和扬声器喇叭进行实时播放

Java调用麦克风话筒和扬声器喇叭进行实时播放 2018-01-12Mr.Xia 4433 次浏览 Java调用麦克风和扬声器实时播放 ``` package com.zhenzhigu.demo; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.SourceDataLine…

C#混音同时录制采集声卡和麦克风话筒

在项目中,我们可能需要同时录制声卡的声音和麦克风的声音,比如直播间,在线教学。那么如何实现呢&#xff1f;当然是采用SharpCapture&#xff01;下面开始演示关键代码&#xff0c;您也可以在文末下载全部源码: 设置授权 第一步&#xff1a;在引用了SharpCapture.dll之后&…

C#采集麦克风话筒声音

在项目中,我们会需要录制麦克风的声音。比如录制QQ聊天时自己说的话。那么如何采集呢&#xff1f;当然是采用SharpCapture&#xff01;下面开始演示关键代码&#xff0c;您也可以在文末下载全部源码: 设置授权 第一步&#xff1a;在引用了SharpCapture.dll之后&#xff0c;调…

LLMs:自然语言处理领域—大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq)、十大核心组件之详细攻略

LLMs:自然语言处理领域—大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq)、十大核心组件之详细攻略 目录 LLMs涉及技术领域的简介 1、迁移学习:特征提取、微调 2、无监督学习技术

6/5~6/6总结

创建存储过程 DELIMITER // CREATE PROCEDURE usingid() BEGIN SELECT AVG(id) FROM user; END // DELIMITER ; 要用DELIMITER //指定结束符为 "//", 要调用该存储过程&#xff1a; CAll usingid; 创建成功后在navicat里面的函数界面可以看见刚刚创建的存储过程…

搭建mysql主从服务

一.环境 基于docker搭建环境。 使用mysql版本5.7.4 二.搭建mysql主 docker run \ --name mysqlmaster \ -e MYSQL_ROOT_PASSWORD123456 \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/config:/etc/mysql/conf.d \ -p 5132:3306 \ -d mysql:5.7.4 2.在主服务…

AIGC资源整理

这几个月我深入研究了AIGC&#xff0c;同时业翻阅和搜集了大量的资料&#xff0c;累计也花了1000去买了各种信息源 为了方便我的好朋友们学习&#xff0c;我将那些优质的免费信息源和工具&#xff0c;都进行了整理。 如果你也想学习AIGC、ChatGPT相关的内容&#xff0c;那么我很…

工控系统概述

工业控制系统安全-工控系统概述 简短介绍工控系统架构、组成部分、功能以及术语等方面&#xff0c;掌握基本工控系统知识。工控系统指的是工业自动化控制系统&#xff0c;主要利用电子电气、机械、软件组合实现。主要是使用计算机技术&#xff0c;微电子技术&#xff0c;电气手…

工控机专业知识解析

工控机专业知识解答 什么是工控机&#xff1f; 工控机是一种特定类型的计算系统&#xff0c;用于管理机器自动化、制造设备和新时代自主机器人的各种工厂和工业工作负荷。 工控机在工业4.0的核心推动了效率和洞察力的提高。工控机的设计和制造能够承受各种工业环境的挑战性物…

基于stm32的超声波测距

文章目录 一、HC-SR04超声波测距模块说明1、产品特点2、电气参数3、HC-SR04超声波测距模块4、超声波时序图 二、 CUBEMX配置三、keil配置代码 模块选择&#xff1a; stm32f103c8芯片 HC-SR04超声波测距模块 一、HC-SR04超声波测距模块说明 1、产品特点 HC-SR04 超声波测距模块…

低成本的电流检测电路

由于产品成本的降低&#xff0c;原先使用的电流保护芯片必须更换为更低成本的电路&#xff0c;于是便有了以下的电路&#xff1a; 如上图&#xff0c;电流检测部分为R324那部分的电路 原理如下&#xff1a; R324为采样电阻&#xff0c;CURRENT0为需要采集的AD电压值&#xff…

半导体测试机ATE简介

ATE&#xff08;AUTOMATIC TEST EQUIPMENT&#xff09;在半导体产业通常指半导体测试设备&#xff0c;是一种集成了多种高精度、高性能 测试测量功能的高端半导体设备&#xff0c;是半导体测试过程中最重要的设备&#xff0c;决定了半导体测试的成本和效率。 •半导体测试贯穿…

峰值检测电路和精密整流电路

峰值检测电路和精密整流电路 峰值检测电路概念最简单的峰值检测改进的峰值检测电路-1改进的峰值检测电路-2总结其他电路 精密整流电路概念半波精密整流全波精密整流和非等权精密整流TINA-TI仿真 峰值检测电路 概念 峰值检测电路&#xff08;PKD, Peak Detector&#xff09; 概…

集成电路中测试概述(三)

这篇文章讲一下基于JTAG 的可测性设计。 JTAG也称作边界扫描&#xff0c;最初是由欧洲的一些测试工程师提出的标准&#xff0c;该种测试技术指的是在芯片的边界上加上串行移位寄存器&#xff0c;以实现对芯片的测试&#xff0c;这种技术称为边界扫描。下图是边界扫描寄存器的原…

2019电赛D题方案:简易电路特性测试仪

一、题目 二、评分标准 三、题目分析与测量原理 此题设计两部分电路&#xff0c;一个是由S9013组成的基本放大电路&#xff0c;另一个是电路特性测试仪。前者是被测对象&#xff0c;涉及一个输入测试信号&#xff08;1KHz&#xff0c;Vpp10mV&#xff09;和一个输出信号&#…

纳米软件关于集成电路测试的分类介绍

集成电路测试可以按照测试目的、测试内容、按照器件开发和制造阶段分类。参照需要达到的测试目的对集成电路测试进行分类&#xff0c;可以分为:验证测试、制造测试、老化测试、入厂测试等。按照测试所涉及内容&#xff0c;集成电路测试可分为:参数测试、功能测试、结构测试等。…

什么软件可以测试电路板,在线测试仪的功能及在电路板维修中的应用

在线测试仪&#xff0c;顾名思义&#xff0c;就是一款测试和维修PCBA板的工具。它可以完成对所有的中小型数字集成电路、存储器还有一些大规模集成电路芯片的在线和离线功能测试。还可以对PCB板上任意一点进行V-I曲线的测试等。 在线测试仪的主要功能 1、功能测试 功能测试简写…
最新文章