当前位置: 首页 > news >正文

Java从入门到精通 - Java语法

Java 语法

此笔记参考黑马教程,仅学习使用,如有侵权,联系必删

文章目录

  • Java 语法
    • 01 变量详解
      • 1. 变量里的数据在计算机中的存储原理
        • 1.1 二进制
        • 1.2 十进制转二进制的算法
        • 1.3 计算机中表示数据的最小单元
        • 总结
        • 1.4 字符在计算机中是如何存储的呢?
        • 1.5 图片数据 - 彩色图
        • 1.6 声音数据
        • 总结
        • 1.7 十进制转二进制的算法
        • 1.8 八进制、十六进制介绍
        • 1.9 计算机的数据单位
        • 总结
      • 2. 数据类型
        • 2.1 数据类型的分类
        • 代码演示
        • 总结
    • 02 类型转换
      • 1. 自动类型转换
        • 1.1 定义
        • 1.2 自动类型转换在计算机中的执行原理
        • 1.3 自动类型转换的其他形式
        • 代码实现
        • 总结
      • 2. 表达式的自动类型转换
        • 2.1 定义
        • 代码实现
        • 总结
      • 3. 强制类型转换
        • 3.1 引入
        • 3.2 强制类型转换
        • 3.3 强制类型转换在计算机中的执行原理
        • 代码实现
        • 总结
    • 03 运算符
      • 1. 基本的算术运算符、+符号做连接符
        • 1.1 基本的算术运算符
        • 1.2 "+" 符号可以做连接符
        • 代码实现
        • 总结
      • 2. 自增自减运算符
        • 1. 定义
        • 2. 自增自减的使用注意事项
        • 代码演示
        • 总结
        • 3. 自增、自减拓展案例
      • 3. 赋值运算符
        • 3.1 基本赋值运算符
        • 3.2 扩展赋值运算符
        • 代码实现
        • 总结
      • 4. 关系运算符
        • 代码实现
      • 5. 逻辑运算符
        • 代码实现
        • 总结
      • 6. 三元运算符、运算符的优先级
        • 6.1 三元运算符介绍
        • 6.2 运算优先级
        • 代码实现
    • 04 API 介绍、Scanner:获取用户键盘输入的数据
      • 代码实现
      • 总结
    • 总结

01 变量详解

1. 变量里的数据在计算机中的存储原理

1.1 二进制
  • 只有0、1,按照逢2进1的方式表示数据:

1.2 十进制转二进制的算法
  • 除二取余法


1.3 计算机中表示数据的最小单元

  • 计算机中表示数据的最小单位:一个字节(byte,简称B,是使用8个二进制组成的)
  • 字节中的那个二进制位就成为 位(bit,简称b),1B = 8b
总结
  1. 数据在计算机底层都是怎么存储的?
  • 都是采用二进制:使用0、1,按照逢2进1的规则表示数据来存储
  1. 如何快速的算出一个数据的二进制形式?
  • 除二取余法
  1. 计算机底层表示数据的最小单位是什么?
  • 字节,一个字节等于8个二进制位:1B = 8b
1.4 字符在计算机中是如何存储的呢?
  • ASCII 编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号

package b_java语法.a_ASCII;public class a_ASCIIDemo1 {public static void main(String[] args) {// 目标:掌握ASCII编码表的编码特点System.out.println('a' + 10); // 97 + 10 = 107System.out.println('A' + 10); // 65 + 10 = 75System.out.println('0' + 10); // 48 + 10 = 58}
}
1.5 图片数据 - 彩色图
  • 图片就是无数个像素点组成的
  • 每个像素点的数据:用0~255 * 255 * 255表示其颜色
    • 本质上也是存二进制
1.6 声音数据
  • 存储波形图 -> 将波形图映射到一个坐标上

总结
  1. 字符数据在计算机中是怎么存储的?
  • 字符存的是 ascii 码表中对应的数字的二进制形式
  • 字符 ’A‘ 对应的数字是65
  • 字符 ’a‘ 对应的数字是97
  • 字符 ‘0’ 对应的数字是48
  1. 图片和音视频等文件的数据是怎么存储的?
  • 也是采用二进制进行存储的
1.7 十进制转二进制的算法
  • 十进制转二进制:除二取余法

  • 二进制转十进制

1.8 八进制、十六进制介绍
  • 为了便于观察和表示二进制,推出了八进制和十六进制

  • 都是先转换为二进制再转换为十进制

    • 每3位二进制作为一个单元,最小数是0,最大数是7,共八个数字,这就是八进制

    • 每4位二进制作为一个单元,最小数是0,最大数是15,共16个数字,依次用:0~9 A B C D E F 表示就是十六进制

注意:Java 程序中支持书写二进制八进制十六进制的数据,分别需要以 0B或者0b00X或者0x开头

package b_java语法.a_ASCII;public class a_ASCIIDemo1 {public static void main(String[] args) {// 二进制 八进制 十六进制在程序中的写法int a1 = 0B01100001; // 0B开头的数据是二进制System.out.println(a1);int a2 = 0141; // 0开头的数据是八进制System.out.println(a2);int a3 = 0XFA; // 0X开头的数据是十六进制System.out.println(a3);}
}
1.9 计算机的数据单位
  • 计算机表示数据的最小组成单位:字节,1B=8b
  • 在 B 的基础上,计算机发展出了 KB、MB、GB、TB、… 这些数据单位
转换表
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
总结
  1. 二进制如何计算成十进制?

  1. 二进制如何计算成八进制?
  • 每3位二进制作为一个单元,最小数是0,最大数是7,0-7有8个数字

  1. 二进制如何计算成十六进制?
  • 每4位二进制作为一个单位,最小数是0,最大数是15
  • 0-15有16个数字,依次用:0~9 A B C D E F 代表

  1. 数据大小的单位换算是怎么样的?


2. 数据类型

数据类型 变量名称 = 初始值;
规定变量只能存储什么类型的数据

2.1 数据类型的分类
  • 基本数据类型:4大类8种
数据类型内存占用(字节数)数据范围
整形byte1-128~127
short2-32768~32767
int(默认)4-2147483648~2147483648(10位数,大概21亿多)
long8-9223372036854775808~9223372036854775808(19位数)
浮点型(小数)float4-1.401298 E -45 到 3.4028235 E +38
double(默认)84.9000000 E -324 到 1.797693 E +308
字符型char20-65535
布尔型boolean1true,false
代码演示
package b_java语法.a_ASCII;public class b_VariableDemo2 {public static void main(String[] args) {// 目标:掌握常见的基本数据类型的使用// 1. byte short int longbyte a = 127; // -128 - 17// byte a2 = 128; // 越界了short s = 13244;// short s1 = 91412; //越界了int i = 314135;// 注意:随便写一个整形字面量默认是int类型,145436354164354虽然没有超过long的范围,但是超过了本身int类型的范围// 如果希望随便写一个整形字面量默认是long类型的,需要在后面加上L / llong lg = 145436354164354L;//2. float double// 注意:随便写小数字面量,默认是double,如果希望小数float,后面加F / ffloat f = 3.14F; // float在开发中少见double d = 56.45;// 3. char 字符型char ch = 'a';char ch2 = '中';// 4. booleanboolean flag = true;boolean flag2 = false;// 拓展一种引用数据类型,后面要用// String 称之为字符串类型,定义的变量可以用于记住一个字符串数据String name = "张三";System.out.println(name);}
}
总结
  1. 数据类型分为几种?
  • 基本数据类型:4大类8种
    • byte short int(默认) long 整形
    • float double(默认) 浮点型
    • char 字符型
    • boolean 布尔型
  • 引用数据类型:String
  1. 随便写的整数、小数字面量,他们默认是什么类型?
  • 23,默认是 int 类型,加上 L/l 就是 long 类型的数据了
  • 23.8,默认是 double 类型,加上 F/f 就是 float 类型了

02 类型转换

  • 在我们的开发种存在某种类型的变量赋值给另一种类型的变量
  • 存在不同类型的数据一起运算

1. 自动类型转换

1.1 定义
  • 类型范围小的变量,可以直接赋值类型范围大的变量
    • 比如 byte 类型的变量可以直接赋值给 int 类型的变量
1.2 自动类型转换在计算机中的执行原理

1.3 自动类型转换的其他形式

代码实现
package b_java语法;public class c_TypeConversionDemo1 {public static void main(String[] args) {// 目标:理解自动类型转换机制byte a = 12;int b = a; // 发生了自动类型转换System.out.println(a);System.out.println(b);int c = 100;double d = c; // 发生了自动类型转换System.out.println(c);char ch = 'a'; // 占两个字节int i = ch; // 占四个字节  发生了自动类型转换System.out.println(i);}
}
总结
  1. 为什么要进行类型转换?
  • 存在不同类型的变量赋值给其他类型的变量
  1. 什么是自动类型转换?
  • 类型范围小的变量,可以直接赋值给类型范围大的变量

2. 表达式的自动类型转换

  • 在开发中会有不同类型的变量或者数据一起运算
  • 最终运算出的数据的类型是什么?
2.1 定义
  • 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算

注意事项:

  • 表达式的最终结果类型由表达式中的最高类型决定
  • 在表达式中,byte、short、char直接转换成 int 类型参与运算的
    • 防止运算后数据超出原本类型的范围
代码实现
package b_java语法;public class d_TypeConversionDemo2 {public static void main(String[] args) {// 目标:掌握表达式的自动类型转换机制byte a = 10;int b = 20;long c = 30;long rs = a + b + c;System.out.println(rs);double rs2 = a + b +1.0;System.out.println(rs2);byte i = 10;short j = 30;int rs3 = i + j;System.out.println(rs3);// 面试笔试题byte b1 = 110;byte b2 = 80;int b3 = b1 + b2;System.out.println(b3);}
}
总结
  1. 表达式的自动类型转换是什么样的?
  • 小范围的类型会自动转换成大范围的类型运算
  1. 表达式的最终结果类型是由谁决定的?
  • 最终类型由表达式中的最高类型决定
  1. 表达式有哪些类型转换是需要注意的?
  • byte short char 是直接转换成 int 类型参与运算的

3. 强制类型转换

大范围类型的变量 -> 小范围类型的变量

3.1 引入

类型范围大的数据或者变量,直接赋值类型范围小的变量,会报错

3.2 强制类型转换
  • 强行将类型范围大的变量、数据赋值给类型范围小的变量
数据类型 变量2 = (数据类型) 变量1、数据

3.3 强制类型转换在计算机中的执行原理

注意事项:

  • 强制类型转换可能造成数据(丢失)溢出
  • 浮点型强制转成整形,直接丢掉小数部分,保留整数部分返回
代码实现
package b_java语法;public class e_TypeConversionDemo3 {public static void main(String[] args) {// 目标:掌握强制类型转换int a = 20;byte b = (byte) a; // 快捷键:ALT + ENTER  强制类型转换System.out.println(a);System.out.println(b);int i = 1500;byte j = (byte) i;System.out.println(j);double d = 99.5;int m = (int) d; // 强制类型转换System.out.println(m); // 丢掉小数部分,保留整数部分}
}
总结
  1. 什么是强制类型转换?
  • 默认情况下,大范围类型的变量直接赋值给小范围类型的变量会报错
  • 可以强行将范围大的变量、数据赋值给类型范围小的变量
数据类型 变量2 = (数据类型) 变量1、数据
  1. 强制类型转换有哪些需要注意的?
  • 可能出现数据丢失
  • 小数强制转换成整数是直接截断小数保留整数

03 运算符

对变量、字面量进行运算的符号

1. 基本的算术运算符、+符号做连接符

1.1 基本的算术运算符
符号作用说明
+参考小学一年级
-参考小学一年级
*****参考小学二年级,与 “✖” 相同
/与 “➗” 相同,注意:在 java 中两个整数相除的结果还是整数
%取余获取的是两个数据做除法的余数
1.2 “+” 符号可以做连接符
  • +” 符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
"abc" + 5 ---> "abc5"
  • 遇到 “+” 符号,能算则算,不能算就在一起
代码实现
package b_java语法;public class f_OperaterDemo1 {public static void main(String[] args) {// 目标:掌握基本的算术运算符的使用int a = 10;int b = 2;System.out.println(a + b);System.out.println(a - b);System.out.println(a * b); // 20System.out.println(a / b); // 5System.out.println(5 / 2); // 2.5 ==> 2System.out.println(5.0 / 2); // 2.5int i = 5;int j =2;System.out.println(1.0 * 1 / j); // 2.5System.out.println(a % b); // 0System.out.println(3 % 2); // 1System.out.println("----------------------------------------");// 目标2:掌握使用+符号做连接符的情况int a2 = 5;System.out.println("abc" + a2); // "abc5"System.out.println(a2 + 5); // 10System.out.println("wlgsg" + a2 + 'a'); // wlgsg5aSystem.out.println(a2 + 'a' + "wlgsg"); // 5 + 97 + "wlgsg" = 102wlgsg}
}
总结
  1. 算术运算符有哪些?
  • +、-、/%*
  1. / 需要注意什么,为什么?
  • 如果两个整数做除法,其结果一定是整数,因为最高类型是整数
  1. +除了做基本算术运算符,还有哪些功能?
  • 与字符串做+运算时会被当做链接符,其结果还是字符串
  • 识别技巧:能算则算,不能算就在一起

2. 自增自减运算符

1. 定义
符号作用
自增:++放在某个变量前面或者后面,对变量自身的值加1
自减:放在某个变量前面或者后面,对变量自身的值减1

注意:++、-- 只能操作变量,不能操作字面量

2. 自增自减的使用注意事项
  • ++、-- 如果不是单独使用(如在表达式中、或者同时有其他操作),放在变量前后会存在明显区别
    • 放在变量的前面,先对变量进行+1、-1,再对变量的值进行运算
    int a = 10;
    int res = ++a;
    
    • 放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
    int b = 10;
    int res = b++;
    
代码演示
package b_java语法;public class g_OperaterDemo2 {public static void main(String[] args) {// 目标:掌握自增自减运算符的使用int a = 10;a++; // a = a + 1System.out.println(a); // 11a--; // a = a - 1System.out.println(a); // 10System.out.println("------------------------------");int i = 10;int res = ++i; // 先加后用System.out.println(res); // 11System.out.println(i); // 11int j = 10;int res2 = j++;System.out.println(res2); // 10System.out.println(j); // 11}
}
总结
  1. 自增、自减运算符是什么,有什么作用,需要注意什么?
  • ++、–;对当前变量值+1、-1
  • 只能操作变量,不能操作字面量
  1. 自增、自减运算符放在变量前后有区别吗?
  • 如果单独使用放前放后是没有区别的
  • 非单独使用:放在变量前,先进行变量自增/自减,再使用变量
3. 自增、自减拓展案例
package b_java语法;public class h_OperatorDemo3 {public static void main(String[] args) {int m = 5;int n = 3;// m 5 6 5 4// n 3 4//            6  -  5  +  5  -  4  +  4int result = ++m - --m + m-- - ++n + n-- + 3;System.out.println(result); // 9System.out.println(m); // 4System.out.println(n); // 3}
}

3. 赋值运算符

3.1 基本赋值运算符
  • 就是 “=”,从右往左看
int a = 10; // 先看"="右边,把数据10赋值给左边的变量a存储
3.2 扩展赋值运算符
符号用法作用底层代码形式
+=a+=b加后赋值a = (a的类型)(a + b)
-=a-=b减后赋值a = (a的类型)(a - b)
*=a*=b乘后赋值a = (a的类型)(a * b)
/=a/=b除后赋值a = (a的类型)(a / b)
%=a%=b取余侯赋值a = (a的类型)(a % b)
代码实现
package b_java语法;public class i_OperatorDemo4 {public static void main(String[] args) {// 目标:掌握扩展赋值运算符的使用// +=// 需求:收红包double a = 9.5;double b = 520;a += b; // a = (double)(a + b);System.out.println(a); // 529.5// -= 需求:发红包double i = 600;double j = 520;i -= j; // i = (double)(i - j)System.out.println(i); // 80.0int m = 10;int n = 5;m *= n; // 等价形式:m = (int)(m * n)System.out.println(m); // 50m /= n; // 等价形式:m = (int)(m / n)System.out.println(m); // 10m %= n; // 等价形式:m = (int)(m % n)System.out.println(m); // 0System.out.println("-------------------------------------------");byte x = 10;byte y = 30;// x = x + y; // 编译报错,x、y会自动转为int,不能相加后传入一个byte中x += y; // 等价形式x = (byte) (x + y);System.out.println(x); // 40}
}
总结
  1. 赋值运算符有哪些?
  • 基本的赋值运算符:=(从右往左看)
  • 扩展的赋值运算符:+=、-=、*=、/=、%=
  1. 扩展赋值运算符的作用是什么?有什么特点
  • +=可以实现数据的累加,把别人的数据加给自己
  • 扩展的赋值运算符自带强制类型转换

4. 关系运算符

符号例子作用结果
>a > b判断 a 是否大于 b成立返回 true、不成立返回 false
>=a >= b判断 a 是否大于或者等于 b成立返回 true、不成立返回 false
<a < b判断 a 是否小于 b成立返回 true、不成立返回 false
<=a <= b判断 a 是否小于或者等于 b成立返回 true、不成立返回 false
==a == b判断 a 是否等于 b成立返回 true、不成立返回 false
!=a != b判断 a 是否不等于 b成立返回 true、不成立返回 false
  • 判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true 或者 false

注意“在 java 中判断是否相等一定是 " == " ,千万不要把 " == " 误写成 “=”

代码实现
package b_java语法;public class j_OperatorDemo5 {public static void main(String[] args) {// 目标:掌握关系运算符的基本使用int a = 10;int b = 5;boolean res = a > b;System.out.println(res); // trueSystem.out.println(a >= b); // true 要么a大于b,或者a等于bSystem.out.println(2 >= 2); // trueSystem.out.println(a < b); // falseSystem.out.println(a <= b); // falseSystem.out.println(2 <= 2); // trueSystem.out.println(a == b); // falseSystem.out.println(5 == 5); // true// System.out.println(a = b); // 5 注意了:判断是否相等一定是用 ==,= 是用来赋值的System.out.println(a != b); // trueSystem.out.println(10 != 10); // false}
}

5. 逻辑运算符

  • 把多个条件放在一起运算,最终返回布尔类型的值:true、false
符号叫法例子运算逻辑
&逻辑与2 > 1 & 3 > 2多个条件必须都是 true,结果才是 true;有一个是 false,结果就是 false
|逻辑或2 > 1 | 3 < 5多个条件中只要有一个是 true,结果就是 true
!逻辑非!(2 > 1)就是取反:你真我假,你假我真。!true == false、!false == true
^逻辑异或2 > 1 ^ 3 > 1前后条件的结果相同,就直接返回 false,前后条件的结果不同,才返回 true
符号叫法例子运算逻辑
&&短路与2 > 10 && 3 > 2判断结果与 “&” 一样,过程不同:左边为 false,右边则不执行
||短路或2 > 1 || 3 < 5判断结果与 “|” 一样,过程不同:左边为 true,右边则不执行

注意:在 java 中,“&”、“|”:无论左边是 false 还是 true,右边都要执行

由于 &&、|| 运算效率更高,在开发中用的更多

代码实现
package b_java语法;public class k_OperatorDemo6 {public static void main(String[] args) {// 目标:掌握逻辑运算符的使用// 需求:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8double size = 6.8;int storage = 16;// 1. & 前后的条件的结果必须都是true,结果才是trueboolean res = size >= 6.95 & storage >= 8;System.out.println(res); // false// 需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8// 2. | 只要多个条件中有一个是true,结果就是trueboolean res2 = size >= 6.95 | storage >= 8;System.out.println(res2); // true// 3. !取反的意思System.out.println(!true); // falseSystem.out.println(!false); // trueSystem.out.println(!(2 > 1)); // false// 4. ^ 前后条件的结果相同时返回false,不同时返回trueSystem.out.println(true ^ true); // falseSystem.out.println(false ^ false); // falseSystem.out.println(true ^ false); // trueSystem.out.println(false ^ true); // true// 5. && 左边为false,右边不执行int i = 10;int j = 20;System.out.println(i > 100 && ++j > 99); // falseSystem.out.println(j); // 20// 6. || 左边为true,右边就不执行int m = 10;int n = 30;System.out.println(m > 3 || ++n > 40); // trueSystem.out.println(n); // 30}}
总结
  1. 逻辑运算符有哪些,有什么特点?
  • &:有一个为 false、结果是 false
  • &&:一个为 false、结果就是 false,但前一个为 false,后一个条件不执行了
  • |:有一个为 true、结果是 true
  • ||:一个为 true、结果是 true,但前一个为 true,后一个条件不执行了
  • !:!false=true、!true=false
  • ^:相同是 false、不同是 true

注意:在实际开发中,常用的逻辑运算符还是:&&、||、!


6. 三元运算符、运算符的优先级

6.1 三元运算符介绍
  • 格式:条件表达式 ? 值1 : 值2;
  • 执行流程:首先计算关系表达式的值,如果值为 true,返回值1,如果为 false,返回值2
6.2 运算优先级
  • 在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于 ”+、-“

代码实现
package b_java语法;public class l_OPeratorDemo7 {public static void main(String[] args) {// 目标:掌握三元运算符的基本使用double score = 98.5;String res = score >= 60 ? "成绩及格" : "成绩不及格";System.out.println(res); // 成绩及格// 需求2:找出2个整数中的较大值,并输出int a = 99;int b = 167;int max = a > b ? a : b;System.out.println(max); // 167// 需求3:找3个整数中的较大值int i = 10;int j = 45;int k = 34;// 找出2个整数中的较大值int temp = i > j ? i : j;// 找出temp与k中的较大值int max2 = temp > k ? temp : k;System.out.println(max2); // 45System.out.println(10 > 3 || 10 > 3 && 10 < 3); // trueSystem.out.println((10 > 3 || 10 > 3) && 10 < 3); // false}
}

04 API 介绍、Scanner:获取用户键盘输入的数据

API(Application Programming Interface:应用程序编程接口)

  • Java 写好的程序,咱们程序员可以直接拿来调用
  • Java 为自己写好的程序提供了相应的 程序使用说明书(API 文档)
    • 网址:https://www.oracle.com/cn/java/technologies/downloads/

需求:

  • 请在程序中,提示用户通过键盘输入自己的姓名、年龄,并能在程序中收到这些数据,怎么解决?

使用 Scanner 接收用户键盘输入的数据,需要三个步骤:

  1. 导包:告诉程序去 JDK 的哪个包中找扫描器技术
  2. 抄代码:代表得到键盘扫描器对象(东西)
  3. 抄代码:等待接收用户输入的数据

注意:

  • System、String 在 JDK 中的 Java.lang 包下
  • lang 包不需要我们导包,是默认的包

代码实现

package b_java语法;import java.util.Scanner;public class m_ScannerDemo1 {public static void main(String[] args) {// 1. 导包:一般不需要我们自己做,idea工具会自动帮我们导包的// 2. 抄写代码:得到一个键盘扫描器对象(东西)Scanner sc = new Scanner(System.in);// 3. 开始调用sc的功能,来接收用户键盘输入的数据System.out.println("请您输入您的年龄:");int age = sc.nextInt(); // 执行到这儿,会开始等待用户输入一个整数,直到用户按了回车键,才会拿到数据System.out.println("您的年龄是:" + age);System.out.println("请输入您的名字:");String name = sc.next(); // 执行到这儿,会开始等待用户输入一个字符串,直到用户按了回车键,才会拿到数据System.out.println(name + "欢迎您进入系统~~~");}
}

总结

  1. API 是什么?API 文档是什么?
  • Application Programming Interface,应用程序编程接口:Java 写好的程序,咱们可以直接调用
  • Java 提供的程序使用说明书
  1. Java 程序中如何实现接收用户键盘输入的数据?
  • 使用 Java 提供的 Scanner 来完成,步骤如下
    1. 导包:import java.util.Scanner
    1. 抄代码得到扫描器对象:Scanner sc = new Scanner(System.in);
    1. 抄代码等待接收用户输入的数据:
    • int age = sc.nextInt();
    • String name = sc.next();

总结


相关文章:

Java从入门到精通 - Java语法

Java 语法 此笔记参考黑马教程&#xff0c;仅学习使用&#xff0c;如有侵权&#xff0c;联系必删 文章目录 Java 语法01 变量详解1. 变量里的数据在计算机中的存储原理1.1 二进制1.2 十进制转二进制的算法1.3 计算机中表示数据的最小单元总结1.4 字符在计算机中是如何存储的呢…...

【CF】Day50——Codeforces Round 960 (Div. 2) BCD

B. Array Craft 题目&#xff1a; 思路&#xff1a; 有点意思的构造 首先题目告诉我们 y < x&#xff0c;这是一个重要的条件 我们先来考虑简单情况&#xff0c;假如可以放0进去&#xff0c;那么我们只需要在 y ~ x 之间全放 1 &#xff0c;其余都是 0 即可&#xff0c;但…...

MySQL 日期加减函数详解

MySQL 日期加减函数详解 1. DATE_ADD 函数 基本语法 DATE_ADD(date, INTERVAL expr unit)功能 在指定日期/时间上添加一个时间间隔 参数说明 date&#xff1a;要处理的日期/时间值&#xff08;可以是DATE, DATETIME或TIMESTAMP类型&#xff09;expr&#xff1a;要添加的间…...

NV189NV195美光固态闪存NV197NV199

NV189NV195美光固态闪存NV197NV199 在存储技术持续迭代的2025年&#xff0c;美光固态闪存NV189、NV195、NV197、NV199系列凭借其差异化的性能定位&#xff0c;正在重新定义数据存储的边界。本文将从技术参数、场景适配、行业价值等维度&#xff0c;为不同领域的专业人士提供深度…...

C语言-回调函数

回调函数 通过函数指针调用函数&#xff0c;而这个被调用的函数称为回调函数 回调函数是C语言中一种强大的机制&#xff0c;允许将函数作为参数传递给其他函数&#xff0c;从而在特定时机由后者调用。它的核心在于函数指针的使用 以下是回调函数的使用例子 先创建好一个函数…...

启发式算法-蚁群算法

蚁群算法是模拟蚂蚁觅食行为的仿生优化算法&#xff0c;原理是信息素的正反馈机制&#xff0c;蚂蚁通过释放信息素来引导同伴找到最短路径。把问题的元素抽象为多条路径&#xff0c;每次迭代时为每只蚂蚁构建一个解决方案&#xff0c;该解决方案对应一条完整的路径&#xff0c;…...

DeepSeek与MySQL:开启数据智能新时代

目录 一、引言&#xff1a;技术融合的力量二、DeepSeek 与 MySQL&#xff1a;技术基石2.1 DeepSeek 技术探秘2.2 MySQL 数据库深度解析 三、DeepSeek 与 MySQL 集成&#xff1a;从理论到实践3.1 集成原理剖析3.2 集成步骤详解 四、应用案例&#xff1a;实战中的价值体现4.1 电商…...

Modbus 通讯协议(超详细,简单易懂)

目录 一、协议中的寄存器定义 二、协议概述 三、使用串口的Modbus 报文帧 ​编辑 3.1、Modbus ASCII 模式 3.2、Modbus RTU 模式 3.3、功能码概要 3.4、Modbus 报文分析 四、什么是RS-485 RS-232&#xff1f; 一、协议中的寄存器定义 阅读 Modbus 协议时会发现它的概念别扭…...

单细胞测序试验设计赏析(一)

单细胞测序试验设计赏析&#xff08;一&#xff09; 单细胞测序试验设计中&#xff0c;单细胞测序技术通常会结合其它的技术来共同说明问题&#xff0c;或者结合年龄、性别等临床数据&#xff0c;进行分层分析说明问题以下以发表文章来进行一定的分析。 Single-cell RNA seque…...

ES6入门---第二单元 模块三:对象新增、

一&#xff1a;对象简洁语法&#xff1a; 1、变量简洁 <script>let name Strive;let age 18;let json {name, //name:name,age //age:age};console.log(json);</script> 2、函数简洁 let json {name, //name:name,age, //age:age/* showA:functi…...

多元随机变量协方差矩阵

主要记录多元随机变量数字特征相关内容。 关键词&#xff1a;多元统计分析 二元随机变量(X, Y) 说明&#xff1a;可以理解变量中的 X为身高、Y为体重 总体协方差 σ X Y c o v ( X , Y ) E [ ( X − μ X ) ( Y − μ Y ) ] E ( X Y ) − μ X μ Y \sigma_{XY}cov(X, Y)E[…...

计算机网络-同等学力计算机综合真题及答案

计算机网络-同等学力计算机综合真题及答案 &#xff08;2003-2024&#xff09; 2003 年网络 第二部分 计算机网络&#xff08;共 30 分&#xff09; &#xff08;因大纲变动因此 2004 年真题仅附真题&#xff0c;不作解析。&#xff09; 一、填空题&#xff08;共 10 分&#…...

[案例二] 菜单条制作(Menuscript)与工具条制作(Toolbar)

最近五一正好毕业论文盲审,抽时间研究一下菜单条制作(Menuscript)与工具条制作(Toolbar)的制作,在NX二次开发中唐康林老师已经讲的很详细了,在这里只对视频中的内容进行总结,并且根据自己的想法进行补充。在里海博主的直播教学中发现一个很有趣的NX图标工具,本人大概做了一…...

bellard.org‌ : QuickJS 如何使用 qjs 执行 js 脚本

参阅上一篇&#xff1a;Fabrice Bellard&#xff08;个人网站&#xff1a;‌bellard.org‌&#xff09;介绍 Fabrice Bellard&#xff08;个人网站&#xff1a;‌bellard.org‌&#xff09;是计算机领域最具影响力的程序员之一&#xff0c;其贡献跨越多个技术领域并持续推动开…...

计组复习笔记 3

前言 继续做例题。昨天做到第一个就把我难住了。可恶。 4.1 地址码越长&#xff0c;操作码越短。因为两者加起来是指令字&#xff0c;指令字的大小一般是固定的。扩展编码按照操作码从短到长进行编码。算了先放一下。我先看一下别的复习资料。等会儿再看这个题。 鼓励自己 …...

GCD 深入解析:从使用到底层实现

前言 Grand Central Dispatch (GCD) 是 Apple 基于 C 语言开发的一套完整的并发编程框架。它不仅仅是一个简单的线程管理工具&#xff0c;而是一个高度优化的并发编程解决方案。GCD 的设计理念是将并发编程的复杂性封装在框架内部&#xff0c;为开发者提供简单易用的接口。本文…...

JavaScript中的AES加密与解密:原理、代码与实战

前言 关于有js加密、js解密&#xff0c;js业务相关&#xff0c;找jsjiami官网站长v。 另外前段时间做了个单子跑单了&#xff0c;出售TEMU助手。eller点kuajingmaihuo点com的全自动化助手&#xff0c;可以批量合规&#xff0c;批量实拍图&#xff0c;批量资质上传等。 一、A…...

计算机组成原理实验(7) 堆指令部件模块实验

实验七 堆指令部件模块实验 一、实验目的 1、掌握指令部件的组成方式。 2、熟悉指令寄存器的打入操作&#xff0c;PC计数器的设置和加1操作&#xff0c;理解跳转指令的实现过程。 二、实验要求 按照实验步骤完成实验项目&#xff0c;掌握数据打入指令寄存器IR1、PC计数器的…...

Windows系统下Node.js环境部署指南:使用nvm管理多版本

Windows系统下Node.js环境部署指南&#xff1a;使用nvm管理多版本 一、Node.js介绍二、为什么需要nvm&#xff1f;三、安装前的准备工作1. 本次环境说明2. 卸载现有Node.js&#xff08;如有&#xff09; 三、nvm-windows安装步骤1. 下载安装包2. 安装过程3. 验证安装 四、使用n…...

数据结构*队列

队列 什么是队列 是一种线性的数据结构&#xff0c;和栈不同&#xff0c;队列遵循“先进先出”的原则。如下图所示&#xff1a; 在集合框架中我们可以看到LinkedList类继承了Queue类&#xff08;队列&#xff09;。 普通队列&#xff08;Queue&#xff09; Queue中的方法 …...

C语言蓝桥杯真题代码

以下是不同届蓝桥杯C语言真题代码示例&#xff0c;供参考&#xff1a; 第十三届蓝桥杯省赛 C语言大学B组 真题&#xff1a;卡片 题目&#xff1a;小蓝有很多数字卡片&#xff0c;每张卡片上都是数字1-9。他想拼出1到n的数列&#xff0c;每张卡片只能用一次&#xff0c;求最大的…...

Sharding-JDBC分库分表中的热点数据分布不均匀问题及解决方案

引言 在现代分布式应用中&#xff0c;使用Sharding-JDBC进行数据库的分库分表是提高系统性能和扩展性的常见策略。然而&#xff0c;在实际应用中&#xff0c;某些特定的数据&#xff08;如最新订单、热门商品等&#xff09;可能会成为“热点”&#xff0c;导致这些部分的数据处…...

Dagster中的Ops与Assets:数据管道构建的两种选择

Dagster是一个强大的数据编排平台&#xff0c;它提供了多种工具来帮助数据工程师构建可靠的数据管道。在Dagster中&#xff0c;Ops和Assets是两种核心概念&#xff0c;用于定义数据处理逻辑。本文将全面介绍Ops的概念、特性及其使用方法&#xff0c;特别补充了Op上下文和Op工厂…...

thonny提示自动补全功能

THONNY IDE 自动补全功能配置 在 Thonny IDE 中启用和优化自动补全功能可以显著提升编程体验。为了确保该功能正常工作&#xff0c;需要确认几个设置选项。 配置自动补全 Thonyy IDE 的自动补全默认情况下是开启的。如果发现自动补全未按预期运行&#xff0c;可以通过调整首选…...

PyTorch_阿达玛积

阿达玛积指的是矩阵对应位置的元素相乘&#xff0c;可以使用乘号运算符&#xff0c;也可以使用mul函数来完成计算。 代码 import torch import numpy as np # 1. 使用 mul 函数 def test01():data1 torch.tensor([[1, 2], [3, 4]])data2 torch.tensor([[5, 6], [7, 8]])dat…...

蓝桥杯 摆动序列

摆动序列 原题目链接 题目描述 如果一个序列的奇数项都比前一项大&#xff0c;偶数项都比前一项小&#xff0c;则称为一个摆动序列。 即对于任意整数 i&#xff08;i ≥ 1&#xff09;满足&#xff1a; a₂ᵢ < a₂ᵢ₋₁&#xff0c;a₂ᵢ₊₁ > a₂ᵢ 小明想知道&…...

AI 与生物技术的融合:开启精准医疗的新纪元

在科技飞速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;与生物技术的融合正在成为推动医疗领域变革的重要力量。精准医疗作为现代医学的重要发展方向&#xff0c;旨在通过深入了解个体的基因信息、生理特征和生活方式&#xff0c;为患者提供个性化的治疗方案。AI…...

三、shell脚本--运算符与表达式:让脚本学会“思考”

一、算术运算符&#xff1a;加减乘除取模 在我们写shell脚本时&#xff0c;做点基本的数学运算还是经常需要的。常用的算术运算符跟我们平时学的一样&#xff1a; : 加- : 减* : 乘 (小提示&#xff1a;有时候在某些命令里可能需要写成 \*)/ : 除 (在 Shell 里通常是取整数部分…...

c++ 指针参数传递的深层原理

指针参数传递的深层原理 理解为什么可以修改指针指向的内容但不能直接修改指针本身&#xff0c;需要深入理解指针在内存中的表示方式和函数参数传递机制。 1. 指针的内存表示 指针本质上是一个变量&#xff0c;它存储的是另一个变量的内存地址。在内存中&#xff1a; 假设有…...

【查看.ipynp 文件】

目录 如何打开 .ipynb 文件&#xff1f; 如果确实是 .ipynp 文件&#xff1a; .ipynp 并不是常见的 Jupyter Notebook 文件格式。通常&#xff0c;Jupyter Notebook 文件的扩展名是 .ipynb&#xff08;即 Interactive Python Notebook&#xff09;。如果你遇到的是 .ipynb 文…...

C++ 简单工厂模式详解

简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是最简单的工厂模式&#xff0c;它不属于GoF 23种设计模式&#xff0c;但它是工厂方法模式和抽象工厂模式的基础。 概念解析 简单工厂模式的核心思想是&#xff1a; 将对象的创建逻辑集中在一个工厂类中 客户端不…...

ubuntu使用apt安装软件

1、使用apt list |grep jdk查看要安装的软件 此处以jdk为例 2、执行名称&#xff1a;安装指定版本的软件 sudo apt install openjdk-11-jdk...

TFT(薄膜晶体管)和LCD(液晶显示器)区别

TFT&#xff08;薄膜晶体管&#xff09;和LCD&#xff08;液晶显示器&#xff09;是显示技术中常见的术语&#xff0c;二者既有联系又有区别。以下是它们的核心区别和关系&#xff1a; 1. 基本概念 LCD&#xff08;液晶显示器&#xff09; LCD是一种利用液晶材料特性控制光线通…...

【文献阅读】中国湿地随着保护和修复的反弹

一、研究背景 滨海湿地是全球最具生态价值的生态系统之一&#xff0c;广泛分布在河口、潮间带、泻湖和盐沼等地带&#xff0c;在调节气候、水质净化、生物栖息以及防止海岸侵蚀等方面发挥着关键作用。然而&#xff0c;近年来滨海湿地正面临严峻威胁&#xff0c;全球估计约有50%…...

用Ensaio下载GIS数据

文章目录 简介重力场绘制 简介 Ensaio在葡萄牙语中是随笔的意思&#xff0c;是一个用于下载开源数据集的python库。其底层基于Pooch来下载和管理数据。 Ensaio可通过pip或者conda来安装 pip isntall ensaio conda install ensaio --channel conda-forge由于这个库功能较为单…...

【算法基础】递归算法 - JAVA

一、递归基础 1.1 什么是递归算法 递归算法是一种通过函数调用自身来解决问题的方法。简单来说&#xff0c;就是"自己调用自己"。递归将复杂问题分解为同类的更简单子问题&#xff0c;直到达到易于直接解决的基本情况。 1.2 递归的核心要素 递归算法由两个关键部…...

连续变量与离散变量的互信息法

1. 互信息法简介 互信息&#xff08;Mutual Information, MI&#xff09; 是一种衡量两个变量之间相互依赖程度的统计量&#xff0c;它来源于信息论。互信息可以用于评估特征与目标变量之间的相关性&#xff0c;无论这些变量是连续的还是离散的。互信息法是一种强大的特征选择…...

java_Lambda表达式

1、背景 lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样样&#xff0c;它提供了一个正常的参数列表和一个使用这些参数的主体&#xff08;body&#xff0c;可以是一个表达式和一个代码块&#xff09;。La…...

Python Cookbook-6.17 NuIl对象设计模式的实现

任务 你想减少代码中的条件声明&#xff0c;尤其是针对特殊情况的检查。 解决方案 一种常见的代表“这里什么也没有”的占位符是 None&#xff0c;但我们还可以定义一个类&#xff0c;其行为方式和这种占位符相似&#xff0c;而且效果更好: class Null(object):Null对象总是…...

Java接口全面教程:从入门到精通

目录 接口的基本概念 接口的特性 1. 访问修饰符 2. 接口中的常量 3. 接口中的方法 3.1 抽象方法&#xff08;传统用法&#xff09; 3.2 默认方法&#xff08;Java 8 引入&#xff09; 3.3 静态方法&#xff08;Java 8 引入&#xff09; 3.4 私有方法&#xff08;Java …...

Power Query精通指南3:数据库(查询折叠与数据隐私)、批量合并文件、自定义函数

文章目录 九、批量合并文件9.1 案例背景9.2 合并文件的标准流程9.3 示例&#xff1a;合并文件9.3.1 连接到文件夹9.3.1.1 连接到本地 / 网络文件夹9.3.1.2 连接到 SharePoint 文件夹9.3.1.3 连接到 OneDrive for Business9.3.1.4 连接到其他文件系统 9.3.2 筛选文件9.3.3 合并文…...

Python 学习

这里主要是为了记录我学习Python的过程&#xff0c;更多是使我规范书写Pyhton语言&#xff01; 1. 第一章 Python 定义&#xff1a;一种解释型的语言&#xff0c;区别于其他的高级语言&#xff0c;逐行翻译进行执行。 过程&#xff1a;首先编写编程语言&#xff0c;利用Pytho…...

生成式 AI 的优势

在科技飞速发展的今天,人工智能已经不再是一个遥不可及的概念,而是逐渐渗透到我们生活的方方面面。其中,生成式 AI 更是如同一颗璀璨的新星,在人工智能的浩瀚星空中闪耀着独特的光芒。它究竟有哪些令人瞩目的优势,又为何会成为我们这个时代无法忽视的存在呢? 生成式 AI …...

Hal库下备份寄存器

首先要确保有外部电源给VBAT供电 生成后应该会有这两个文件&#xff08;不知道为什么生成了好几次都没有&#xff0c;复制工程在试一次就有了&#xff09; 可以看到stm32f407有20个备份寄存器 读写函数 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t Backup…...

P1537 数字反转(升级版)详解

这个题目还是对于新手比较锻炼思维严谨性的&#xff0c;我认为是在我做过的一些题目中&#xff0c;此题算上等马 先看题目 我先说明我自己的思路&#xff0c;以及这个题目你需要特别注意的地方 1&#xff0c;数字反转&#xff0c;①可用<algorithm>库里面的reverse函数…...

operator 可以根据需要重载 == 运算符进行比较

要将 vector<AppInfo> 类型的 A 和 B 两个容器进行比较&#xff0c;并且当 B 中有 A 中没有的元素时&#xff0c;插入到数据库中&#xff0c;你可以通过以下步骤实现&#xff1a; 比较元素&#xff1a;遍历 vector<B>&#xff0c;检查每个元素是否在 vector<A&…...

网格不迷路:用 CSS 网格生成器打造完美布局

前言 你是否曾因写错 grid-template-areas 而捶键盘?是否在面对千层嵌套的复杂布局时,瞬间怀疑人生,甚至思考要不要转行去卖奶茶?别慌,CSS 网格生成器闪亮登场,像拼乐高一样,帮你轻松搭建网页结构,还能自动输出干净代码,堪称“前端界的乐高大师”。让我们放下枯燥的代…...

Go小技巧易错点100例(二十八)

本期分享&#xff1a; 1. runtime.Caller(1)获取调用者信息 2. for循环 select{}语法 正文&#xff1a; runtime.Caller(1)获取调用者信息 在 Go 语言中&#xff0c;runtime.Caller(1) 是 runtime 包提供的一个函数&#xff0c;用于获取当前 goroutine 的调用堆栈中的特定…...

Java变量简介

Java变量 -为什么需要变量? 一个程序就是一个世界 变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位,比如: //变量有三个基本要素(类型+名称+值) class Test{public static void main(String [largs){int a=1;int b=3:b=89;Syst…...

Java快速上手之实验六

1. 编写ItemEventDemo.java&#xff0c;当选中或取消选中单选钮、复选钮和列表框时显示所选的结果。 2&#xff0e;编写GUIExample.java&#xff0c;当选中或取消选中单选钮、复选钮时在标签中显示相应结果。 import javax.swing.*; import java.awt.*; import java.awt.event.…...