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

Android SDK 上手指南||第七章 Java应用程序编程

第七章 Java应用程序编程

如果大家已经对Java非常熟悉,那么不妨直接忽略这部分内容。如果大家的技巧还存在局限或者对Java这种语言只闻其名,那么本文将为各位解答很多在Android开发当中经常遇到的问题。需要注意的是,这篇文章并不能作为Java起步教程来阅读,最多只能算是基础知识汇总。如果对Java毫无了解,大家还需要参考其它一些额外的Java学习资料。

在这份教程中,我们不会过度深入细节,不过如果大家对于某些概念还不大清楚,请点击此处参阅甲骨文Java指南。这是一份非常优秀的Java语言指导材料,非常适合初学者。如果在刚刚开始阅读时发现本教程提到的一些内容有些陌生,也请大家千万不要惊慌。只要真正着手开始在Android项目中进行尝试,各位很快就能理解本文表达的内容。

1. Java语法

第一步

大家已经在我们的Android项目中见识过一部分Java语法了,但为了清楚起见,让我们再从另一个项目重新学习。这一次我们不再使用Android项目,而直接换成Java项目——这样大家就能更轻松地感受到我们所使用的结构。打开Eclipse,点击“New”按钮。在弹出的导航窗口中下滚到Java文件夹中并将其打开,选择“Java Project”然后单击下一步。

7.1new_java_project

输入“MyJavaProject”作为项目名称并点击“Finish”。Eclipse接下来会在工作区内创建我们的新项目。在Package Explorer当中,打开新项目文件夹,右键点击“src”并选择“New”、然后选“Class”。这时在Name框中输入“MyMainClass”。接着勾选旁边的复选项“public static void main”最后点击“Finish”。

7.2new_java_class

Eclipse会创建出类并在编辑器中打开。大家不必过多关注项目结构或者类中的现有内容,因为我们的Android项目所使用的结构与Java项 目并不相同。各位可以利用这个项目来磨练自己的Java编码技能,在这里代码的运行与测试都要比Android应用简便得多,而且我们也能更多地关注 Java语法本身。

我们在类文件中看到的“public static void main”行就是主方法。无论方法的具体内容是什么,它都会在应用程序运行时加以执行。方法的内容就是显示在“public static void main(String[] args)”后面大括号里的部分。Eclipse可能还生成了一个“to do”行——直接无视就好。在其后创建新行,我们就从这里开始添加自己的代码。

第二步

在Java当中,一条变量可以保存一个数据值,例如文本字符串或者数字。当我们在Java中创建或者“声明”一个变量时,需要指定其中的数据类型并为其命名。输入以下代码:

int myNum; 

这一行声明了一个整数变量。我们可以通过以下代码行声明一个变量并为其分配一个值:

int myNum = 5; 

现在我们可以通过名称引用这条变量了。添加以下代码行,从而将变量值写入到输出控制台:

System.out.println(myNum);

大家一般不会在自己的Android应用中以这种方式向系统输出写入结果,而是用LogCat视图取而代之。不过通过这种输出写入方式,我们能够更为便捷地对Java代码进行测试。

第三步

现在让我们运行应用。运行过程与Android应用存在些许不同,但我们会在稍后继续进行说明。选择“Run”,而后选择“Run Configurations”。在弹出的列表左侧选择“Java Application”并点击上方的“New launch configuration”。如果这是我们的惟一一个Java应用,Eclipse会自动选择运行刚刚创建完成的小小成果。

7.3run_config

现在点击“Run”来运行我们的应用程序。大家会看到,编辑器下方的控制台视图中将显示出数字“5”。大家可以利用这种方式在学习过程中对Java代码进行测试。

7.4console_output

大家现在可以通过工具栏中的“Run”按钮随时运行上一次启动过的项目。

7.5run_button

第四步

无论何时,只要是在Java中进行变量声明,我们都会使用相同的语法。为了在以后的编程工作中为变量分配不同的值,我们可以通过名称对其进行引用:

 myNum = 3;

上述代码会覆盖掉现有值。在Java中存在着很多不同的变量类型。其中int属于被引用的基本类型,此外还有一些其它数字类型;char用于字符值,而boolean则用于保存真假值。对象的类型也分许多种;关于对象的话题,我们放在以后进行讨论。对于大家来说,最熟悉的基本对象类型应该要数String了,它的作用是保存一条文本字符串:

 String myName = "Sue";

文本字符串值要用引号括起来。大家可以在正面的例子中看到它的使用方法:

 System.out.println("number: " + myNum);

添加上述代码并运行,控制台会显示“number:”再加上变量值。

第五步

在上面我们看到了赋值运算符“=”——正面我们再来看其它一些常见运算符:

//add
myNum = 5+6;
//subtract
myNum = 7-3;
//multiply
myNum = 3*2;
//divide
myNum = 10/5;
//remainder
myNum = 10%6;
//increment (add one)
myNum++;
//decrement (subtract one)
myNum--;

运算符既可以被用在变量当中,也可以作为硬编码数字(如上所示):

int myNum = 5;
int myOtherNum = 4;
int total = myNum+myOtherNum;//9

第六步

作为Android基础内容的另一种Java结构就是注释。大家可以通过以下两种方式添加注释:

//this is a single line comment/* This is a multiline comment
* stretching across lines
* to give more information
*/

最重要的是养成编写代码的同时添加注释的好习惯,这一方面便于我们自己日后查看,另外也能让其他合作者了解我们的编码意图。

2. 控制结构

第一步

我们向主方法中添加的代码会在Java应用程序运行时同时执行。而在运行我们所创建的Android应用程序时,主Activity中onCreate方法的代码会同时执行。这些方法中的所有代码行都会按从上到下的顺序依次执行,不过执行的流程并不总是线性的。Java当中有很多控制结构,正面我们就从条件开始了解其中最常见的几种。条件语句一般用于进行测试从而确定执行流程。在Java当中,最简单的条件结构就是if语句:

if(myNum>3) System.out.println("number is greater than 3");

这项测试的目的在于检查变量的值是否大于3。如果确实大于3,那么字符串将被写入输出结果。如果小于等于3,则不向输出结果写入任何内容、继续执行程序中的下一行。条件测试会“返回”一个真假值。真与假都属于boolean值。我们也可以向其中添加else,这样其内容只会在返回假值时才执行:

if(myNum>3) System.out.println("number is greater than 3");
elseSystem.out.println("number is not greater than 3");

在我们的示例中,else语句会在值等于或者小于3时执行。尝试在代码的整数变量中添加不同的值,看看条件测试结果会发生哪些变化:

if(myNum>10) System.out.println("number is greater than 10");
else if(myNum>7)System.out.println("number is greater than 7");
else if(myNum>3)System.out.println("number is greater than 3");
elseSystem.out.println("number is 3 or less");

只有在流程中的每一次测试中都返回假值时,所有测试行才会被彻底执行一遍。因此对于大部分数字来说,只会输出一条字符串。如果有必要,大家可以把多条else if语句串点起来。大家还可以利用if语句与一个或者多个else if相结合,而不必每一次都在之后单独设置else。

下面我们测试一个数字是否大于另一个。尝试使用以下变量:

if(myNum<10)System.out.println("number less than 10");
if(myNum==10)System.out.println("number equals 10");
if(myNum!=10)System.out.println("number is not equal to 10");
if(myNum>=10)System.out.println("number either greater than or equal to 10");
if(myNum<=10)System.out.println("number either less than or equal to 10");

大家也可以利用包含字符串的变量类型进行类似的测试。要同时进行多项测试,可以利用以下语法:

if(myNum>=10 && myNum<=50)System.out.println("number is between 10 and 50");

其中的“&&”是作为“and”运算符存在的,意思是整条语句只有在两项测试都返回真值时才被判定为真。而“or”运算符将在两条测试中任意一条返回真值时判定为真:

if(myNum<0 || myNum!=-1)System.out.println("number is less than 0 or not equal to -1");

为了将代码组成代码块,我们可以使用大括号——两个括号之间的所有代码都会在测试返回真值时执行:

if(myNum<10)
{System.out.println("number less than 10");myNum=10;
}

这些括号能够在循环、方法以及类中实现代码分组。

第二步

接下来让我们看看循环。下面的for循环会进行十次遍历,意味着它的内容将执行十次:

for(int i=0; i<10; i++){    System.out.println(i);}

在for循环中的第一个表达式旨在将一个整数型计数器变量初始化为零。第二个表达式则是条件测试,检查该变量的值是否小于10。如果返回的是真值,则循环内容得到执行;如果返回的是假值,则中止循环。一旦循环当中的内容开始执行,第三个表达式就同时执行,即递增计数器。

另一种循环while所使用的语法稍有区别。以下代码就是我们利用while来实现上面的for循环的相同执行效果:

int i=0;
while(i<10){System.out.println(i);i++;
}

循环当中可以容纳多行代码,其中包括其它循环。

第三步

我们已经接触了主方法与Android的onCreate方法。下面让我们一起学习如何创建自己的方法。将以下方法放置在主方法的右括号之后:

public static void doSomething(){System.out.println("something");
}

该方法被定义为public,这意味着项目中的所有类都可以调用其进程。如果它的属性为“private”,则代表只供同一个类内部进行访问(也就是‘visibility’)。一般来说,大家不会在自己的第一个Android应用中包含“static”修饰符,因此忽略掉它即可。而“void”代表着返回类型。在我们的示例中,该方法不会返回任何值。为了执行该方法,我们需要在主方法中添加一项调用:

 doSomething();

运行应用程序并查看其功能——改变方法以返回一个值:

public static int doSomething(){return 5;
}

改变方法调用并再次运行:

 System.out.println(doSomething());

返回的值会被写出。方法还可以接收参数:

public static int doSomething(int firstNum, int secondNum){return firstNum*secondNum;
}

在调用该方法时,大家必须符合正确的参数类型与数字:

 System.out.println(doSomething(3, 5));

方法能够将应用程序进程拆分为逻辑块。如果大家需要多次执行同一项任务,那么它们的作用将非常重要;我们可以简单在方法中进行定义,然后在需要时随时调用。如果各位需要改变处理流程,也只需在方法代码中进行修改。

3. 类与对象

第一步

我们已经了解了方法如何被用于重新使用代码并将其拆分成逻辑部分。类与对象则能够在更大的范围内实现此类功能。大家可以将应用中的任务划分成不同对象,其中每个对象都由它所归属的类为其定义一系列职责。这类似于用一种方法负责一个特定功能区域,不过一个对象可以拥有多个方法而且能够保存数据值。

想象我们正在创建一款游戏——大家可以创建一个专门用来处理用户详细信息的类。在Package Explorer中选择我们的应用程序包,右键点击并选择“New”而后是“Class”。输入“GameUser”作为类名称,确保main method stub复选框没有被勾选,然后点击“Finish”。Eclipse会打开这个类文件,在初始状态下其中只包含它的类声明概要:

public class GameUser {//class content
}

大家所添加的所有内容都应该位于两个大括号之间(除非大家添加导入语句,这部分内容将位于最前方)。我们的Android应用会识别出罗列于文件开头的包名称。当然这里我们使用的是默认包,所以前面并没有列出其它内容。

第二步

在这个类当中添加以下变量:

private String playerName;
private int score;

这些被称为“实例变量”,因为它们被定义为我们所创建的类中的实例。在它们之后添加一个构造方法,它会在该类中的某个对象被创建后开始执行:

public GameUser(String userName, int userScore){playerName=userName;score=userScore;
}

这里的构造永远与类使用同样的名称,而且可能要求也可能不要求使用参数。该构造通常应该向实例变量分配值,一般是通过参数来实现。

第三步

类也可以定义方法。将以下典型集合添加到构造之后:

public String getName() {return playerName;}
public int getScore() {return score;}
public void setName(String newName) {playerName=newName;}
public void setScore(int newScore) {score=newScore;}

这些被称为get与set方法,或者叫getter与setter,因为它们会利用接收及发送实例变量值的能力将外部代码添加到类中来。查看Eclipse中的Outline视图,理解它如何帮助实现导航类内容。

7.6new_class_outline

第四步

保存我们新建的类文件。回到主类当中,为新类在主方法中创建一个对象:

GameUser aUser = new GameUser("Jim", 0);

我们符合构造当中的参数要求——以上代码中的“new”关键字将使构造开始执行。现在我们可以使用这个类实例,通过调用其方法访问其中的数据:

System.out.println(aUser.getScore());
aUser.setScore(5);
System.out.println(aUser.getScore());

运行程序以查看调用对象上的public方法之后,值产生了什么样的变化。大家可以创建多个对象实例,并对它们进行分别管理:

GameUser anotherUser = new GameUser("Jane", 5);

4. 继承与界面

第一步

我们已经了解了如何通过创建对象实例来使类定义一系列职责。它的效果不仅作用于我们所创建的类本身,同时也作用于其它我们能够使用的现有Java及Android类。除此之外,在创建这些平台类实例的同时,大家还可以利用继承对其加以扩展。在继承机制的帮助下,我们可以创建出一个继承现有类功能、同时又拥有自己运行流程的类。在我们所创建的第一个Android项目中,主Activity类就是一个很好的例子。

现在打开Android项目中的这个类。在类声明的开头,大家会看到“extends Activity”。这意味着该类属于Android Activity类中的一个子类。这里的Activity类用于使Android系统处理向用户呈现的屏幕内容,而各方法则用于不同变量状态下的屏幕内容(创建、暂停与消除等)。通过向Android Activity类声明中的定义方法添加代码并在必要时增加额外方法的方式,我们能够更专注于实现应用程序的独特风格。

这是我们经常会在Android上使用的模式,用于为应用程序的常见需要扩展定义类。大家可以用自己的类适当对其加以补充。

第二步

再来看Activity类中的起始行。请记住,我们添加了“implements OnClickLisener”来处理UI中的按钮点击操作。这将通过引用被实施在界面当中。界面类似于一个我们利用“extends”继承而来的类,只不过界面声明只需简单罗列方法概述。大家需要对每一项概述进行方法实施。因此当我们实施OnClickListener时,需要委托该类提供一个onClick方法——正如我们在之前的Android项目中所做。因此界面类似于一项协定。在继承机制的辅助下,扩展类能够继承由类声明所提供的、用于实现超类(即经过扩展的类)的方法实施。如果需要,大家可以覆盖这些实施内容。

总结

在今天的教程中,我们简要介绍了一些Java语法方面的基本知识。当然,还有很多其它关于Java的结构与概念需要了解。如果大家此前没有接触过Java,又希望保证自己能拥有足以顺利应对Android开发工作的必要知识,请务必点击此处认真阅读甲骨文公司发布的Java指南。其中需要认真学习的主题包括数组与交换语句。在本系列的后续文章中,我们将探讨一些大家最常用到的Android类。而在下一章节中,我们则开始探索Android应用项目中的资源。

相关文章:

Android SDK 上手指南||第七章 Java应用程序编程

第七章 Java应用程序编程 如果大家已经对Java非常熟悉&#xff0c;那么不妨直接忽略这部分内容。如果大家的技巧还存在局限或者对Java这种语言只闻其名&#xff0c;那么本文将为各位解答很多在Android开发当中经常遇到的问题。需要注意的是&#xff0c;这篇文章并不能作为Java…...

Vue 框架如何获取数组中的值?

在Vue框架中&#xff0c;获取数组中的值可以通过以下几种方式实现&#xff1a; 1、使用数组索引&#xff1a; 可以使用数组的索引来获取特定位置的值。在Vue中&#xff0c;可以通过在模板中使用差值表达式或指令来获取数组中的值。例如&#xff1a; <div>{{ myArray[0]…...

如何成立一家音频芯片/算法设计公司

一 如何成立一家音频芯片设计公司&#xff1f; 要成立一家音频芯片设计公司&#xff0c;可以按照以下步骤进行&#xff1a; 市场调研&#xff1a;了解音频芯片市场的需求和竞争情况&#xff0c;确定目标客户和定位。 制定商业计划&#xff1a;根据市场调研的结果&#xff0…...

用docker-compose搭建LNMP

docker-compose搭建LNMP 一、compose 的部署1.Docker Compose 环境安装 二、编写Docker Compose1.准备依赖文件,配置nginx2.配置mysql3.配置php4.编写docker-compose.yml5.执行6.查看 一、compose 的部署 &#xff08;1&#xff09;公司在实际的生产环境中&#xff0c;需要使用…...

JavaScript:基本语法(变量与函数的定义与使用)

文章目录 script 标签srcdefer 延迟加载 基本语法定义变量 与 使用变量基本类型typeof 查看变量类型复合类型数组类型定义对象类型定义 函数定义函数使用函数 script 标签 src 和scc一样可以内嵌也可以外src外引。 一般是推荐外引。 <script src"idx.js">&l…...

树莓派4B上安装Gitlab

参考连接&#xff1a; 树莓派上使用 GitLab 搭建专业 Git 服务 | 树莓派实验室 gitlab reconfigure 卡住 ruby_block[wait for redis service socket] action run_芹菜学长的博客-CSDN博客 以及用到了讯飞星火 系统版本信息 1.进入 giblab安装页面gitlab/gitlab-ce - Instal…...

JVM 之字节码(.class)文件

本文中的内容参考B站尚硅谷宋红康JVM全套教程 你将获得&#xff1a; 1、掌握字节码文件的结构 2、掌握Java源代码如何在JVM中执行 3、掌握一些虚拟机指令 4、回答一些面试题 课程介绍 通过几个面试题初始字节码文件为什么学习class字节码文件什么是class字节码文件分析c…...

neo4j函数

1、断言函数 1all()判断是否一个断言适用于列表中的所有元素2all()判断是否一个断言至少适用于列表中的一个元素3none()如果断言不适用于列表中的任何元素&#xff0c;则返回true4single()如果断言刚好只适用于列表中的某一个元素&#xff0c;则返回true5exists()如果数据局库…...

wazuh初探系列一 : wazuh环境配置

目录 方法一&#xff1a;一体化部署 安装先决条件 第一步、安装所有必需的软件包 第二步、安装Elasticsearch 1、添加 Elastic Stack 存储库 安装 GPG 密钥&#xff1a; 添加存储库&#xff1a; 更新源&#xff1a; 2、Elasticsearch安装和配置 安装 Elasticsearch 包…...

【2023】Spring Validation中@NotNull注解、@NotBlank注解介绍以及使用

【2023】Spring Validation中NotNull注解、NotBlank注解介绍以及使用 前言一、简介spring-validation框架的常用注解 二、代码实现添加依赖1、实体举例2、Controller层:3、统一异常处理4、结果返回验证通过返回验证失败返回 前言 平常我们在编写代码的时候总需要很多if判空&am…...

nodejs+vue养老院管理系统 u1yrv

本智慧养老中心管理系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了老人信息和管理员这两者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可…...

高效PDF校对:释放高质量内容的力量

在数字化世界中&#xff0c;内容是王者。随着企业和个人越来越依赖数字文档进行沟通、分享和创新&#xff0c;我们在PDF中传递的内容的质量变得至关重要。在这里&#xff0c;我们将探索高效的PDF校对如何帮助您释放高质量内容的真正潜力。 超越仅仅是“正确” 当我们谈论PDF校…...

【Git游戏】提交的技巧

修改历史的提交 rebase 通过git rebase -i 将要修改的提交提到最前端&#xff0c; 然后修改&#xff0c;再通过git commit --amend提交该记录&#xff0c;最后通过git rebase -i 在替换会原始的位置 &#xff08;该过程中有可能会产生rebase confict&#xff09; cherry-pick …...

SQL注入读写文件

文章目录 条件利用SQL注入漏洞读取hosts文件查看文件读写权限安全选项允许导入导出读取hosts文件 利用SQL注入漏洞写入一句话木马&#xff0c;并用蚁剑连接webshell写入文件 条件 SQL注入有直接SQL注入&#xff0c;也有文件读写时的注入&#xff0c;后者的主要 目的在于获取web…...

stm32之12.如何使用printf打印输出

主函数增加这些代码即可实现printf打印输出 需要添加头文件 #include "stdio.h" --------------- 源码 struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int c, FILE *f) { /* 发送一个字节 */ …...

敏感挂载hotplug容器逃逸分析与复现

前言 分析 实验 echo /path/to/hotplug/script > /proc/sys/kernel/hotplug 直接挂载设备即可&#xff0c;虚拟机直接启动或者卸载一下声卡就行 参考 Linux uevent分析、用户接收uevent以及mdev分析 - ArnoldLu - 博客园 (cnblogs.com)...

RTThread学习有关的Keil的两个符号 $Sub$ $main 与 $Super$ $main

Keil的两个符号$Sub$ $与 $Super$ $是其做的打“补丁”功能 具体调用方法就是程序中包含有main函数&#xff0c;和 $Sub$ $main 、 $Super$ $main 两个符号 源码先放出来 /* re-define main function */ int $Sub$$main(void) {rtthread_startup();return 0; }/*** brief Thi…...

Python实现企业微信群告警

Python实现企业微信告警 1. 创建企业微信群机器人 1-1. 什么是企业微信群机器人&#xff1f; 企业微信群机器人是企业微信平台提供的一种功能&#xff0c;可以通过Webhook方式将消息发送到指定的企业微信群中。它可以用于自动化发送通知、告警等信息&#xff0c;实现监控和信…...

python基础教程:re模块用法详解

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、正则表达式的特殊字符介绍 正则表达式 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ 素材、视频教程、完整代码、插件安装教程我都准备好了&a…...

基于亚马逊云科技无服务器服务快速搭建电商平台——部署篇

受疫情影响消费者习惯发生改变&#xff0c;刺激了全球电商行业的快速发展。除了依托第三方电商平台将产品销售给消费者之外&#xff0c;企业通过品牌官网或者自有电商平台销售商品也是近几年电商领域快速发展的商业模式。独立站电商模式可以进行多方面、全渠道的互联网市场拓展…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...

Linux入门课的思维导图

耗时两周&#xff0c;终于把慕课网上的Linux的基础入门课实操、总结完了&#xff01; 第一次以Blog的形式做学习记录&#xff0c;过程很有意思&#xff0c;但也很耗时。 课程时长5h&#xff0c;涉及到很多专有名词&#xff0c;要去逐个查找&#xff0c;以前接触过的概念因为时…...

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…...

安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程

在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业&#xff0c;其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…...

Python 解释器安装全攻略(适用于 Linux / Windows / macOS)

目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…...

【Go语言基础【6】】字符串格式化说明

文章目录 零、格式化常用场景一、Go 字符串格式化核心概念二、常用格式化占位符1. 整数类型2. 浮点数类型3. 字符串与布尔类型4. 指针与通用类型 三、宽度与精度控制1. 宽度控制2. 精度控制&#xff08;浮点数/字符串&#xff09; 零、格式化常用场景 数值转字符串&#xff1a…...