- 博客(140)
- 收藏
- 关注
原创 Excel-4 常用函数 LOWER+UPPER 函数
LOWER 函数用于将单元格中的文本转换为小写。更改单元格值的字母大小写非常有用,尤其是在单元格输入中存在大量大小写不一致的情况,或者在将数据集准备用于区分大小写的用途时。如果对单个单元格使用该函数=LOWER(单元格)如果对单元格范围使用该函数=LOWER(起始单元格:结束单元格)
2025-07-10 21:52:22
258
原创 Excel-4 常用函数 LEFT+RIGHT 函数
函数用于从 Excel 单元格左侧开始检索指定数量的字符。指定的数字必须大于 0,默认设置为 1。如果对单个单元格使用该函数=LEFT(单元格,[num_chars])如果对单元格区域使用该函数=LEFT(起始单元格:结束单元格,[num_chars])
2025-07-10 21:48:24
322
原创 Excel-4 常用函数 IF+IFS 函数
IF 函数根据真或假的条件返回值。条件被称为 logical_test,它可以检查以下内容:如果一个数字大于另一个数字 >如果一个数字小于另一个数字 <如果一个数字或文本等于某物 =注意:可以决定返回值和条件。
2025-07-10 21:41:37
244
原创 Excel-4 常用函数 COUNT+COUNTA+COUNTBLANK+COUNTIF+COUNTIFS 函数
COUNT 函数用于统计区域中包含数字的单元格数。注意:COUNT 函数仅统计包含数字的单元格,不统计包含字母的单元格。如果单元格包含字母,则可以使用 COUNTA 函数。
2025-07-10 21:31:26
256
原创 Excel-4 常用函数 CONCAT 函数
CONCAT 函数用于连接多个单元格,在组合的单元格值之间不添加任何分隔符。引号 " 或 ’ 大括号 {} 竖线 | 斜杠 / \。CONCAT 是 Excel 中的一个函数,是连接的缩写。注意:分隔符是用于将内容元素彼此分开的空格或符号。=CONCAT(单元格1, 分隔符, 单元格2)连接是指将事物连接在一起。
2025-07-10 21:23:14
649
原创 Excel-4 常用函数 AND
将 AND 函数与 IF 函数结合使用,可以为 IF 函数检查多个条件。注意:函数的不同部分由符号隔开,例如逗号 , 或分号;所有条件都需要为TRUE,AND 函数才能返回TRUE。AND 函数根据两个或多个条件返回TRUE或FALSE。AND 函数取代 logical_test 条件。IF 函数被输入为 =IF 并且有 3 个部分。这里,IF 函数返回“Yes”或“No”。如果一个数字大于另一个数字 >如果一个数字小于另一个数字 <如果一个数字或文本等于某物 =通常与 IF 函数一起使用。
2025-07-10 21:09:51
231
原创 Excel-4 常用函数用法
COUNTIFS 根据一个或多个 TRUE 或 FALSE 条件计算区域中的单元格。=AVERAGEIFS 根据一个或多个 TRUE/FALSE 条件计算区域的平均值。=SUMIFS 根据一个或多个 TRUE 或 FALSE 条件计算区域的总和。=AVERAGEIF 根据 TRUE 或 FALSE 条件计算区域的平均值。=SUMIF 根据 TRUE 或 FALSE 条件计算区域中值的总和。=AND 根据两个或多个条件返回 TRUE 或 FALSE。=IF 根据 TRUE 或 FALSE 条件返回值。
2025-07-10 20:58:37
343
原创 Excel-3 相对引用和绝对引用
引用在公式中用于进行计算,填充功能可用于将公式继续向侧、向下和向上填充。绝对引用是我们做出的选择。它是一个命令,告诉 Excel 锁定引用。相对引用使单元格引用自由。默认情况下引用是相对引用,并且没有美元符号 ($)。Excel 中的单元格具有唯一的引用,即它的位置。该引用被锁定到该列。该引用被锁定到该行。美元符号 ($) 用于使引用变为绝对引用。对列和行使用绝对引用。绝对引用是指引用带有美元符号 ($)。在公式中添加 $ 以使用绝对引用。绝对引用的示例:$A$1。它锁定公式中的引用。
2025-07-10 20:55:06
271
原创 Excel-2 区域+填充
通过按住 CTRL 或 Command 并左键单击单元格来选择多个单元格。选择完成后,松开 CTRL 或 Command。还可以通过按 Ctrl+A(适用于 Windows)或 Cmd+A(适用于 macOS)来选择整个电子表格。填充可用于复制、序列、日期、函数,填充功能可以双击以完成区域中的公式。
2025-07-10 20:48:55
148
原创 JavaScript Ajax
如果要让用户留在当前页面中,同时发出新的HTTP请求,就必须用JavaScript发送这个新请求,接收到数据后,再用JavaScript更新页面,这样一来,用户就感觉自己仍然停留在当前页面,但是数据却可以不断地更新。如果仔细观察一个Form的提交,你就会发现,一旦用户点击“Submit”按钮,表单开始提交,浏览器就会刷新页面,然后在新页面里告诉你操作是成功了还是失败了。用JavaScript写一个完整的AJAX代码并不复杂,但是需要注意:AJAX请求是异步执行的,也就是说,要通过回调函数获得响应。
2024-04-17 13:42:53
330
原创 Java 模块
现在,JRE自身的标准库已经分拆成了模块,只需要带上程序用到的模块,其他的模块就可以被裁剪掉。前面讲了,为了支持模块化,Java 9首先带头把自己的一个巨大无比的rt.jar拆成了几十个.jmod模块,原因就是,运行Java程序的时候,实际上我们用到的JDK模块,并没有那么多。不需要的模块,完全可以删除。在Java 9之前,一个大型Java程序会生成自己的jar文件,同时引用依赖的第三方jar文件,而JVM自带的Java标准库,实际上也是以jar文件形式存放的,这个文件叫rt.jar,一共有60多M。
2024-04-11 06:19:07
1050
原创 class 版本
如果用Java 17编译一个Java程序,输出的class文件版本默认就是61,它可以在Java 17、Java 18上运行,但不可能在Java 11上运行,因为Java 11支持的class版本最多到55。如果用Java 11编译一个Java程序,输出的class文件版本默认就是55,这个class既可以在Java 11上运行,也可以在Java 17上运行,因为Java 17支持的class文件版本是61,表示“最多支持到版本61”。然而,指定版本如果低于当前的JDK版本,会有一些潜在的问题。
2024-04-11 06:16:27
523
原创 Java classpath和jar
因为jar包就是zip包,所以,直接在资源管理器中,找到正确的目录,点击右键,在弹出的快捷菜单中选择“发送到”,“压缩(zipped)文件夹”,就制作了一个zip文件。jar包就是用来干这个事的,它可以把package组织的目录层级,以及各个目录下的所有文件(包括.class文件和其他文件)都打成一个jar文件,这样一来,无论是备份,还是发给客户,就简单多了。通常,我们在自己编写的class中,会引用Java核心库的class,例如,String、ArrayList等。例如,在Windows系统上,用;
2024-04-11 06:13:15
448
原创 Java 内部类
nner Class除了能引用Outer实例外,还可以修改Outer Class的private字段,因为Inner Class的作用域在Outer Class内部,所以能访问Outer Class的private字段和方法。上述定义的Outer是一个普通类,而Inner是一个Inner Class,它与普通类有个最大的不同,就是Inner Class的实例不能单独存在,必须依附于一个Outer Class的实例。如果一个类定义在另一个类的内部,这个类就是Inner Class:。
2024-04-11 06:06:35
353
原创 Java 作用域
推荐把private方法放到后面,因为public方法定义了类对外提供的功能,阅读代码的时候,应该先关注public方法…包作用域是指一个类允许访问同一个package的没有public、private修饰的class,以及没有public、protected、private修饰的字段和方法。方法参数也是局部变量。定义为public的field、method可以被其他类访问,前提是首先有访问class的权限。由于Java支持嵌套类,如果一个类内部还定义了嵌套类,那么,嵌套类拥有访问private的权限。
2024-04-11 05:56:36
391
原创 Java 包
如果有两个class名称相同,例如,mr.jun.Arrays和java.util.Arrays,那么只能import其中一个,另一个必须写完整类名。// ok,使用java.lang包的String -> java.lang.String。// ok,使用完整类名 -> java.util.List。注意:自动导入的是java.lang包,但类似java.lang.reflect这些包仍需要手动导入。没有定义包名的class,它使用的是默认包,非常容易引起名字冲突,因此,不推荐不写包名的做法。
2024-04-11 05:47:42
354
原创 Java 静态字段和静态方法
因为静态方法属于class而不属于实例,因此,静态方法内部,无法访问this变量,也无法访问实例字段,它只能访问静态字段。因此,不推荐用实例变量.静态字段去访问静态字段,因为在Java程序中,实例对象并没有静态字段。在代码中,实例对象能访问静态字段只是因为编译器可以根据实例类型自动转换为类名.静态字段来访问静态对象。实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。虽然实例可以访问静态字段,但是它们指向的其实都是Person class的静态字段。
2024-04-10 18:08:24
483
原创 Java 接口
因为interface没有字段,default方法无法访问字段,而抽象类的普通方法可以访问实例字段。Java的接口特指interface的定义,表示一个接口类型和一组方法签名,而编程接口泛指接口规范,如方法签名,数据格式,网络协议等。此时,Person接口继承自Hello接口,因此,Person接口现在实际上有3个抽象方法签名,其中一个来自继承的Hello接口。在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,多态就能发挥出威力。
2024-04-10 17:37:47
776
原创 Java 抽象类
因为这个抽象方法本身是无法执行的,所以,Person类也无法被实例化。因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。如果父类Person的run()方法没有实际意义,不行去掉方法的执行语句,会导致编译错误,因为定义方法的时候,必须实现方法的语句。如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。答案还是不行,因为去掉父类的run()方法,就失去了多态的特性。
2024-04-10 16:24:53
293
原创 Java 多态
对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法,多态具有一个非常强大的功能,就是允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码。它传入的参数类型是Person,我们是无法知道传入的参数实际类型究竟是Person,还是Student,还是Person的其他子类,因此,也无法确定调用的是不是Person类定义的run()方法。注意:方法名相同,方法参数相同,但方法返回值不同,也是不同的方法。多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
2024-04-10 14:57:42
611
原创 java继承
在OOP的术语中,我们把Person称为超类(super class),父类(parent class),基类(base class),把Student称为子类(subclass),扩展类(extended class)在向下转型的时候,把p1转型为Student会成功,因为p1确实指向Student实例,把p2转型为Student会失败,因为p2的实际类型是Person,不能把父类变为子类,因为子类功能比父类多,多的功能无法凭空变出来。子类默认的构造方法是编译器自动生成的,不是继承的。
2024-04-09 02:28:17
669
原创 Java 方法重载
int indexOf(String str, int fromIndex)根据字符串查找,但指定起始位置。int indexOf(int ch, int fromIndex):根据字符查找,但指定起始位置;方法重载的目的是,功能类似的方法使用同一名字,更容易记住,因此,调用起来更简单。int indexOf(int ch):根据字符的Unicode码查找;int indexOf(String str):根据字符串查找;方法名相同,但各自的参数不同,称为方法重载(Overload)
2024-04-08 13:48:56
287
原创 Java 构造方法
但是,和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值,int类型默认值是0,布尔类型默认值是false;创建实例的时候,实际上是通过构造方法来初始化实例的。因此,构造方法的代码由于后运行,所以,new Person(“Xiao Ming”, 12)的字段值最终由构造方法的代码确定。要特别注意的是,如果我们自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法。
2024-04-08 13:44:25
232
原创 Java 方法
和private字段一样,private方法不允许外部调用,定义private方法的理由是内部方法是可以调用private方法的。一开始,把fullname数组传进去,然后,修改fullname数组的内容,结果发现,实例p的字段p.name也被修改了!比如,setAge()就会检查传入的参数,参数超出了范围,直接报错。结论:引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。我们先观察一个基本类型参数的传递,结论:基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。
2024-04-08 13:26:34
754
原创 Java 面向对象基础
上面的Person类,我们定义了两个字段,一个是String类型的字段,命名为name,一个是int类型的字段,命名为age。一个Java源文件可以包含多个类的定义,但只能定义一个public类,且public类名必须与文件名一致。通过new操作符创建新的instance,然后用变量指向它,即可通过变量来引用这个instance;定义了class,只是定义了对象模版,而要根据对象模版创建出真正的对象实例,必须用new操作符。定义class就是定义了一种数据类型,对应的instance是这种数据类型的实例;
2024-04-08 11:16:52
438
原创 Java 面向对象编程
和面向对象编程不同的,是面向过程编程。面向过程编程,是把模型分解成一步一步的过程。Java是一种面向对象的编程语言。面向对象编程,英文是Object-Oriented Programming,简称OOP。因此,面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。而面向对象编程,顾名思义,你得首先有个对象:object-oriented。
2024-04-08 10:58:37
165
原创 Java 命令行参数
我们可以利用接收到的命令行参数,根据不同的参数执行不同的代码。Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。这样,程序就可以根据传入的命令行参数,作出不同的响应。命令行参数由JVM接收用户输入并传给main方法;命令行参数类型是String[]数组;如何解析命令行参数需要由程序自己实现。
2024-04-08 07:55:33
219
原创 Java 数组排序
冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。实际上,Java的标准库已经内置了排序功能,我们只需要调用JDK提供的Arrays.sort()就可以排序:对数组排序实际上修改了数组本身。常用的排序算法有冒泡排序、插入排序和快速排序等。
2024-04-08 07:25:17
224
原创 Java 遍历数组
显然for each循环更加简洁。但是,for each循环无法拿到数组的索引,因此,到底用哪一种for循环,取决于我们的需要。因为数组的每个元素都可以通过索引来访问,因此,使用标准的for循环可以完成一个数组的遍历。使用for each循环打印也很麻烦。幸好Java标准库提供了Arrays.toString(),可以快速打印数组内容。注意:在for (int n : ns)循环中,变量n直接拿到ns数组的元素,而不是索引。// 类似 [I@7852e922。我们希望打印的数组的元素内容。
2024-04-08 07:15:25
385
原创 Java break和continue
break会跳出当前循环,也就是整个循环都不会执行了。而continue则是提前结束本次循环,直接继续执行下次循环。在循环过程中,可以使用break语句跳出当前循环。
2024-04-08 06:48:13
128
原创 Java do while循环 for循环
在for循环执行前,会先执行初始化语句int i=1,它定义了计数器变量i并赋初始值为1,然后,循环前先检查循环条件i<=100,循环后自动执行i++,因此,和while循环相比,for循环把更新计数器的代码统一放到了一起。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。和for循环相比,for each循环的变量n不再是计数器,而是直接对应到数组的每个元素。而另一种do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。
2024-04-08 06:42:46
384
原创 Java while循环
如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳到while循环的末尾,继续往下执行。因为计算机的特点是计算速度非常快,我们让计算机循环一亿次也用不到1秒,所以很多计算的任务,人去算是算不了的,但是计算机算,使用循环这种简单粗暴的方法就可以快速得到结果。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳到while循环的末尾,继续往下执行。循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。
2024-04-08 06:25:38
226
原创 Java switch多重选择
使用switch时,如果遗漏了break,就会造成严重的逻辑错误,而且不易在源代码中发现错误。从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句。switch语句根据switch (表达式)计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行。从Java 14开始,switch语句正式升级为表达式,不再需要break,并且允许使用yield返回值。
2024-04-08 06:16:37
499
原创 Java if 判断
由于使用缩进格式,很容易把两行语句都看成if语句的执行块,但实际上只有第一行语句是if的执行块。当if语句块只有一行语句时,可以省略花括号{}:但是,省略花括号并不总是一个好主意。还可以把一定不是null的对象"hello"放到前面:例如:if (“hello”.equals(s)) { …根据if的计算结果(true还是false),JVM决定是否执行if语句块(即花括号{}包含的所有语句)。在Java中,判断值类型的变量是否相等,可以使用==运算符。但是,判断引用类型的变量是否相等,
2024-04-08 05:45:32
389
原创 Java 流程控制—输入和输出
直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine(),要读取用户输入的整数,使用scanner.nextInt()。但是,在实际的代码中,程序经常需要做条件判断、循环,因此,需要有多种流程控制语句,来实现程序的跳转和循环等功能。// 创建Scanner对象。在前面的代码中,我们总是使用System.out.println()来向屏幕输出一些内容。
2024-04-08 05:37:45
383
原创 java 数组类型
定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]。和单个基本类型变量不同,数组变量初始化必须使用new int[5]表示创建一个可容纳5个int元素的数组。数组是引用类型,在使用索引访问数组元素时,如果索引超出范围,运行时将报错。也可以在定义数组时直接指定初始化的元素,这样就不必写出数组大小,而是由编译器自动推算数组大小。数组索引从0开始,例如,5个元素的数组,索引范围是0~4。数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型;
2024-04-08 05:05:03
668
原创 Java字符和字符串
例如,“abc"xyz”,编译器就无法判断中间的引号究竟是字符串的一部分还是表示字符串结束。因为Java在内存中总是使用Unicode表示字符,所以,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。至于变量,可以一会指向字符串"hello",一会指向字符串"world"。Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理。注意要区分空值null和空字符串"",空字符串是一个有效的字符串对象,它不等于null。
2024-04-08 04:55:35
395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅