EL表达式和JSTL标签

news2024/11/27 14:35:15

1.1.  EL表达式概述

EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。

EL表达式的格式:${…},例如:${1+2}。

在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式。

如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:\${1+2}。

1.2.  EL表达式运算

运算符

说明

范例

结果

+

${17+5}

22

-

${17-5}

12

*

${17*5}

85

/或div

${17/5}或${17 div 5}

3

%或mod

取余

${17%5}或${17 mod 5}

2

==或eq

等于

${5==5}或${5 eq 5}

TRUE

!=或ne

不等于

${5!=5}或${5 ne 5}

FALSE

小于

${3

TRUE

>或gt

大于

${3>5}或${3 gt 5}

FALSE

小于等于

${3

TRUE

>=或ge

大于等于

${3>=5}或${3 ge 5}

FALSE

&&或and

并且

${true&&false}或${true and false}

FALSE

!或not

${!true}或${not true}

FALSE

||或or

或者

${true||false}或${true or false}

TRUE

empty

是否为空

${empty “”},可以判断字符串、数组、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”}

TRUE

<h1>EL表达式运算测试</h1>
<p>\${1+1}</p>
<p>${2-1}</p>
<p>${2*3}</p>
<p>${9/3}</p>
<p>${9%3}</p>
<p>${9 div3}</p>
<p>${9 mod3}</p>

<p>${9 == 3}  ${"a" eq "a"}</p>
<p>${9 != 3}  ${"a" ne "a"}</p>
<p>${9 > 3}  ${9 < 3}</p>
<p>${9 lt 3}  ${9 gt 3}</p>
<p>${9 >= 3}  ${9 <= 3}</p>
<p>${9 >= 3&& 10 >= 3}  ${9 <= 3 and 8<= 3}</p>
<p>${ !(9 >=33)}  ${not (9 <= 3) }</p>
<p>${9 >= 3 || 10>= 3}  ${9 <= 3 or 3 <=8}</p>
<p>${not empty""} </p>
<p>${empty null}</p>

1.3.  EL表达式操作对象(熟练)

  • 操作变量和常量:${name}、${8}; java  jspj存在java片段的
  •   操作List和数组:${list[0]}、${arr[0]};
  •   操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;
  •   操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。

1.4.  EL表达式内置对象(了解)jsp 9个   11个

在EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含、内置)对象。在EL中一共有11个隐藏对象,它们都与Map(key-value)相似。其中10个是Map,一个是 PageContext;

1.4.1.  参数隐藏对象

①param:param是Map类型!param对象可以用来获取参数,与request.getParameter()方法相同。Url  key 

注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

②paramValues:paramValues是Map类型,当一个参数名,对应多个参数值时可以使用它。

 ③header:header是Map类型,用来获取请求头。

④headerValues:headerValues是Map类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。

⑤initParam:initParam是Map类型。它对应web.xml文件中的参数。

 ⑥cookie:cookie是Map类型,其中key是Cookie的名字,而值是Cookie对象本身。

1.4.2 域隐藏对象

使用EL表达式最为常用的就是获取域对象中保存的数据。例如:${pageScope.xxx},表示获取在pageContext保存的数据。当然${pageScope[‘xxx’]}是相同的!

pageScope:pageScope是Map类型,${pageScope.xxx}的功能相等与pageContext.getAttribute(“xxx”)。两者的区别在于,前者在数据不存在时返回空字符串,而后者返回null。

⑦requestScope:requestScope是Map类型,装载了request对象中的所有数据;

⑧sessionScope:sessionScope是Map类型,装载了session对象中的所有数据;

⑨applicationScope:applicationScope是Map类型,装载了application对象中的所有数据;

当EL中给出的不是隐藏对象时,表示在四个域中查找数据。例如:${a},表示

  •   在${pageScope.a}中查找,如果找到就返回;
  •   在${requestScope.a}中查找,如果找到就返回;
  •   在${sessionScope.a}中查找,如果找到就返回;
  •   在${applicationScope.a}中查找,如果找到就返回,找不到就返回空字符串。

1.4.3.  PageContext对象

pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest,可以${pageContext.request}。

Expression

说明

${pageContext.request.queryString}

pageContext.getRequest().getQueryString();

${pageContext.request.requestURL}

pageContext.getRequest().getRequestURL();

${pageContext.request.contextPath}

pageContext.getRequest().getContextPath();

${pageContext.request.method}

pageContext.getRequest().getMethod();

${pageContext.request.protocol}

pageContext.getRequest().getProtocol();

${pageContext.request.remoteUser}

pageContext.getRequest().getRemoteUser();

${pageContext.request.remoteAddr}

pageContext.getRequest().getRemoteAddr();

${pageContext.session.new}

pageContext.getSession().isNew();

${pageContext.session.id}

pageContext.getSession().getId();

${pageContext.servletContext.serverInfo}

pageContext.getServletContext().getServerInfo();

2.1.  JSTL概述

2.1.1.  什么是JSTL

JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。既然是第三方的东西,那么就需要导包。但是如果你使用的是MyEclipse,那么MyEclipse会帮你导包的。

2.1.2.  导入标签库

导入标签库需要使用taglib指令!

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fun" uri="http://java.sun.com/jsp/jstl/functions" %>

2.2.  JSTL核心库

2.2.1.  c:out和c:set

①c:out

<c:out value=”aaa”/>  输出aaa字符串常量
<c:out value=”${aaa}”/>  与${aaa}相同
<c:out value=”${aaa}” default=”xxx”/> 当${aaa}不存在时,输出xxx字符串

   当escapeXml为false,不会转换“”、“>”。这可能会受到JavaScript攻击。

②c:set

”a” value=”hello”/> 在pageContext中添加name为a,value为hello的数据。

”a” value=”hello” scope=”session”/>   在session中添加name为a,value为hello的数据。

2.2.2.  c:if和c:choose(熟练)

①c:if

if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。

②c:choose

choose标签对应Java中的if/else if/else结构

when标签的test为true时,会执行这个when的内容。

当所有when标签的test都为false时,才会执行otherwise标签的内容

 

2.2.3.  c:forEach

forEach当前就是循环标签了,可以进行

基本遍历:

下面例子中设置域变量i,初始值为1,结束值为10。即i的值从1遍历到10,包含10。

<c:forEach begin="1" end="10" var="i">
    <c:out value="${i}"/>
</c:forEach>

 

遍历数组:

<c:forEach items="${strs}" var="str">
    <c:out value="${str}"/><br>
</c:forEach>

遍历集合:

<%
    List<String> strs = new ArrayList<String>();
    strs.add("A");
    strs.add("B");
    strs.add("C");
    strs.add("D");
    request.setAttribute("strs",strs);
%>
<c:forEach items="${strs}" var="str">
    <c:out value="${str}"/><br>
</c:forEach>

遍历Map:

<%
    Map<String,String> map = new HashMap<String,String>();
    map.put("username","txjava");
    map.put("password","tx123456");
    map.put("age","20");
    map.put("address","中国");
    request.setAttribute("users",map);
%>
<c:forEach items="${users}" var="user">
    <c:out value="${user.key}"/>:<c:out value="${user.value}"/><br>
</c:forEach>

 

varStatus:

forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。

current当前这次迭代的(集合中的)项

index当前这次迭代从 0 开始的迭代索引

count当前这次迭代从 1 开始的迭代计数

first用来表明当前这轮迭代是否为第一次迭代的标志last用来表明当前这轮迭代是否为最后一次迭代的标志

<%
    List<String> users = new ArrayList<String>();
    users.add("A");
    users.add("B");
    users.add("C");
    users.add("D");
    request.setAttribute("users",users);
%>
<table border="1">
        <tr>
            <td>index</td>
            <td>count</td>
            <td>first</td>
            <td>last</td>
            <td>value</td>
        </tr>
    <c:forEach items="${users}" var="user" varStatus="vs">
        <tr>
            <td> <c:out value="${vs.index}"/></td>
            <td> <c:out value="${vs.count}"/></td>
            <td> <c:out value="${vs.first}"/></td>
            <td> <c:out value="${vs.last}"/></td>
            <td> <c:out value="${user}"/></td>
        </tr>
    </c:forEach>
</table>

 

如果对集合进行遍历,没有输出结果,那么请检查你的EL表达式内的变量名称是否正确

2.3.  JSTL格式化标签库

导入标签库需要使用taglib指令!

http://java.sun.com/jsp/jstl/format"%>\

2.3.1.  fmt:formatDate

value

要显示的日期

type

DATE, TIME, 或 BOTH

date

dateStyle

FULL, LONG, MEDIUM, SHORT, 或 DEFAULT

default

timeStyle

FULL, LONG, MEDIUM, SHORT, 或 DEFAULT

default

pattern

自定义格式模式

timeZone

显示日期的时区

默认时区

var

存储格式化日期的变量名

显示在页面

scope

存储格式化日志变量的范围

页面

2.3.2.  fmt:formatNumber

属性

描述

是否必要

默认值

value

要显示的数字

type

NUMBER,CURRENCY,或 PERCENT类型

Number

pattern

指定一个自定义的格式化模式用与输出

currencyCode

货币码(当type="currency"时)

取决于默认区域

currencySymbol

货币符号 (当 type="currency"时)

取决于默认区域

groupingUsed

是否对数字分组 (TRUE 或 FALSE)

TRUE

maxIntegerDigits

整型数最大的位数

minIntegerDigits

整型数最小的位数

maxFractionDigits

小数点后最大的位数

minFractionDigits

小数点后最小的位数

var

存储格式化数字的变量

Print to page

scope

var属性的作用域

page

2.3.3.  fmt:parseNumber 

属性

描述

是否必要

默认值

value

要解析的数字

Body

type

NUMBER,,CURRENCY,或 PERCENT

number

parseLocale

解析数字时所用的区域

默认区域

integerOnly

是否只解析整型数(true)或浮点数(false)

FALSE

pattern

自定义解析模式

timeZone

要显示的日期的时区

默认时区

var

存储待解析数字的变量

Print to page

scope

var属性的作用域

page

使用方式如下:

<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><html><body>
<%    
    Date date1 = new Date();    
    Double num1 = 12345.4567;
    pageContext.setAttribute("date1",date1);
    pageContext.setAttribute("num1",num1);
%>

<p>日期格式化 (1): <fmt:formatDate type="time" value="${date1}" /></p>
<p>日期格式化 (2): <fmt:formatDate type="date" value="${date1}" /></p>
<p>日期格式化 (3): <fmt:formatDate type="both" value="${date1}" /></p>
<p>日期格式化 (4): <fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${date1}" /></p>
<p>日期格式化 (5): <fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${date1}" /></p>
<p>日期格式化 (6): <fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${date1}" /></p><p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd" value="${date1}" /></p>
<hr>
<p>格式化数字 (1): <fmt:formatNumber value="${num1}" type="currency"/></p>
<p>格式化数字 (2): <fmt:formatNumber type="number" maxIntegerDigits="3" value="${num1}" /></p>
<p>格式化数字 (3): <fmt:formatNumber type="number" maxFractionDigits="3" value="${num1}" /></p>
<p>格式化数字 (4): <fmt:formatNumber type="number" groupingUsed="false" value="${num1}" /></p>
<p>格式化数字 (5): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${num1}" /></p>
<p>格式化数字 (6): <fmt:formatNumber type="percent" minFractionDigits="10" value="${num1}" /></p>
<p>格式化数字 (7): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${num1}" /></p>
<p>格式化数字 (8): <fmt:formatNumber type="number" value="${num1}" pattern="0.00‰"/></p>
<p>格式化数字 (9): <fmt:formatNumber type="number" value="${num1}" pattern="0.00%"/></p>
<p>美元 :    <fmt:setLocale value="en_US"/>    <fmt:formatNumber value="${num1}" type="currency"/></p>
</body>

<hr>
<fmt:parseNumber var="i" type="number" value="${num1}" />
<p>数字解析 (1) : <c:out value="${i}" /></p>
<fmt:parseNumber var="i" integerOnly="true" type="number" value="${num1}" />
<p>数字解析 (2) : <c:out value="${i}" /></p>
</html>

 使用效果如下:

2.4.  JSTL函数库

2.4.1.  什么EL函数库

EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的。下面我们会学习JSTL标签库。

EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库。

EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)}会输出3,即字符串的长度。

2.4.2.  导入函数库

因为是第三方的东西,所以需要导入。导入需要使用taglib指令!

<%@ taglib prefix="fn"uri="http://java.sun.com/jsp/jstl/functions" %>

2.4.3.  EL函数库介绍

String toUpperCase(String input): 将输入字符串转换为大写形式。

String toLowerCase(String input): 将输入字符串转换为小写形式。

int indexOf(String input, String substring): 返回子字符串在输入字符串中首次出现的位置的索引,如果未找到则返回-1。

boolean contains(String input, String substring): 判断输入字符串是否包含指定的子字符串,如果包含则返回true,否则返回false。

boolean containsIgnoreCase(String input, String substring): 不区分大小写地判断输入字符串是否包含指定的子字符串,如果包含则返回true,否则返回false。

boolean startsWith(String input, String substring): 判断输入字符串是否以指定的子字符串开始,如果是则返回true,否则返回false。

boolean endsWith(String input, String substring): 判断输入字符串是否以指定的子字符串结束,如果是则返回true,否则返回false。

String substring(String input, int beginIndex, int endIndex): 返回输入字符串中从beginIndex开始到endIndex结束的子字符串(不包括endIndex位置的字符)。

String substringAfter(String input, String substring): 返回输入字符串中指定子字符串之后的所有字符。如果未找到子字符串,则返回空字符串。

String substringBefore(String input, String substring): 返回输入字符串中指定子字符串之前的所有字符。如果未找到子字符串,则返回输入字符串本身。

String escapeXml(String input): 将输入字符串中的特殊字符转义,以便在XML中使用。例如,将""转换为">"等。

String trim(String input): 去除输入字符串两端的空白字符(如空格、制表符、换行符等)。

String replace(String input, String substringBefore, String substringAfter): 将输入字符串中所有出现的指定子字符串(substringBefore)替换为另一个子字符串(substringAfter)。

String[] split(String input, String delimiters): 根据指定的分隔符将输入字符串拆分为一个字符串数组。

int length(Object obj): 返回传入对象的长度(对于字符串,返回字符串的字符数)。注意,这个函数可以处理不同类型的对象,不仅仅是字符串。

String join(String array[], String separator): 使用指定的分隔符将字符串数组中的元素连接成一个字符串。

这些函数通常用于处理字符串数据,在编程中非常常见。它们可以方便地执行常见的字符串操作,如转换大小写、查找子字符串、截取子串、替换子串等。

使用方式:

<%
    String[] strs = {"a", "b","c"};
    List list = new ArrayList();
    list.add("a");
    pageContext.setAttribute("arr", strs);
    pageContext.setAttribute("list", list);

%>

${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World-->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->

${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("     a b c     ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!--<html></html> -->

展示效果:

 

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

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

相关文章

petalinux2018.3安装步骤

1、虚拟机安装ubuntu-16.04.7-desktop-amd64.iso &#xff08;注意&#xff1a;安装ubuntu-18.04.6-desktop-amd64.iso和ubuntu-16.04.6-desktop-i386.iso会报以下错误&#xff09; environment: line 314: ((: 10 #15~1 > 10 #3: syntax error in expression (error toke…

Java 基于springboot+vue在线外卖点餐系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

正态分布-形状与特点

更多AI技术入门知识与工具使用请看下面链接&#xff1a; https://student-api.iyincaishijiao.com/t/iNSVmUE8/

JavaScript中有哪些不同的数据类型

在 JavaScript 中&#xff0c;数据类型是一种用来表示数据的分类&#xff0c;它决定了我们可以对这个数据类型执行哪些操作。在 JavaScript 中有以下几种不同的数据类型&#xff1a; 基本数据类型 字符串 (String)&#xff1a;表示一组字符&#xff0c;可以使用引号&#xff08…

缓慢变化维 常用的处理方法

什么是缓慢变化维 维度 在数仓中&#xff0c;表往往会被划分成两种类型&#xff0c;一种是 事实表&#xff0c;另一种是维度表&#xff0c;举个例子&#xff0c;比如说&#xff1a; ❝ 2024年2月14日&#xff0c;健鑫在12306上买了两张火车票&#xff0c;每张火车票400元&…

系统架构26 - 软件架构设计(5)

特定领域软件体系结构 定义不同定义必备特征领域 基本活动领域分析领域设计领域实现 参与人员建立过程 特定领域软件体系结构的主要目的是在一组相关的应用中共享软件体系结构。 定义 DSSA (Domain Specific Software Architecture) 就是在一个特定应用领域中为一组应用提供组…

基于BitVM的乐观 BTC bridge

1. 引言 前序博客&#xff1a; 区块链互操作协议Bitcoin Bridge&#xff1a;治愈还是诅咒&#xff1f;BitVM&#xff1a;Bitcoin的链下合约 基于BitVM的乐观 BTC bridge&#xff1a; Trust-minimized two-way peg 机制 BitVM BTC bridge背后的主要思想是&#xff1a; 为比…

【芯片设计- RTL 数字逻辑设计入门 12 -- verilog 有符号数加减法】

文章目录 多功能数据处理器描述verilog 无符号数与有符号数8d100 8d1558d100 8d1568d100 8d157verilog 代码实现TestBench 代码VCS 仿真结果 多功能数据处理器描述 根据指示信号select的不同&#xff0c;对输入信号a,b实现不同的运算。输入信号a,b为8bit有符号数&#xff1…

ucosIII下创建任务读取DS18B20采集到的温度数据

学习链接&#xff1a;ucosIII下创建任务读取并输出DHT11采集到的温湿度数据 相关代码及事项&#xff1a; 首先&#xff0c;需要添加下面两个文件&#xff0c; 其次&#xff0c;main.c 中如下的代码&#xff1a; #include "led.h" #include "delay.h" #…

CPython:表达式的求值顺序(evaluation order)

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 C中表达式的求值 C语言针对表达式的计算&#xff0c;设置了操作符的优先级和结合性这两个特性&#xff0c;优先级用于解析不同优先级的符号&#xff0c;结合性用于解析…

波奇学Linux:软硬链接

ln指令建立链接 软链接 硬链接 所属者的前的数字表示硬链接数&#xff0c;引用计数&#xff0c;file.txt和soft_link是软链接所以都为2 软链接有独立inode&#xff0c;硬链接没有&#xff0c;所以硬链接不是独立文件&#xff0c;软链接是独立文件&#xff0c;且硬链接的属性会…

大模型Layer normalization知识

Layer Norm 的计算公式 Layer Norm&#xff08;层归一化&#xff09;是一种用于神经网络中的归一化技术&#xff0c;用于提高模型的训练效果和泛化能力。 RMS Norm 的计算公式 RMS Norm 的作用是通过计算输入 X 的均方根&#xff0c;将每个样本的特征进行归一化&#xff0c;使…

【51单片机】LCD1602(江科大)

1.LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:162个字符,每个字符为5*7点阵 2.引脚及应用电路 3.内部结构框图 屏幕: 字模库:类似于数码管的数…

基于 Python 的大数据的电信反诈骗系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

C++:继承与派生基础

引入&#xff1a; 由自然界的动物繁衍的规律&#xff08;eg: 动物继承父类的一切属性&#xff0c;由父类派生并增加自己的新特征&#xff09;我们引入C语言在类的使用中描述此类问题。 为解决代码重复使用、提升效率&#xff0c;引入继承机制&#xff1a;允许保留原有类的特性…

STM32 寄存器操作 systick 滴答定时器 与中断

一、什么是 SysTick SysTick—系统定时器是属于CM3内核中的一个外设&#xff0c;内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器&#xff0c; 计数器每计数一次的时间为1/SYSCLK&#xff0c;一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候…

Java:什么是多态,重载与重写?重载与重写有何不同?(带图详解)

目录 一、什么是多态 1、多态的概念 2、多态实现的条件 3、多态的优缺点 二、什么是重写 1、重写的概念 2、方法重写的规则 三、什么是重载 四、重写与重载的不同 一、什么是多态 1、多态的概念 多态通俗来说就是多种形态&#xff0c;具体点就是去完成某个行为&#x…

flask+python儿童福利院管理系统pycharm毕业设计项目

本系统解决了儿童福利院管理事务中的主要问题&#xff0c;包括首页、个人中心、爱心人士管理、员工管理、后勤人员管理、儿童信息管理、院所风采管理、活动管理、食谱管理、领养流程管理、政策法规管理、楼栋管理、宿舍管理、领养申请管理、义工申请管理、捐赠信息管理、宿舍物…

vue3中Pinia

一、pinia的简单使用 vuex和pinia的区别 参考网址&#xff1a;[Vuex] Vuex 5 by kiaking Pull Request #271 vuejs/rfcs GitHub 1.pinia没有mutations&#xff0c;只有&#xff1a;state、getters、actions 2.pinia分模块不需要models&#xff08;之前vuex分模块需要models…

C++-带你深度理解string类的常见接口

1. 为什么学习string类&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需…