Java高效率复习-数据类型和运算符[Java]

news2024/9/22 10:00:55

第一篇关于JavaSE内容的文章

文章的风格比较涣散,但是都是干货,关于Java系列的,还有就是,我认为只有MySQL基础和JavaSE基础是可以做到可操作性和可执行性较强的。
如果像JavaWeb或者SSM框架这些,光看文章你是根本执行不了的,这些不止是代码的不同,也有着配置文件和开发环境配置的不同,所以到了后面的文章时,一定要多自己学,本文章只适合偶尔看看较好,看看自己的理解和他人的理解有何不同等等。

文章前言

关于本文章的内容,是Java基础语法的学习,像一些最基本的Java声明代码或者一些很简单的API使用等等,可以说本章就是最常用的内容,可能到工作,都包含着这些知识内容,所以一定要打好基础,基础不牢、地动山摇。
Java自后的文章对应标点符号的书写比较规范,但是注释就不写很多符号了,而且注释大部分为英文符号,中文标点符号大多用在文章内容

最基本的一个Java文档结构

//本文章使用的JDK版本是Java11
//复习文章,就不去注释以下内容了
public class Demo{
	public static void main(String[]args){
		System.out.println("Hello Java.11");
	}
}

注释

注解理解

给自己标记和别人理解用的,注释最少占源码的三分之一,并且注释不会被编译,在注释里可以随意写内容,不过注释不能包含注释,JavaDoc是Java特别提供的,文章不会介绍文档注释的创建和使用。
JavaDoc和API文档也是有关系的,API文档就是官方对每个类的说明,前期先知道就行,后期根据所需前往阅读即可。

注释使用

//System.out.println("这行代码被注释了,不会编译、执行!");
//单行注释
/*
多行注释
多行注释
*/
/**
* 文档注释
* 文档注释的常用标记
* @author:指定作者
* @version:指定版本
* @deprecated:不推荐使用的方法
* @param:方法参数说明信息
* @return:方法的返回值说明信息
* @see:“参见”,用于指定交叉参考的内容
* @exception:抛出异常的类型
* @throws:抛出的异常,和@exception同意
*/

标识符和关键字

分隔符

;:分号,用于结束一段代码。
{}:花括号,用于定义代码块等,是成对出现的。
[]:方括号,一般是定义数组用的。
():圆括号,方法形参,方法调用,创建对象等等...比较常用
空格:基本上除了定义变量名和调用属性等操作都可以用到
但是要注意书写的规范,不要过于空格代码间距和代码行距
要保证代码的可读性和简洁性以及美观。
.:圆点:通常用作类/对象和它的成员之间的分隔符。

标识符规则

标识符就是用于给程序中变量、类、方法命令的符号。Java语言的标识符必须以字母、下画线(_)、美元符号($)开头,后面可以跟任意数目的字母、数字、下画线(_)和美元符号($)。此处的字母并不局限于26个英文字母,而且可以包含中文字符、日文字符等。
由于Java11支持Unicode10.0字符集,因此Java的标识符可以使用Unicode10.0所能表示的多种重语言的字符。Java语言是区分大小写的,因此abc和ABC是两个不同的标识符。
从Java9开始,不允许使用单独的下画线(_)作为标识符,也就是说,下画线必须与其他字符组合在一起才能作为标识符。
使用标识符时,需要注意如下规则:

  • 标识符可以由字母、数字、下画线(_)和美元符($)组成,其中数字不能打头。
  • 标识符不能是Java关键字或保留字,但可以包含。
  • 标识符不能包含空格。
  • 标识符只能包含美元符($),不能包含@、#等其他特殊字符。

Java的关键字

关于关键字的话,我就不去都一一列出来了,这样做的意义很小,关键字是Java官方将单词特意标记出来,用于完成一些特殊的操作等。
我们是不能使用关键字来为标识符命名的,但是可以包含关键字:String helloboolean = “字符串”;
保留字见名知意,关于是否能转换为关键字,让我们敬请期待吧!

//关键字的标识符需知
String helloboolean = "字符串";//可以包含。
int boolean;//不可以使用关键字作为标识符。
//这里小提一下关于String
//String是一个引用类型,
//而且是官方的一个类并不是关键字!

数据类型分类

变量

关于变量,Java是一个强类型的语言,也就是变量必须先定义后使用,在编译时期就确定下来变量的类型和变量名。

type name [ = 初始值];

编程的本质就是去访问内存中的数据,而程序员访问数据则需要一种机制,变量就是访问的机制。
变量是有名字的,并且标识了一片内存数据,获取数据就是从该变量所代表的内存区取值的过程,也就是说变量相当于一个有名称的容器,该容器用于装各种不同类型的数据。
变量有不同作用域的区分,因为作用域的不同,所以变量也可以不赋初始值和必须赋初始值。
定义变量至少需要变量类型和变量名。定义变量时可以是Java支持的所有类型
Java语言支持的类型分为两类:基本类型和引用类型
基本类型包含boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包含byte、short、int、log、char,浮点类型包括float和dboule,而char代表字符串,实际上字符串也是一种整数类型,相当于无符号整数类型
引用类型包括类、接口和数组类型,还有一种特殊的null类型。
因为null类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型。
空引用是null类型变量唯一的值。空引用可以转换为任何类型,null只是一个特殊的直接量。
null只能被转换为引用类型,包装类是基本类型的引用代表。

基本数据类型

Java的基本数据类型分为两大类:boolean类型和数值类型。而数值类型又可以分为整数类型和浮点类型,整数类型里的字符串类型也可被单独对待。因此常把Java里的基本类型分为4类:整数类型、字符类型、浮点类型、布尔类型
关于基本数据类型,此处不完全介绍。
整数型:byte、short、int、long;它们的范围大小依次从左往右提升
int是最常用的整数类型,一般情况下整数类型默认类型为int。除此之外,有如下两种情形必须指出:

  • 如果将一个较小的整数值(在byte或short范围内)赋给一个byte或short变量,系统会自动把这个整数类型当成byte或short类型来处理。
  • 如果使用一个巨大的整数值(超过了int的范围内)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应在这个整数值后增加l或者L作为后缀。通常推荐使用L。
    下面代码验证上述结论:
byte a = 56;//自动把56当成byte来处理
//下面代码是错的,系统不会当成long来处理
//long bigValue = 9999999999999;
long bigValue = 9999999999999L;//指定了long的后缀L(l也可以,建议使用L,因为容易和数字1混淆)

可以把一个较小的整数值(int范围内)直接赋给一个long类型的变量,这并不是因为Java会把这个较小的整数值当成long类型来处理,Java依然会把这个整数值当成int类型来处理,只是因为int类型的值会自动类型转换到long类型。
此处就不讲进制了。

字符型

字符型通常用于标识单个的字符,字符型值必须使用单引号(')括起来。Java语言使用16位的Unicode字符集作为编码方式,而该字符集支持世界上所有书面语言的字符,包括中文字符,因此Java程序设计支持各种语言的字符。
字符型值有如下三种表示形式。

  • 直接通过单个字符来指定字符型值,例如’A’、'9’和’0’等。
  • 通过转义字符表示特殊字符型值,例如’\n’、'\t’等。
  • 直接使用Unicode值来表示字符型值,格式是’\uXXX’,其中XXXX代表一个十六进制的整数。
    Java常用的转义字符:
转义字符		说明		Unicdoe表示方式
\b -> 		退格符 -> 	\u0008
\n			换行符		\u000a
\r			回车符		\u000d
\t			制表符		\u0009
\"			双引号		\u0022
\'			单引号		\u0027
\\			反斜线		\u005c

char类型的变量,值完全可以参加四则运算,也可以比较大小,实际上都是用该字符对应的编码参与运算。
如果把0~65535范围内的int整数赋值给char类型变量,系统会自动把这个int整数当成char类型来处理。
下面简单示范了字符型变量的用法。

char zhong = '风';
System.out.println(zhong);
char ch = '\u9999';
System.out.println(ch);//输出香

Java没有提供表示字符串的基本数据类型,而是通过String类来表示字符串,由于字符串由多个字符组成,因此字符串要使用双引号括起来。如下代码:

String str = "Hello";

字符串是引用类型,可以有很多API方法以及类的特性,定义为类是远优于基本类型的。
在Java程序中标识一个绝对路径:
c:\codes,但这种写法是得不到期望的结果的,因为Java会把反斜线当成转义字符,所以应该写成:
c:\codes的形式才是实际的c:\codes

浮点型

浮点型有两种:float和double。
因为Java浮点型使用二进制数据的科学计数法来表示浮点数。因此可能不能精确表示一个浮点数,而double则是比float更为精准的浮点类型,但是如果小数位足够多的话,double也可能表示不精准。
如果想要精准保存一个浮点数,则可以考虑使用BigDecimal类(数据库有一个Decimal类型),该类保存浮点型的本质是字符串保存数值,用的时候再转换为数值类型。
double类型代表双精度浮点数,float类型代表单精度浮点数。一个double类型的数值占8个字节、64位,一个float类型的数值占4个字节、32位。
Java语言的浮点数有两种表示形式。

  • 十进制数形式:这种形式就是简单的浮点数。浮点数必须包含一个小数点,否则会被当成int类型处理。
  • 科学计数法形式:例如5.12e2(即5.12×10^2),5.12E2。

Java的浮点数默认类型是double,如果想要使用float类型则可以通过添加后缀f或者F,如果想要强制表示double类型,也可以后缀添加d或者D。
Java还提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。例如,使用一个正数除以0将得到正无穷大,使用一个负数除以0将得到负无穷大,0.0除以0.0或对一个负数开方将得到一个非数。正无穷大通过Double或者Float类的POSITIVE_INFINITY标表示;负无穷大通过Double或Float类的NEGATIVE_INFINITY表示,非数通过Double或Float类的NaN表示。
NaN和任何数都不相等,包括本身。
只有浮点数除以0才可以得到正无穷大或负无穷大,因为Java语言会自动把和浮点数运算的0(整数)当成0.0(浮点数)处理。如果一个整数值除以0,则会抛出一个异常:ArithmeticException/by zero(除以0异常)。

数值中使用下画线_布尔型_var变量

当程序中用到的数值位数特别多时,可以在其中自由的使用下画线分隔,可以更直观分辨数值中包含多少为。如下程序所示。

int number = 1_2_3_4_5_6_7;//结尾就不要再添加下画线了
double pi = 3.14_15_92_65_36;//双精度浮点类型
System.out.println("pi = " + pi);
//IDEA可以通过soutv来快速输出变量
System.out.println("number = " + number);

布尔值类型,用于表示逻辑上的“真”或“假”,在Java中布尔值类型只能用true或false来赋值。

boolean b1 = true;
boolean b2 = false;

字符串"true"不会自动转换为布尔类型,但如果使用字符串和布尔型使用“+”号相加运算(此处表示的是连接符),则结果是一个字符串。
布尔类型也只能和字符串类型相加,注意相加结果永远是字符串值,几乎很多表达式和字符串相加的结果都是字符串(不能与null值计算,编译会直接报错)。
关于布尔类型的用处场景大多是流程控制或者一些数值判断,用的比较多的是循环和一些流程语句,比如IF、WHILE、FOR等等(后续文章内容),也可以在三目运算符中使用。
使用var定义变量是Java10后来引进的内容,var定义变量是很多弱类型语言都支持的定义形式,Java也是败给了潮流所驱,引入了var变量,但是要知道Java仍然保持着强类型的原则。
var只能用于定义局部变量,或许可以说是用于简化局部变量的类型。
当为var定义的变量赋值时,那么该类型就已经确定下来了,如果是int则无法再次赋值为double类型或者字符串类型。
编译器是会根据对变量的赋值进行推断类型,一旦推断了一次,就不再允许下次赋值是不同类型或者超越了类型范围的值。

var a = 20;
//因为默认会推断是int类型,所以需要类型转换
var byteA = (byte)13;
var b = '字';//只能定义一个字
var c = "字符串";
//a = 2.2; 不兼容
//var d;无法判断类型,必须赋值
var demo = new Demo();//这才是var变量的最大意义
//MyBatis的sqlSession定义
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryBuilder.build(path);
var sqlSessionFactory = SqlSessionFactoryBuilder.build(path);
//可以看到有些类型是显然知道是什么类型的,就没有必要打全

var变量是一把双刃剑,虽然确实简化了很多,但是也会导致可读性变差,在没有较好的基础时,全是var类型定义的类会导致自己完全蒙圈,所以建议在像for循环的初始化值或者一些固定类写法中去使用var变量,这也是最有价值的地方了。

基本类型的类型转换

在Java程序中,不同的基本类型的值经常需要进行相互转换。Java语言所提供的7种数值类型之间可以互相转换,有两种类型转换方式:自动类型转换和强制类型转换

自动类型转换

Java所有的数值型变量可以相互转换。如果系统支持把某种基本的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换;否则就需要强制转换。
就像小瓶水导入大瓶水里,是没有问题的。
自动类型转换顺序,从大到小如下:

doublefloatlongintshortbytechar//和short同级的都是向int自动转换	

下面程序示范了自动类型转换。

int a = 6;
//int类型可以自动转换为float类型
float f = a;
//下面将输出6.0
System.out.println(f);
//定义一个byte类型的整数变量
byte b = 9;
//下面代码将出错,byte的上级只能是short不能是char
//char c = b;
//byte变量可以自动类型转换位double类型
double d = b;
//下面将输出9
System.out.println(d);

所有的数值类型都可以和字符串值进行连接运算,基本类型的值将自动类型转换为字符串类型,虽然字符串类型不是基本类型,而是引用类型。因此,如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和一个空字符串进行连接。
+不仅可作为加法运算符使用,还可作为字符串连接运算符使用

String a = "at" + "it";
String b = "Hello,"+
        "Java";//必须有连接符号才可以实现值跨行,标识符是不可以这么书写的
System.out.println("Hello"+3+4);
System.out.println(3+4+"Hello");
System.out.println("Hello"+(3+4));//通过圆括号来增加运算优先级达到非纯拼接值 

强制类型转换

如果希望将上面的自动类型转换箭头向下走,则必须进行强制类型转换,强制类型转换的语法格式是(targetType)value,强制类型转换的运算符是圆括号()。当进行强制类型转换时,类似于将大瓶子里的水倒入小瓶子里,如果大瓶子的水可以装下还好,如果不能装下将会引起溢出,从而造成数据丢失。这种转换也被称为“缩小转换”。
下面程序示范了强制类型转换。

var iValue = 233;
//强制把一个int类型的值转换为byte类型的值
byte bValue = (byte)iValue;
System.out.println(bValue);//将输出-23
//强制把一个double类型的值转换为int
var dValue = 3.98;
int tol = (int) dValue;
System.out.println(tol);//输出3

下面程序示范了如何生成一个6位的随机字符串,这个程序用到了循环控制。
在这里插入图片描述
在这里插入图片描述

public class Demo {
    public static void main(String[] args) {
        //定义一个空字符串
        var result = "";
        //进行6次循环
        for(var i = 0;i<6;i++){//执行6次,因为0的时候也会执行一次
            //生成一个97~122之间的int类型整数
            var intVal = (int)(Math.random()*26+97);//+97起始值 *26是向后做26个数
            //将intValue强制转换为char类型后连接到result后面
            result = result + (char) intVal;
        }
        System.out.println(result);
    }
}

过多详细此处不再赘述了。
float和String类型的转换有些微妙,float是不能直接赋值,String是不能直接强制类型转换。

//直接把数赋给float类型会报错,因为默认是double类型
//想将1.2赋值给float a 则必须强制类型转换为float
//float a = 1.2;
float a = (float)1.2;
//字符串不可以直接强制类型转换为数值类型,可以通过其对应包装类的方法进行类型转换
int strPareIntA = Integer.parseInt("15");//也可以是变量存储的15,此处是个直接量
System.out.println(strPareIntA);

表达式类型的自动提升

当一个算术表达式中包含多个基本乐西的值时,整个算术表达式的数据类型将发生自动提升。Java定义了如下的自动提升规则。

  • 所有的byte类型、short类型和char类型将被提升到int类型。
  • 整个算术表达式的数据类型自动提升到与表达式中最高登记操作数同样的类型。操作数的等级仍然是参考自动类型转换顺序

下面程序将会演示典型的错误。

//定义一个short类型变量
short sValue = 5;
//表达式中的sValue将自动提升到int类型,则右边的表达式类型为int
//将一个int类型赋值给short类型变量将发生错误
//sValue = sValue -2;
// sValue = (short) ((short) sValue -2);能解决但是麻烦

下面程序演示正确的表达式类型自动提升。

byte b = 40;
var c = 'a';
var i = 23;
var d = .314;
//右边表达式最高等级操作数为d(double类型)
//则右边表达式的类型为double类型,故赋给一个double类型变量
double reuslt = b+c+i*d;
System.out.println("reuslt = " + reuslt);

直接量

直接量是值在程序中通过源代码直接给出的值,int a = 5,那么5就是一个直接量。

直接量的类型

并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型和null类型。基本类型和null类型是可以指定不同进制的形式的,float在后面加上F就是float的直接量,long在后面加上L就是long的直接量(因为没有默认赋值为double和int)。
boolean直接量只有true和false,String就是一对双引号引起来的内容,null类型的直接量就是null。

下面程序示范了直接量。

var a =5;
var c = 'a';
var b = true;
var f = 5.12f;
var d= 4.12;
var author = "李刚";
var book = "疯狂Java讲义";

Java允许数值之间的自动类型转换,因此允许把一个数值直接量赋给另一种类型的变量,这种赋值必须是系统所支持的自动类型转换。
String的直接量不能直接赋值给其他类型的变量,null类型的直接量可以直接赋给任何引用类型的变量,包括String类型。boolean类型的直接量只能赋给boolean类型的变量。
关于字符串的直接量,如果程序第一次使用某个字符串的直接量时,Java会使用常量池来缓存该字符串直接量,如果程序后面部分需要用到该字符串直接量时,Java会直接使用常量池中的字符串直接量。

var s0 = "hello";
var s1 = "hello";
var s2 = "he" + "llo";
System.out.println(s0 == s1);
System.out.println(s0 == s2);

上面的结果都是真(true),也证实了常量池这一点。

运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。Java语言使用运算符将一个或多个操作数连缀成执行性语句,用以实现特定功能。

Java语言中的运算符可分为如下几种。

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符(本文章略)
  • 类型相关运算符

位运算符前期不学。

算术运算符

就是普通的四则运算、取模(%)、自加(++)和自减(–)。
这里有前++和后++的区别,一般都是用于循环迭代语句的退出等操作。

int a = 5
a++;//执行完后再自增1
++a;//执行前就会自增1
//--同上规则

自加和自减只能用于操作变量,不能用于操作数值直接量、常量或表达式。例如,5++、6–等写法都是错误的。
如果想要完成其他复杂的数学运算,则可以通过java.lang.Math类的工具方法来完成复杂的数学运算。
+号除了作为数学的加法运算符之外,还可以作为字符串的连接运算符;-号除了作为数学的减法运算符之外,还可以作为求负的运算符。

double x = -5.0;
x = -x;//变成了5.0

赋值运算符

赋值运算符用于为变量指定变量值,用=作为赋值运算符

var str = "Java";
var pi = 3.14;
var visited = true;

按前面关于变量的介绍,可以把变量当成一个可盛装数据的容器。而赋值运算符就是将被赋的值“装入”变量的过程,。赋值运算符是从右向左执行计算的,程序先计算得到=右边的值,然后再将该值“装入”=左边的变量,因此赋值运算符(=)左边只能是变量。
赋值表达式是有值的,赋值表达式的值就是右边被赋的值。赋值运算符支持连续赋值。
赋值运算符是有扩展的,例如,+=、-=、*=等等,其实就是变量本身的数去+了一个数或者减了一个数等等,此处不再把扩展赋值运算符单独列出来了。

int a;
int b;
int c;
a = b = c = 8;
System.out.println(a+","+b+","+c);

比较运算符

比较运算符用于判断两个变量或常量的大小,比较运算符的结果是一个布尔值(true或false)。Java支持的比较运算符如下。

>:大于,如果左边的变量值大于右边变量值则返回true>=:大于等于,如果左边的变量值大于右边或者等于右边的值
则返回true<:小于,如果左边的变量值小于右边变量值则返回true<=:小于等于,如果左边的变量值小于右边或者等于右边的值
则返回true==:等于,如果都是数值类型,即使它们的类型不同,但是只要数值相同就返回true
如果两个操作数都是引用类型,那么只有当两个引用变量的类型
具有父子关系时才可以比较
而且这两个引用必须指向同一个对象才会返回trueJava也支持两个boolean类型进行比较,例如,true==false将返回false

逻辑运算符

逻辑运算符作用域操作两个布尔型的变量或常量。逻辑运算符主要有如下6个。

  • &&:与,前后两个操作数必须都是true才返回true,否则返回false。
  • &:不短路与,作用与&&相同,但不会短路。
  • ||:或,只要两个操作数中有一个是true,就可以返回true,否则返回false。
  • |:不短路或,作用与||相同,但不会短路。
  • !:非,只需要一个操作数,如果操作数为true,则返回false;如果为false则返回true,其实就是取反。
  • ^:异或:当两个操作数不同时才返回true,如果两个操作数相同则返回false。

这不短路的两个符号其实存在意义就是,如果你的判断条件里,第一个表达式的后面是有类似自增或自减的操作,如果短路,则根本不会判断到不符合条件的后面的条件,也就无法完成本次逻辑符表达式中的赋值操作。
一般其实用不到,然后异或用的也挺少的。一般都是用&&和||,最多的是!,也就是取反,比如 a != b,意思就是a变量的值不等于b,如果不等于就返回true,等于就是false,这种一般都是用于流程控制的逻辑运算符。

三目运算符

这个运算符就是一个表达式形式的if语句
语法格式如下:

(expression) ? if-true-statment : if-false-statement;

三目运算符的规则是:先对逻辑表达式expression求职,如果逻辑表达式返回true,则返回第二个操作数的值,如果逻辑表达式返回false,则返回第三个操作数的值。
如下程序示范了三目运算符。

//(表达式) ? (true)第二个操作数的值 : (false)第三个操作数的值
String str = 5 > 3 ? "5大于3" : "5不大于3";
System.out.println("str = " + str);

运算符的优先级

在这里插入图片描述
上面的优先等级从上到下,越往上的优先等级越高。

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

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

相关文章

tensorflow的GPU加速计算

参考 tensorflow的GPU加速计算 - 云社区 - 腾讯云 一、概述 tensorflow程序可以通过tf.device函数来指定运行每一个操作的设备&#xff0c;这个设备可以是本地的CPU或者GPU&#xff0c;也可以是某一台远程的服务器。tensorflow会给每一个可用的设备一个名称&#xff0c;tf.…

PaO2/FiO2在临床中的应用 氧合指数

主任提问:患者呼吸衰竭时的“氧合指数”大约多少?如何计算?_腾讯新闻 (qq.com) 在 ARDS 柏林定义中,诊断低氧血症需要 PaO2/FiO2≤ 300 mmHg,并可以分为轻中重三个等级(下表)。 ARDS 患者的 PaO2/FiO2越低,死亡率越高,其中重度 ARDS 死亡率高达 45%。需要注意这里 …

生产报工管理系统可以帮助企业解决哪些问题?

随着时代的变迁和信息化技术的发展&#xff0c;市场对制造企业在产品价格、质量以及生产成本等方面提出了更高的要求&#xff0c;车间生产也逐渐向着实时化、透明化和可视化方向发展。其中产报工与跟踪是生产管理中重要的环节&#xff0c;自然是不可缺少信息化的。 企业在报工…

Linux基本命令

目录操作 格式&#xff1a;指令 -[参数] [目录] 1. pwd (Print Working Direcotry) 查看当前工作路径 2. cd (Change Direcotry) 改变 shell 工作目录 3. ls (List Files) 列出当前目录下的文件和目录 ls -[参数] [目录] ls的参数均是短命令&#xff0c;可以使用-后添…

经过物联网技术的设备改造有“大脑”,更智能

物联网是通讯网与互联网的拓展应用和网络延伸&#xff0c;通过网络传输互联&#xff0c;进行计算、处理和知识挖掘&#xff0c;实现人与物、物与物的信息交互和无缝链接&#xff0c;达到对物理世界的实时控制、精确管理和科学决策是目的。而物联网设备是一种非标准计算设备&…

【微信小程序】使用npm并引入vant-weapp组件库

0 前言 vant文档与微信小程序文档写得弯弯绕绕&#xff0c;你引用我&#xff0c;我引用你&#xff0c;还给出了多种不同情况下的选项&#xff0c;甚至有步骤缺失&#xff0c;导致踩了一点小坑&#xff0c;浪费了一些没必要的时间&#xff0c;这里给出完整可行的实现方法&#…

Android Studio详细的安装下载教程

一、下载Android Studio 1、进入官网在这个位置&#xff0c;点击左下角下载Android Studio 官网&#xff1a;www.Android.com 中国大陆版网站&#xff1a;&#xff1a;https://developer.android.google.cn/ 2、Android Studio会自带自动下载Android SDK&#xff0c;如果有版本…

SIM8100、SIM8800CE、SIM8800E 车规级模组 特性

1、SIM8100 是一个C-V2X模块&#xff0c;通过PC5接口支持C-V2X功能&#xff0c;实现车对车(V2V)、车对人(V2P)、车对基础设施(V2I)等应用。 SIM8100具有强大的扩展能力和丰富的接口&#xff0c;包括USB, UART, SDIO,I2C,I2S,SPI, GPIO等。 该模块为客户的应用程序提供了很大的灵…

Vue--》动态组件和插槽的使用讲解

目录 动态组件 keep-alive使用 keep-alive的include和exclude属性 插槽 动态组件 动态组件指的是动态切换组件的显示与隐藏&#xff0c;vue提供了一个内置的<component>组件&#xff0c;专门用来实现动态组件的渲染。什么意思呢&#xff1f;接着往下看&#xff1a; …

类和对象之 封装 继承 与 多态

1.进行类继承的前提是我们要有两个类&#xff0c;且已经确定好了这两个类谁为父类谁为子类 2.先创建父类然后再创建子类 3.创建子类的时候我们要使用继承语法&#xff0c;使用的方式是在创建子类时的第一条代码的最后面加上冒号 : 和父类的类名 4.继承的本质就是将父类中的…

[附源码]Python计算机毕业设计Django药品仓库及预警管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【Vue基本功】权限路由(1)

1 初始化项目 1.1 安装 yarn create vite … yarn 依赖&#xff1a; yarn add axios yarn add vuexnext vue-router4 -D yarn add typesvue-router -D vuex有ts支持&#xff0c;所以不需要安装类型文件 1.2 配置 1.2.1 别名 引入path时&#xff0c;发现有警告&#x…

Spring MVC 高级框架的核心

目录 1. 什么是 Spring MVC 1.1 如何理解 MVC 1.2 Spring MVC 和 MVC 的关系 2. 如何学习 Spring MVC 2.1 将浏览器和服务器连接起来 2.1.1 RequestMapping, GetMapping, PostMapping 三个注解的区别 2.2 在程序中获取前端传递过来的参数 2.2.1 传递单个参数 2.2.2 传…

CSS 实现音频loding动画

前言 &#x1f44f;实现一个音频loading动画还蛮有趣的&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义css变量&#xff1a;父容器高度为–h&#xff0c;可以动态设置loading的高度 :root {--h: 80px;}父…

遗传算法在机器人路径规划中的应用研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 机器人运动规划是移动机器人导航的核心技术之一。40多年来,运动规划技术发展迅速,涌现出了许多规划算法,但因为环境描述方式差异…

JavaScript -- 数组及对象解构赋值方法总结

文章目录1 数组解构赋值1.1 保留默认值1.2 接受剩余的所有参数1.3 对函数执行结果解构1.4 交换两个变量的值1.5 二维数组结构2 对象的解构2.1 声明对象同时解构对象2.2 先声明再解构2.3 解构不存在的属性2.4 设置解构别名2.5 设置解构默认值1 数组解构赋值 案例&#xff1a;将…

红队隧道应用篇之Netsh端口转发

简介 netsh是从Windows 2000开始就有的一个用于配置网络设备的命令行工具 其中netsh interface portproxy是一个配置网络代理的命令, 可以配置ipv4或ipv6的端口转发代理以及双向端口转发代理 学习隧道应用前必须了解的知识:https://blog.csdn.net/xf555er/article/details/1…

LeetCode刷题复盘笔记—一文搞懂完全背包之279. 完全平方数问题(动态规划系列第十五篇)

今日主要总结一下动态规划完全背包的一道题目&#xff0c;279. 完全平方数 题目&#xff1a;279. 完全平方数 Leetcode题目地址 题目描述&#xff1a; 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整…

技术开发93

技术开发93 业务内容&#xff1a; . 马达零部件 . 汽车零部件 . 音响用零部件 . 农用机零部件 . 建筑模具 公司简介&#xff1a; 资本金&#xff1a;2000万日元&#xff08;约120万元人民币&#xff09; 员工数&#xff1a;17名 成立时间&#xff1a;1923年4月 资格认…

Linux文件及目录管理操作

Linux文件及目录管理实验目的及要求1.了解Linux文件与目录的访问权限2.熟悉Linux文件与目录的打包和压缩3.掌握Linux文件与目录的相关管理操作实验原理实验步骤对文件管理和压缩归档进行了解&#xff0c;具体步骤如下&#xff1a;1.用mkdir命令在"/root"目录下创建一…