自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 Servlet为什么是非线程安全的?

当Web服务器(Tomcat)接收到客户端的Http请求时,Tomcat会从线程池中取出一个线程,找到对应的Servlet并根据web.xml进行实例化。之后当用户再对该Servlet进行请求时,一般不会再对其进行实例化了,即共享一个Servlet对象(单例模式)。所以此时如果该Servlet中定义了实例变量或静态变量,可能会引发线程安全问题。...

2021-10-28 20:29:14 2871

转载 通俗地解释脏读、不可重复读、幻读

spring(数据库)事务隔离级别分为四种(级别递减):1、Serializable (串行化):最严格的级别,事务串行执行,资源消耗最大;2、REPEATABLE READ(重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”,但是带来了更多的性能损失。3、READ COMMITTED (提交读):大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免

2021-10-13 16:17:28 190

原创 synchronized锁的升级以及各个锁的状态对比

synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。而在Java6之前,synchronized属于重量级锁(悲观锁),效率低下,使用wait和notify/notifyAll来切换线程状态非常消耗系统资源。因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,Java的线程是映射到操作系统的原生线程之上的。而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状

2021-10-11 09:58:17 338 1

转载 AtomicStampedReference源码分析

https://www.jianshu.com/p/fbbdf05ec047

2021-10-09 22:41:36 90

转载 HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式

在HashMap中添加元素putVal()方法的源码中和HashMap扩容时调用resize()方法的源码中都会使用(n-1)&hash的计算方法来得到元素在集合中的位置。其中n是集合的容量,hash是添加的元素进过hash函数计算出来的hash值。至于HashMap的容量为什么是2的n次幂,这个和(n-1)&hash的计算方法有关系。符号&代表按位与计算(即位运算),计算机能够直接运算,特别高效。按位与&运算的计算方法是,只有当对应位置的数据都为1时,运算结果即为1。当H

2021-10-03 20:22:15 333

转载 浅谈为什么HashMap红黑树的阈值是8

在Java8及以后的版本中,HashMap引入了红黑树结构,其底层的数据结构从数组+链表变成了数组+链表/红黑树。HashMap桶中添加元素时,若链表个树超过8(且数组元素大于64),链表会转换成红黑树。那么为什么HashMap红黑树的阈值为什么是8呢?首先和hashcode碰撞次数的泊松分布有关,主要是为了寻找一种时间和空间的平衡。在负载因子0.75(HashMap默认)的情况下,单个hash槽内元素个数为8的概率小于百万分之一,大于8时转为红黑树,小于等于6时转为链表。而原作者在选择链表元素个数时选择

2021-10-03 18:08:31 2076

原创 Mybatis中的Dao接口工作原理

简要概述一下Mybatis中的Dao接口工作原理Dao接口就是Mapper接口。接口的全限名就是映射文件中的namespace的值接口的方法名就是映射文件中的MappedStatement的id值接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement。Dao接口的工作原理是JDK动态代理,MyBatis运行时会使用JDK动态代理为Dao接口生产代理proxy对象,代理

2021-10-02 22:12:54 2568

转载 #{}和${}的区别

#{}和${}的区别一、区别汇总1.编译过程2.是否自动加单引号3.安全性二、区别说明1.${}2.#{}3.关于安全性三、如何选择#{}和${}#{}和${}这两个语法是Mybatis实现动态sql的基础,是为了动态传递参数而存在的。总体上他们的作用是一致的(动态穿参),但是在编译过程、是否自动加单引号、安全性、使用场景等方面有很多不同一、区别汇总1.编译过程1.#{}是占位符:动态解析->预编译->执行2.${}是拼接符:动态解析->编译->执行#{}作为sql的

2021-10-02 16:39:23 2432

转载 浅谈Java中常见的三种I/O模型

浅谈Java中常见的三种I/O模型BIO (Blocking I/O)BIO 属于同步阻塞 IO 模型NIO (Non-blocking/New I/O)NIO属于IO多路复用模型、同步非阻塞IO模型NIO存在的问题AIO (Asynchronous I/O)AIO 也就是 NIO 2。Java 7 中引入了 NIO 的改进版 NIO 2,它是异步 IO 模型。BIO (Blocking I/O)BIO 属于同步阻塞 IO 模型同步阻塞IO模型中,应用程序发起read调用后,会一直阻塞,内核经过准备数

2021-09-29 15:30:03 209

原创 SpringMVC底层组件解析(执行流程)

涉及组件解释:DispatcherServlet:前端控制器⽤户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中⼼,由它调⽤其它组件处理⽤户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。HandlerMapping:处理器映射器HandlerMapping 负责根据⽤户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射⽅式,例如:配置⽂件⽅式,实现接⼝⽅式,注解⽅式等。H.

2021-09-14 20:38:52 82

原创 JavaSE个人复习式整理知识点之函数式接⼝、Stream流、⽅法引⽤

函数式接⼝、Stream流、⽅法引⽤1 函数式接⼝1.1 概念1.2 格式1.3 @FunctionalInterface注解1.4 ⾃定义函数式接⼝2 函数式编程2.1 Lambda的延迟执⾏性能浪费的⽇志案例体验Lambda的更优写法证明Lambda的延迟2.2 使⽤Lambda作为参数和返回值3 常⽤函数式接⼝3.1 Supplier接⼝3.2 练习:求数组元素最⼤值题⽬解答3.3 Consumer接⼝抽象⽅法:accept默认⽅法:andThen3.4 练习:格式化打印信息题⽬解答3.5 Predi

2021-08-15 15:03:57 248

原创 JavaSE个人复习式整理知识点之缓冲流、转换流、序列化流、打印流

缓冲流、转换流、序列化流、打印流1 缓冲流1.1 概述1.2 字节缓冲流构造⽅法效率测试1.3 字符缓冲流构造⽅法特有⽅法2 转换流2.1 字符编码和字符集字符编码字符集2.2 编码引出的问题2.3 InputStreamReader类构造⽅法指定编码读取2.4 OutputStreamWriter类构造⽅法指定编码写出转换流理解图解2.5 练习:转换⽂件编码案例分析案例实现3 序列化3.1 概述3.2 ObjectOutputStream类构造⽅法序列化操作1 缓冲流作为IO流的⼊⻔,今天我们要⻅识⼀

2021-08-13 15:13:05 109

原创 JavaSE个人复习式整理知识点之⽂件操作、IO流

⽂件操作、IO流1 File类1.1 概述1.2 构造⽅法1.3 常⽤⽅法获取功能的⽅法绝对路径和相对路径判断功能的⽅法创建删除功能的⽅法1.4 ⽬录的遍历2 递归2.1 概述2.2 递归累加求和计算1 ~ n的和代码执⾏图解2.3 递归求阶乘2.4 递归打印多级⽬录3 综合案例3.1 ⽂件搜索3.2 ⽂件过滤器优化4 IO概述4.1 什么是IO4.2 IO的分类4.3 IO的流向说明图解5 字节流5.1 ⼀切皆为字节5.2 字节输出流【OutputStream】5.3 FileOutputStream类构

2021-08-12 19:26:30 170

原创 JavaSE个人复习式整理知识点之线程池、Lambda表达式

线程池、Lambda表达式1 等待唤醒机制1.1 线程间通信1 等待唤醒机制1.1 线程间通信概念: 多个线程在处理同⼀个资源,但是处理的动作(线程的任务)却不相同。⽐如:线程A⽤来⽣成包⼦的,线程B⽤来吃包⼦的,包⼦可以理解为同⼀资源,线程A与线程B处理的动作,⼀个是⽣产,⼀个是消费,那么线程A与线程B之间就存在线程通信问题。为什么要处理线程间通信:多个线程并发执⾏时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成⼀件任务,并且我们希望他们有规律的执⾏,那么多线程之间需要⼀

2021-08-07 19:45:01 147

原创 JavaSE个人复习式整理知识点之异常、线程

异常、线程1 异常1.1 异常概念1.2 异常体系1.3 异常分类1.4 异常的产⽣过程解析2 异常的处理2.1 抛出异常throw2.2 Objects⾮空判断2.3 声明异常throws1 异常1.1 异常概念异常,就是不正常的意思。在⽣活中:医⽣说,你的身体某个部位有异常,该部位和正常相⽐有点不同,该部位的功能将受影响。在程序中的意思就是:异常 :指的是程序在执⾏过程中,出现的⾮正常的情况,最终会导致JVM的⾮正常停⽌。在Java等⾯向对象的编程语⾔中,异常本身是⼀个类,产⽣异常就是创建

2021-07-31 17:03:23 1213

原创 Debug追踪

使⽤IDEA的断点调试功能,查看程序的运⾏过程在有效代码⾏,点击⾏号右边的空⽩区域,设置断点,程序执⾏到断点将停⽌,我们可以⼿动来运⾏程序点击Debug运⾏模式程序停⽌在断点上不再执⾏,⽽IDEA最下⽅打开了Debug调试窗⼝Debug调试窗⼝介绍快捷键F8,代码向下执⾏⼀⾏,第九⾏执⾏完毕,执⾏到第10⾏(第10⾏还未执⾏)切换到控制台⾯板,控制台显示 请录⼊⼀个字符串: 并且等待键盘录⼊快捷键F8,程序继续向后执⾏,执⾏键盘录⼊操作,在控制台录⼊数据 aba

2021-07-29 20:43:28 278 1

原创 JavaSE个人复习式整理知识点之升级版API三(Map)

Map1 Map集合1.1 概述1.2 Map常⽤⼦类1.3 Map接⼝中的常⽤⽅法1.4 Map集合遍历键找值⽅式1.5 Entry键值对对象1.6 Map集合遍历键值对⽅式1.7 HashMap存储⾃定义类型键值1.8 LinkedHashMap1.9 Map集合练习2 补充知识点2.1 JDK9对集合添加的优化1 Map集合1.1 概述现实⽣活中,我们常会看到这样的⼀种集合:IP地址与主机名,身份证号与个⼈,系统⽤户名与系统⽤户对象等,这种⼀⼀对应的关系,就叫做映射。Java提供了专⻔的集合类⽤

2021-07-29 20:36:55 86

原创 JavaSE个人复习式整理知识点之升级版API二(List、Set、数据结构、Collections)

List、Set、数据结构、Collections1 数据结构1.2 常⻅的数据结构栈队列数组链表红⿊树2 List集合2.1 List接⼝介绍2.2 List接⼝中常⽤⽅法3 List的⼦类3.1 ArrayList集合3.2 LinkedList集合4 Set接⼝4.1 HashSet集合介绍4.2 HashSet集合存储数据的结构(哈希表)4.3 HashSet存储⾃定义类型元素1 数据结构1.2 常⻅的数据结构数据存储的常⽤结构有:栈、队列、数组、链表和红⿊树。我们分别来了解⼀下:栈栈:

2021-07-28 23:31:31 95

原创 JavaSE个人复习式整理知识点之升级版API一(Collection、泛型)

Collection、泛型1 Collection集合1.1 集合概述1.2 集合框架1.3 Collection 常⽤功能2 Iterator迭代器2.1 Iterator接⼝2.2 迭代器的实现原理2.3 增强for练习1:遍历数组练习2:遍历集合3 泛型3.1 泛型概述1 Collection集合1.1 集合概述在前⾯基础我们已经学习过并使⽤过集合 ArrayList ,那么集合到底是什么呢?集合:集合是java中提供的⼀种容器,可以⽤来存储多个数据。集合和数组既然都是容器,它们有啥区别

2021-07-26 17:11:30 117

原创 JavaSE个人复习式整理知识点之常⽤API[⼆]以及Object类

Object类、常⽤API[⼆]1 Object类1.1 概述1.2 toString⽅法⽅法摘要覆盖重写1.3 equals⽅法⽅法摘要默认地址⽐较对象内容⽐较1.4 Objects类2 ⽇期时间类2.1 Date类概述常⽤⽅法2.2 DateFormat类构造⽅法格式规则常⽤⽅法format⽅法parse⽅法2.3 Calendar类概念获取⽅式常⽤⽅法get/set⽅法add⽅法getTime⽅法3 再谈String类3.1 常⽤API(补充)3.2 正则表达式字符集合数量词分组“()”边界匹配 "^

2021-07-25 22:21:46 140

原创 JavaSE个人复习式整理知识点之面向对象四(多态、final、权限、内部类)

多态、final、权限、内部类1 多态1.1 概述引⼊定义1.2 多态的实现1.3 多态的好处1.4 引⽤类型转换向上转型向下转型为什么要转型转型的异常2 final关键字2.1概述2.2 使⽤⽅式修饰类修饰⽅法修饰变量3 权限修饰符3.1概述3.2 不同权限的访问能⼒4 内部类4.1 概述什么是内部类成员内部类访问特点4.2 匿名内部类【重点】前提格式使⽤⽅式5 引⽤类型⽤法总结5.1 class作为成员变量5.2 interface作为成员变量1 多态1.1 概述引⼊多态是继封装、继承之后,⾯向

2021-07-24 22:13:02 121

原创 JavaSE个人复习式整理知识点之面向对象三(继承、super、this、抽象类、接⼝)

继承、super、this、抽象类、接⼝1 继承1.1 概述定义好处1.2 继承的格式1.3 继承后的特点 -- 成员变量成员变量不重名成员变量重名1.4 继承后的特点 -- 成员⽅法成员⽅法不重名成员⽅法重名 -- 重写(Override)重写的应⽤注意事项1.5 继承后的特点 -- 构造方法1.6 super 和 this⽗类空间优先于⼦类对象产⽣super和this的含义super和this的⽤法1.7 继承的特点2 抽象类2.1 概述由来定义2.2 abstract使⽤格式抽象⽅法抽象类抽象的使⽤2

2021-07-24 15:43:29 162

转载 Object 类的常见方法总结

Object 类是一个特殊的类,是所有类的父类。它主要提供了以下 11 个方法:public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。public boolean equals(Object obj)//用于

2021-07-23 13:52:05 69

原创 JavaSE个人复习式整理知识点之面向对象二(static关键字)以及常用API[一]

常用API[一]、static关键字1 API概述JDK包结构API使⽤步骤2 Scanner类2.1 什么是Scanner类2.2 引⽤类型使⽤步骤导包创建对象调⽤⽅法2.3 Scanner使⽤步骤查看类查看构造⽅法查看成员⽅法2.5 匿名对象概念应⽤场景3 Random类3.1 什么是Random类3.2 Random使⽤步骤查看类查看构造⽅法查看成员⽅法4 String类4.1 String类概述概述特点4.2 使⽤步骤1 API概述API(Application Programming Int

2021-07-20 20:27:56 226 1

转载 标识符与关键字

在我们敲java代码的时候的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了标识符,简单来说,标识符就是一个名字。但是有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方场合,这种特殊的标识符就是关键字。因此,关键字是被赋予特殊含义的标识符。比如,在我们的日常生活中 ,“警察局”这个名字已经被赋予了特殊的含义,所以如果你开一家店,店的名字不能叫“警察局”,“警察局”就是我们日常生活中的关键字。Java 中常见的关键字...

2021-07-19 21:57:55 133

转载 浅谈JVM、JDK以及JRE

JVMJava 虚拟机(JVM- Java Virtual Machine)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。那么什么是字节码?采用字节码的好处是什么?在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释

2021-07-19 20:55:43 77

原创 JavaSE个人复习式整理知识点之面向对象一(类与对象、封装、构造方法)

1 ⾯向对象思想1.1 ⾯向对象思想概述概述Java语⾔是⼀种⾯向对象的程序设计语⾔,⽽⾯向对象思想是⼀种程序设计思想,我们在⾯向对象思想的指引下,使⽤Java语⾔去设计、开发计算机程序。这⾥的对象泛指现实中⼀切事物,每种事物都具备⾃⼰的属性和⾏为。⾯向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、⾏为特征抽象出来,描述成计算机事件的设计思想。它区别于⾯向过程思想,强调的是通过调⽤对象的⾏为来实现功能,⽽不是⾃⼰⼀步⼀步的去操作实现。特点⾯向对象思想是⼀种更符合我

2021-07-18 22:41:35 107

原创 关于java中向上造型访问成员变量和成员方法的一些细节

public class TestFoo{ public static void main(String[] args) { Fo f = new Bar(); f.addFive(); System.out.println(f.a); //f.print(); //System.out.println(f.b); //System.out.println(f.getA()); }}class

2021-07-18 16:46:48 215

原创 数据库学习day02

数据库学习day026 DDL 操作表结构6.1 创建表6.2 MySQL数据类型6.3 查看表6.4 快速创建⼀个表结构相同的表6.5 删除表6.6 修改表结构6 DDL 操作表结构前提先使⽤某个数据库 (use 数据库)6.1 创建表创建表的格式CREATE TABLE 表名 ( 字段名 1 字段类型 1, 字段名 2 字段类型 2);关键字说明创建表的关键字说明CREATE创建TABLE表6.2 MySQL数据类型常使⽤的数据类

2021-07-17 14:47:19 59

原创 Java系统排序

5 Java系统排序JDK 提供的排序方法 Arrays.sort(array)的效率要比前两篇文章所写的选择排序、冒泡排序等效率高。在做比较之前,先介绍一个方法 System.currentTimeMillis(),通过该方法可以得到格林威治时间自 1970 年 1 月 1 日凌晨 00:00:00 到当前系统时间的毫秒数(返回值为 long 类型)。 long time = System.currentTimeMillis(); System.out.println

2021-07-17 11:40:51 115

原创 数组排序(插入排序)

4 插入排序在开始学习插入排序之前,让我们先对 for 循环做个补充:如下是关于 for 循环结束时,i 的取值的演示代码 int i; for (i = 5; i >= 0; i--) { System.out.print(i); } System.out.println("\nfor循环结束时i=" + i); System.out.println("-----------------")

2021-07-17 10:35:11 1067

原创 数组排序(冒泡排序)

3 冒泡排序3.1 冒泡排序原理如果上篇文章的选择排序对于升序来讲是每次先排好较小的元素,那么本篇文章所讲的冒泡排序或许可以称之为每次先排好较大的元素。那么顾名思义,“冒泡”可以理解为在排序过程中(升序)总有一个比周围大的元素在从前往后不断蹦哒,不断地和后面比他小的元素交换位置,好比鱼在水里边游边吐泡泡。或许我们可以看个例子加深理解: int[] arr = {7, 2, 3, 8, 1}; System.out.println("未排序数组:" + Arrays

2021-07-17 00:47:05 103

原创 数组排序(选择排序)

1 数组排序排序是对数组施加的最常用的算法;所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列;对于元素较多的数组,排序算法的优劣至关重要;一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣;常用的排序算法有:插入排序、冒泡排序、选择排序等。2 选择排序2.1 选择排序原理(1)将数组中除第一个的其他后位元素陆续与第一个元素比较,如果该元素小于第一个元素,则对这两个元素进行交换循环上述规则,直至找出最小元素,放于数组中第一个位置(即索引0处)(2)将数组中除

2021-07-16 18:24:05 2557

原创 JavaSE个人复习式整理知识点之基础语法三(续数组)

JavaSE个人复习式整理知识点之基础语法三(续数组)4 数组的常⻅操作4.1 数组越界异常 int[] array = new int[]{1, 2, 3}; System.out.println(array[3]);注: 创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运⾏后,将会抛出ArrayIndexOutOfBoundsException数组越界异常。4.2 数组空指针异常注: arr = nu

2021-07-15 22:24:50 43

原创 JavaSE个人复习式整理知识点之基础语法三(方法、数组)

方法⽅法概述:就是将⼀个功能抽取出来,把代码单独定义在⼀个⼤括号内,形成⼀个单独的功能。当我们需要这个功能的时候,就可以去调⽤。这样即实现了代码的复⽤性,也解决了代码冗余的现象。 定义格式:修饰符 返回值类型 ⽅法名(参数列表) { // 代码省略... return 结果; } 示例:public static void main(String[] args) { int i = 3;...

2021-07-13 23:02:44 91

原创 数据库学习day01

1.终端实现连接数据库MySQL 是⼀个需要账户名密码登录的数据库,登陆后使⽤,它提供了⼀个默认的 root 账号,使⽤安装时设置的密码即可登录。或者使⽤MySQL安装时添加的账号和密码登录。登录格式1:mysql -u⽤户名 -p密码例:mysql -uroot -p123456登录格式2:mysql -hIP地址 -u⽤户名 -p密码例:mysql -h127.0.0.1 -uroot -p123456登录格式3:mysql --host=IP地址 --user=⽤户名 --pa

2021-07-13 22:42:10 64

原创 Java课程笔记三(待整理)

Throwable -> Exception1.已检查异常 Exception 必须要处理的2.未检查异常 RuntimeException 程序失误 也叫运行时异常 ClassCastException, ConcurrentModificationException, IndexOutOfBoundsException, NullPointerException3.处理异常 自行处理 : try - catch 1.try-cat...

2021-07-12 20:32:11 45

原创 Java课程笔记二(待整理)

常用API:String类:字符串1.创建方式 a.直接赋值创建 b.构造方法创建2.特点: a.字符串就是字符数组包装成的对象,本质就是字符数组 b.String是final修饰的类,是不可被继承的 c.字符串一旦创建就不可修改,属于不可变的字符序列 d.String重写了toString(),equals(),hashCode()3.常量池: 1)常量池中放的都是常量(字面量/直接量)4.编码问题: 字符编码成为字节,字节解码成...

2021-07-12 20:29:22 45

原创 Java课程笔记一(待整理)

Collection 接口 1.创建->是一个接口 不能new自己,只能new接口的实现累 2.常用API 1)普通常用 add() - 添加 remove() - 删除 clear() - 清空 isEmpty() - 判断是否为空 contains() - 判断是否包含指定元素 size() - 集合长度Iterable ...

2021-07-12 20:28:12 68

原创 JavaSE个人复习式整理知识点之基础语法二

4.逻辑控制语句 判断语句1--if:if(关系表达式){ 语句体;}执⾏流程:⾸先判断关系表达式看其结果是true还是false 如果是true就执⾏语句体如果是false就不执⾏语句体示例 :...

2021-07-12 20:22:18 78

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除