java之基础2笔记

1 类型转换

1.1 自动类型转换(隐式类型转换)

  1. 从小的数据类型到大的数据类型的转换(如 int 到 long)。

  2. 从低精度的数据类型到高精度的数据类型的转换(如 float 到 double)。

1.2 强制类型转换(显式类型转换)

  1. 从大的数据类型到小的数据类型的转换(如 long 到 int)。

  2. 从高精度的数据类型到低精度的数据类型的转换(如 double 到 float)。

1.3 案例

案例1

public class ImplicitTypeConversion {public static void main(String[] args) {int intValue = 10;long longValue = intValue; // 自动类型转换:int 到 long
​float floatValue = 10.5f;double doubleValue = floatValue; // 自动类型转换:float 到 double
​System.out.println("intValue: " + intValue);System.out.println("longValue: " + longValue);System.out.println("floatValue: " + floatValue);System.out.println("doubleValue: " + doubleValue);}
}

输出结果

案例2

public class ExplicitTypeConversion {public static void main(String[] args) {long longValue = 10000000000L;int intValue = (int) longValue; // 强制类型转换:long 到 int
​double doubleValue = 10.5;float floatValue = (float) doubleValue; // 强制类型转换:double 到 float
​System.out.println("longValue: " + longValue);System.out.println("intValue: " + intValue);System.out.println("doubleValue: " + doubleValue);System.out.println("floatValue: " + floatValue);}
}

输出结果

2 运算符

2.1 算术运算符

2.1.1 算数运算符格式

操作符描述例子
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数B / A等于2
取余 - 左操作数除以右操作数的余数B%A等于0
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

2.1.2 案例

public class ArithmeticOperators {public static void main(String[] args) {int a = 10;int b = 5;
​int sum = a + b; // 加法运算符int difference = a - b; // 减法运算符int product = a * b; // 乘法运算符int quotient = a / b; // 除法运算符int remainder = a % b; // 取模运算符
​System.out.println("a + b = " + sum);System.out.println("a - b = " + difference);System.out.println("a * b = " + product);System.out.println("a / b = " + quotient);System.out.println("a % b = " + remainder);}
}

输出结果

2.2 关系运算符

2.2.1 关系运算符格式

运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)为假。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B) 为真。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)为假。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A <B)为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B)为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真。

2.2.2 案例

public class RelationalOperators {public static void main(String[] args) {int a = 10;int b = 5;
​boolean equal = a == b; // 等于运算符boolean notEqual = a != b; // 不等于运算符boolean greater = a > b; // 大于运算符boolean less = a < b; // 小于运算符boolean greaterOrEqual = a >= b; // 大于等于运算符boolean lessOrEqual = a <= b; // 小于等于运算符
​System.out.println("a == b: " + equal);System.out.println("a != b: " + notEqual);System.out.println("a > b: " + greater);System.out.println("a < b: " + less);System.out.println("a >= b: " + greaterOrEqual);System.out.println("a <= b: " + lessOrEqual);}
}

输出结果

2.3 自增自减运算符

2.3.1 自增自减运算符格式

符号作用
++用作变量前后,对自身值加一
--用作变量前后,对自身值减一

2.3.2 案例

public class selfAddMinus{public static void main(String[] args){int a = 3;//定义一个变量;int b = ++a;//自增运算int c = 3;int d = --c;//自减运算System.out.println("进行自增运算后的值等于"+b);System.out.println("进行自减运算后的值等于"+d);}
}

输出结果

2.4 逻辑运算符

2.4.1 逻辑运算符格式

操作符描述例子
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真

2.4.2案例

public class LogicalOperators {public static void main(String[] args) {boolean a = true;boolean b = false;
​boolean and = a && b; // 与运算符boolean or = a || b; // 或运算符boolean not = !a; // 非运算符
​System.out.println("a && b: " + and);System.out.println("a || b: " + or);System.out.println("!a: " + not);}
}

输出结果

2.5 位运算符

2.5.1 位运算符格式

操作符描述例子
如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<<按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111

2.5.2 案例

public class BitwiseOperators {public static void main(String[] args) {int a = 5; // 二进制表示:101int b = 3; // 二进制表示:011
​int bitwiseAnd = a & b; // 按位与运算符int bitwiseOr = a | b; // 按位或运算符int bitwiseXor = a ^ b; // 按位异或运算符int bitwiseNot = ~a; // 按位取反运算符
​System.out.println("a & b: " + bitwiseAnd);System.out.println("a | b: " + bitwiseOr);System.out.println("a ^ b: " + bitwiseXor);System.out.println("~a: " + bitwiseNot);}
}

输出结果

2.6 赋值运算符

2.6.1 赋值运算符格式

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A
<< =左移位赋值运算符C << = 2等价于C = C << 2
>> =右移位赋值运算符C >> = 2等价于C = C >> 2
&=按位与赋值运算符C&= 2等价于C = C&2
^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2
| =按位或赋值操作符C | = 2等价于C = C | 2

2.6.2 案例

public class AssignmentOperators {public static void main(String[] args) {int a = 10;int b = 5;
​a += b; // 等价于 a = a + ba -= b; // 等价于 a = a - ba *= b; // 等价于 a = a * ba /= b; // 等价于 a = a / ba %= b; // 等价于 a = a % b
​System.out.println("a += b: " + a);System.out.println("a -= b: " + a);System.out.println("a *= b: " + a);System.out.println("a /= b: " + a);System.out.println("a %= b: " + a);}
}

输出结果

2.7 三元运算符

2.7.1 三元运算符格式

variable x = (expression) ? value if true : value if false

2.7.2 案例代码

public class TernaryOperator {public static void main(String[] args) {int a = 10;int b = 5;int max = (a > b) ? a : b; // 如果 a > b,则 max = a,否则 max = bSystem.out.println("Max value: " + max);}
}

输出结果

3 流程控制

3.1 分支结构

  • if-else:根据条件表达式的值选择执行不同的代码块。

  • switch-case:根据变量的值选择执行不同的代码块。

3.2 循环结构

  • for循环:通过初始化、条件判断和更新循环变量来控制循环次数。

  • while循环:当条件满足时循环执行某段代码。

  • do-while循环:先执行代码块,再判断条件是否满足,若满足则继续循环。

3.3 挑战关键字

  1. break:用于跳出循环或switch语句。

  2. continue:用于跳过当前循环的剩余部分,进入下一次循环。

3.4 多重循环

多重循环指的是在一个循环体内部再嵌套另一个或多个循环。常见的有多重for循环、while循环嵌套等。

3.5 案例

例1 使用if-else进行数字比较

public class IfElseExample {  public static void main(String[] args) {  int a = 5;  int b = 10;  if (a > b) {  System.out.println("a 大于 b");  } else if (a < b) {  System.out.println("a 小于 b");  } else {  System.out.println("a 等于 b");  }  }  
}

输出结果

例2 使用switch进行字符串匹配

public class SwitchStringExample {  public static void main(String[] args) {  String day = "MONDAY";  switch (day) {  case "MONDAY":  System.out.println("Today is Monday");  break;  case "TUESDAY":  System.out.println("Today is Tuesday");  break;  // 其他情况...  default:  System.out.println("Invalid day");  }  }  
}

输出结果

例3 使用for循环和break打印1到10之间的奇数

public class ForBreakExample {  public static void main(String[] args) {  for (int i = 1; i <= 10; i++) {  if (i % 2 == 0) {  continue; // 跳过偶数  }  System.out.println(i);  if (i == 5) {  break; // 当i等于5时跳出循环  }  }  }  
}

输出结果

例4 使用嵌套for循环打印九九乘法表

public class NestedForExample {  public static void main(String[] args) {  for (int i = 1; i <= 9; i++) {  for (int j = 1; j <= i; j++) {  System.out.print(j + "x" + i + "=" + (i * j) + "\t");  }  System.out.println(); // 换行  }  }  
}

输出结果

例5 使用while循环和continue打印1到10之间非3的倍数

public class WhileContinueExample {  public static void main(String[] args) {  int i = 1;  while (i <= 10) {  if (i % 3 == 0) {  i++; // 跳过3的倍数  continue;  }  System.out.println(i);  i++;  }  }  
}

输出结果

例6 使用do-while循环打印1到10

public class DoWhileExample {  public static void main(String[] args) {  int i = 1;  do {  System.out.println(i);  i++;  } while (i <= 10);  }  
}

输出结果

4 数组

4.1 一维数组的使用

4.1.1一维数组的基本概念

一维数组是最简单的数组,用于存储相同类型的数据,且这些数据在内存中连续存放。

4.1.2 一维数组的声明和初始化

1.声明

int[] array; // 声明一个整型数组

2.初始化

  • 静态初始化:在声明数组的同时指定数组的元素。

int[] array = {1, 2, 3, 4, 5};
  • 动态初始化:只指定数组的长度,由系统自动为数组元素分配默认值(对于数值类型,默认值为0;对于引用类型,默认值为null)。

int[] array = new int[5]; // 数组元素默认为0

4.1.3 访问数组元素

通过索引(下标)来访问数组元素,索引从0开始。

int value = array[2]; // 访问数组中索引为2的元素,即第3个元素

4.1.4 数组的长度

通过length属性来获取数组的长度。

int length = array.length; // 获取数组的长度

4.1.5 案例

public class OneDArrayExample {  public static void main(String[] args) {  // 静态初始化数组  int[] numbers = {10, 20, 30, 40, 50};  // 访问和修改数组元素  System.out.println("第一个元素:" + numbers[0]);  numbers[1] = 25;  System.out.println("修改后的第二个元素:" + numbers[1]);  // 遍历数组  for (int i = 0; i < numbers.length; i++) {  System.out.println("数组元素:" + numbers[i]);  }  }  
}

输出结果

4.2 多维数组的使用

4.2.1 多维数组的基本概念

多维数组是数组的数组,最常见的多维数组是二维数组。二维数组常用于表示表格或矩阵。

4.2.2 二维数组的声明和初始化

1.声明

int[][] matrix; // 声明一个整型二维数组

2.初始化

  • 静态初始化

int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  • 动态初始化

int[][] matrix = new int[3][]; // 第一维长度为3,第二维长度动态指定  
matrix[0] = new int[3];  
matrix[1] = new int[2];  
matrix[2] = new int[4];

4.2.3 访问二维数组元素

通过两个索引(下标)来访问二维数组元素。

int value = matrix[1][2]; // 访问第二行第三列的元素

4.2.4 案例代码

public class TwoDArrayExample {  public static void main(String[] args) {  // 静态初始化二维数组  int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};  // 访问二维数组元素  System.out.println("第二行第三列的元素:" + matrix[1][2]);  // 遍历二维数组  for (int i = 0; i < matrix.length; i++) {  for (int j = 0; j < matrix[i].length; j++) {  System.out.print(matrix[i][j] + " ");  }  System.out.println(); // 换行  }  }  
}

输出结果

5 方法

5.1 方法的定义

在Java中,方法(也称为函数)是用来执行特定任务的代码块。方法的定义包括方法名、返回类型(如果方法返回值)、参数列表以及方法体。

示例:

public class Example {  // 一个无参数、无返回值的方法(void表示不返回任何值)  public void sayHello() {  System.out.println("Hello, World!");  }  // 一个带参数、有返回值的方法  public int addNumbers(int a, int b) {  return a + b;  }  
}

5.2 方法的使用

使用(或调用)方法时,你需要指定方法名,并传递任何必要的参数(如果方法有参数的话)。调用方法的结果(如果有的话)可以被赋值给一个变量,或者直接使用(如果返回类型是void)。

示例:

public class ExampleDemo {  public static void main(String[] args) {  Example example = new Example();  // 调用无参数的方法  example.sayHello();  // 调用带参数的方法,并将结果赋值给变量  int sum = example.addNumbers(5, 3);  System.out.println("The sum is: " + sum);  }  
}

5.3 方法的返回值

方法的返回类型决定了方法执行完毕后返回给调用者的值的类型。如果方法没有返回值,其返回类型应该是void

示例(见上面addNumbers方法)。

5.4 方法的调用

方法的调用是通过方法名进行的,并可能包含传递给方法的参数列表(用括号包围)。调用方法后,控制权会传递给该方法,执行其中的代码块,然后返回(如果有返回值的话)。

示例(见上面main方法中的方法调用)。

5.5 递归

递归是一种编程技术,其中方法会直接或间接地调用自己。递归通常用于解决可以分解为更小、类似子问题的问题,如阶乘、斐波那契数列等。

示例:计算阶乘的递归方法:

public class Factorial {  public static int factorial(int n) {  if (n == 0 || n == 1) {  return 1;  } else {  return n * factorial(n - 1);  }  }  public static void main(String[] args) {  System.out.println("Factorial of 5 is: " + factorial(5));  }  
}

6 局部变量和成员变量

6.1 局部变量

  • 定义位置:在方法、构造器或者初始化块中定义。

  • 作用范围:定义它的块内,包括该块中的嵌套块。

  • 生命周期:当进入定义它的块时,被创建;当退出该块时,被销毁。

  • 初始化:局部变量在使用前必须显式初始化,否则编译会报错。

6.2 成员变量

  • 定义位置:在类中,但在任何方法、构造器或初始化块之外。

  • 作用范围:整个类体。

  • 生命周期:与对象的存在时间一致,当对象被创建时,成员变量被分配内存空间并初始化;当对象被销毁时,成员变量所占用的内存空间被释放。

  • 初始化:如果没有显式初始化,则会有默认值(如数值类型默认为0,引用类型默认为null)。

6.3 案例

public class VariableExample {  // 成员变量(静态成员变量)  static int staticVar = 10;  // 成员变量(实例成员变量)  int instanceVar = 20;  public static void main(String[] args) {  // 静态方法中的局部变量  int localVarInStaticMethod = 30;  System.out.println("Local variable in static method: " + localVarInStaticMethod);  // 创建对象  VariableExample example = new VariableExample();  // 访问静态成员变量  System.out.println("Static member variable: " + staticVar);  // 访问实例成员变量(通过对象)  System.out.println("Instance member variable: " + example.instanceVar);  // 对象方法中的局部变量  example.printLocalVariable();  }  // 实例方法  public void printLocalVariable() {  // 局部变量  int localVarInInstanceMethod = 40;  System.out.println("Local variable in instance method: " + localVarInInstanceMethod);  // 访问实例成员变量(直接访问,因为当前对象上下文中)  System.out.println("Instance member variable (inside instance method): " + this.instanceVar);  // 访问静态成员变量(也可以,但通常不推荐在实例方法中直接访问静态成员)  System.out.println("Static member variable (inside instance method): " + staticVar);  }  
}

输出

Local variable in static method: 30  
Static member variable: 10  
Instance member variable: 20  
Local variable in instance method: 40  
Instance member variable (inside instance method): 20  
Static member variable (inside instance method): 10

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

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

相关文章

什么是接地电阻柜呢?

接地电阻柜是一种用于保护电气设备和人身安全的设备&#xff0c;它可以有效地防止电气设备因接地故障而受到损害。 接地电阻柜的主要作用是将电气设备的接地电阻降低到安全范围内&#xff0c;以防止接地故障引起的火灾、爆炸等事故。接地电阻柜通常由接地电阻、接地母线、接地开…

pytest中钩子函数的使用

收集测试结果&#xff1a; 2. pytest_terminal_summary(terminalreporter, exitstatus,config) 在测试执行完毕后&#xff0c;用于生成并显示最终的测试摘要信息到终端&#xff0c;你可以实现自定义的测试报告汇总和显示。 例如&#xff1a;你可以在此钩子函数中计算测试用例…

TypeScript基础语法和使用规则+对象初始化

TypeScript (TS) 是一种由微软开发的开源语言&#xff0c;它是 JavaScript 的一个超集&#xff0c;添加了可选的静态类型和基于类的面向对象编程。它旨在开发大型应用程序并将 JavaScript 编译成清晰和简洁的代码。 一、基础语法和使用规则 1. 类型注解 类型注解是 TypeScri…

关于Apache Tomcat请求走私漏洞(CVE-2023-46589)

一、 基本情况 Apache Tomcat是一个流行的开源Web服务器和Java Servlet容器。 二、 漏洞描述 Apache Tomcat中修复了一个请求走私漏洞&#xff08;CVE-2023-46589&#xff09;。 由于Tomcat未能正确解析HTTP Trailer标头&#xff0c;超出标头大小限制的特制Trailer标头可能…

儿童护眼灯哪个好?带你了解适合儿童的护眼灯款式分享

儿童护眼灯哪个好&#xff1f;作为我们日常生活中极为实用的小家电&#xff0c;为了确保使用台灯时的舒适性并且保护视力&#xff0c;选择一款专业的护眼台灯成为了一个明智的决定。这样的台灯能够提供更舒适、均匀的照明环境&#xff0c;那么到底儿童护眼灯哪个好你&#xff1…

实现手机空号过滤或手机号码有效性验证

手机空号过滤或手机号码有效性验证通常涉及使用专门的API接口来查询手机号码的状态。这些API接口通常由第三方服务提供商提供&#xff0c;它们会与电信运营商合作或利用自己的数据库来验证手机号码是否真实存在、是否已被分配、是否处于空号状态等。 以下是一些步骤和考虑因素…

关于我做了一个python项目的总结

前言: 首先,我通过python的爬虫技术做了一个关于音乐的项目,实现的功能有搜索音乐,输出歌词,保存歌词,下载音乐 项目构思: 在刚开始时,首先是构思,构思自己要去做哪个方面的,并且要怎么去实现我想实现的功能,然后我就想到要去做一个关于音乐方面的 项目实现: 确定了自己的方向…

爬虫——有道云翻译

废话不多说直接上代码 固定文本内容 import timefrom selenium import webdriver from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWai…

Day 41 NGINX详解

Nginx详解 一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 1、HTTP 工作原理 HTTP协议通信流程 WEB Server&…

超维小课堂 | 6、MAVROS与机载电脑Jetson nano通信

MAVROS与机载电脑Jetson nano通信 ROS系统镜像——Jetson nano b01 4G 链接: 百度云镜像链接 链接&#xff1a;https://pan.baidu.com/s/1NoIEvVdsiYLPvVOWM98hjQ 提取码&#xff1a;cwkj 简介&#xff1a;MAVROS和Jetson nano通信&#xff0c;设置飞控参数和MAVROS文件&am…

Starlette

Starlette是一个轻量级的ASGI框架和工具包&#xff0c;主要用于构建高性能的asyncio服务。它具备以下特点&#xff1a; 轻量级HTTP Web框架&#xff1a;Starlette提供了一个简单且复杂度低的HTTP Web框架。WebSocket支持&#xff1a;允许在应用中实现WebSocket功能。后台任务&…

程序猿大战Python——了解Python

了解Python 编程语言的发展 目标&#xff1a;了解编程语言。 我们知道&#xff0c;咱们的日常沟通交流使用的语言&#xff1a;普通话。 那什么是编程语言呢&#xff1f; 【官方解释】编程语言是用来定义程序的语言形式&#xff0c;也就是说&#xff0c;我们可以通过编程语言…

学习使用js监测浏览器窗口大小变化

学习使用js监测浏览器窗口大小变化 在JavaScript中&#xff0c;可以通过监听resize事件来检测浏览器窗口的大小变化。以下是一个简单的示例代码&#xff0c;用于检测浏览器窗口大小的变化并在控制台输出新的窗口尺寸&#xff1a; javascript // 定义一个处理窗口大小变化的函数…

el-table后台接口返回数据动态合并单元格

在实际工作中&#xff0c;通常数据都是后台接口返回的&#xff0c;有时需要对数据进行合并&#xff0c;可利用el-table的span-method方法&#xff0c;结合数据处理&#xff0c;进行合并&#xff0c;如下实例 <el-table :data"dataTable"borderrow-key"id&qu…

root账号,cmd命令行能用ssh连上服务器,但是vscode连接报错Permission denied,please try again

☆ 问题描述 但是cmd能连接上 ★ 解决方案 点击 然后add到自己的配置文件下 重新选择 这个时候就会出现刚刚添加的&#xff0c;点击选择 输入密码 然后就ok了 ✅ 总结 只能说&#xff1a;玄学&#xff01;

剪画小程序:自媒体必备神器:【视频翻译】自动识别语言、翻译、配音,让外语视频秒变母语!

Hello&#xff0c;大家好呀&#xff01;我是不会画画的小画~ 今天给大家带来一款敲实用的视频翻译工具一一 小程序【剪画】 我们有很小伙伴在学习他国语言时&#xff0c;最大的障碍就是语言的问题了&#xff0c;想要 理解其中的内容&#xff0c;在这之前要下很大的功夫去掌握…

创业新风口:智能售货机的崛起

随着科技的飞速发展&#xff0c;智能售货机已经不再是简单的自动贩卖机&#xff0c;它们变得更加智能、灵活&#xff0c;能够适应各种场景需求&#xff0c;从传统的饮料、零食到新鲜水果、便当、甚至是电子产品&#xff0c;无所不包。这种24小时无人值守的商业模式&#xff0c;…

居民社区团购小程序源码系统 拼团管理+团长管理功能 带完整的安装代拿代码包以及搭建教程

系统概述 居民社区团购小程序源码系统是一款专为社区团购打造的一站式解决方案。它整合了拼团管理和团长管理等核心功能&#xff0c;能够帮助企业和创业者快速搭建自己的社区团购平台&#xff0c;实现高效运营和便捷管理。 代码示例 系统特色功能 1.拼团管理&#xff1a;支持…

工业互联网基本概念及关键技术(295页PPT)

资料介绍&#xff1a; 工业互联网的核心是通过工业互联网平台把设备、生产线、工厂、供应商、产品和客户紧密地连接融合起来。这种连接能够形成跨设备、跨系统、跨厂区、跨地区的互联互通&#xff0c;从而提高效率&#xff0c;推动整个制造服务体系智能化。同时&#xff0c;工…

Spark实战:Spark读取Excel文件

由于Apache Spark本身不支持直接读取Excel文件&#xff0c;我们需要通过一些间接手段来实现&#xff0c;例如先将Excel文件转换为CSV格式&#xff0c;然后使用Spark读取CSV文件。下面我将给出完整的Scala代码示例&#xff0c;包括如何将Excel文件转换为CSV文件&#xff08;这里…