【Java基础教程】(四)程序概念篇 · 中:探索Java编程基础,解析各类运算符功能、用法及其应用场景~

news2024/11/27 8:25:18

Java基础教程之程序概念 · 中

  • 本节学习目标
  • 1️⃣ 运算符
    • 1.1 关系运算符
    • 1.2 算术运算符
    • 1.3 三目运算符
    • 1.4 逻辑运算
      • 1.4.1 与操作
      • 1.4.2 或操作
      • 1.4.3 非操作
    • 1.5 位运算
      • 🔍位运算规则
      • 1.5.1 位与运算
      • 1.5.2 位或运算
  • 🌾 总结

在这里插入图片描述

本节学习目标

  • 掌握Java中各类运算符及其运算使用;

1️⃣ 运算符

Java中的语句有很多种形式,表达式就是其中一种形式。Java中的表达式由操作数、运算符、结果类型和求值顺序等元素组成,这些元素共同构成了复杂的逻辑和计算过程。

  • 操作数(Operands):操作数是表达式中的值或者变量,它们可以是字面值、变量、常量或函数调用的返回值。例如,5xtrue等都是操作数;
  • 运算符(Operators):运算符是用于组合和操作操作数的符号。Java中有多种类型的运算符,包括算术运算符(如加法 +、减法 -、乘法 * 等)、关系运算符(如等于 ==、不等于 !=、大于 > 等)、逻辑运算符(如与 &&、或 ||、非 ! 等)、赋值运算符(如赋值 =、复合赋值 += 等)等;
  • 表达式的结果类型:表达式的结果类型可以是任意有效的Java数据类型,包括基本数据类型(如整数、浮点数、布尔值等)和引用数据类型(如对象、数组等)。表达式的结果类型取决于所使用的运算符和操作数的类型;
  • 表达式的求值顺序:Java中的表达式通常按照特定的优先级和结合性规则进行求值。例如,多个操作符同时出现时,按照算术运算符优先级的顺序进行求值。

以下面的表达式(z+100)为例,“z”与“100”都是操作数,而“+”就是运算符:

在这里插入图片描述

Java提供了许多运算符,这些运算符除了可以处理一般的数学运算外,还可以做逻辑运算、地址运算等。

根据不同的类型,运算符可分为赋值运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、括号运算符等,将这些常见的运算符及其基本的操作范例信息汇总如下表:

运算符类型示例结果描述
=赋值运算符int x=10;x=10为变量x赋值为数字常量10
?:三目运算符int x=10>5?10:5x=10将两个数字中较大的值赋予x
+算术运算符int x=20+10;x=30加法计算
-算术运算符int x=20-10;x=10减法计算
*算术运算符int x=20*10;x=200乘法计算
/算术运算符int x=20/10;x=2除法计算
%算术运算符int x=10%3;x=1取模(取余)计算
>关系运算符boolean x=20>10;x=true大于
<关系运算符boolean x=20<10;x=false小于
>=关系运算符boolean x=20>=20;x=true大于等于
<=关系运算符boolean x=20<=20;x=true小于等于
==关系运算符booleanx=20==20;x=true等于
!=关系运算符booleanx=20!=20;x=false不等于
++自增运算符int x=10;int y=x++*2;x=11 y=20“++”放在变量x之后,表示先使用x计算,之后x的内容再自增
int x=10;int y=++x*2;x=11 y=22“++”放在变量x之前,表示先将x的内容自增,再进行计算
自减运算符int x=10;int y=x–*2;x=9 y=20“–”放在变量x之后,先使用x计算,之后x的内容再自减
int x=10;int y=–x*2;x=9 y=18“–”放在变量x之前,表示先将x的内容自减,再进行计算
&逻辑运算符boolean x=false & true;x=falseAND,与,全为true时结果才为true
&&逻辑运算符boolean x=false&& true;x=false短路与,全为true结果为true
|逻辑运算符boolean x=false | true;x=trueOR,或,有一个为true结果为true
||逻辑运算符boolean x=false|| true;x=true短路或,有一个为true结果为true
!逻辑运算符boolean x=!false;x=trueNOT,否,true变false,false变true
()括号运算符int x=10*(1+2);x=30使用()改变运算的优先级
&位运算符int x=19&20;x=16按位与
|位运算符int x=19|20;x=23按位或
^位运算符int x=19^20;x=7异或(相同为0,不同为1)
~位运算符int x=~19;x=-20取反
<<位运算符int x=19<<2;x=76左移位
>>位运算符int x=19>>2;x=4右移位
>>>位运算符int x=19>>>2;x=4无符号右移位
+=复合赋值运算符a+=b-a+b的值存放到a中(a=a+b)
-=复合赋值运算符a-=b-a-b的值存放到a中(a=a-b)
*=复合赋值运算符a*=b-ab的值存放到a中(a=ab)
/=复合赋值运算符a/=b-a/b的值存放到a中(a=a/b)
%=复合赋值运算符a%=b-a%b的值存放到a中(a=a%b)

需要注意的是,在Java中不同的运算符具有不同的优先级。当一个表达式中存在多个运算符时,优先级较高的运算符会先于优先级较低的运算符进行计算。将各运算符的优先级信息汇总如下表:

优先级运算符类型结合顺序
1()括号运算符由左至右
1[]方括号运算符由左至右
2!(非)、+(正号)、-(负号)一元运算符由右至左
2~(取反)位运算符由右至左
2++、–自增、自减运算符由右至左
3*、/、%算术运算符由左至右
4+、-算术运算符由左至右
5<<、>>位左移、位右移运算符由左至右
6>、>=、<、<=关系运算符由左至右
7==、!=关系运算符由左至右
8&(AND,与)位运算符由左至右
9^(XOR,异或)位运算符由左至右
10|(OR,或)位运算符由左至右
11&&逻辑运算符由左至右
12||逻辑运算符由左至右
13?:三目运算符由右至左
14=、+=、-=、*=…赋值运算符由右至左

如果表达式中含有相同优先级的运算符,则会按照表格所示结合性规则(从左到右或从右到左)进行求值。此外,使用括号可以改变运算符的默认优先级,确保表达式按照所需顺序进行计算。

而从实际运用来讲,这些运算符的优先级没有必要专门去记,熟能生巧,也建议读者在必要时可以使用“()”去改变优先级。

需要注意在实际运用时,不要写太过复杂的运算操作。比如以下类似的代码:

//	案例1:不建议的代码
public class TestDemo{
	public static void main(String args[]){
		int numA=10;
		int numB=20;
		int result=numA*2numB*numA+++numBnumA+numB;
		System.out.println(result);
	}
}

程序执行结果:

-143

虽然以上程序可以得到最终的计算结果,但是如此复杂的运算代码,代码的可读性和可维护性就变得太差了,可能其他的同事或领导看到都想叼人了,所以在编写程序的时候,应该本着编写“简单代码”的原则,而像本程序这样的代码尽量不要去编写。

1.1 关系运算符

关系运算符的主要功能是进行数据的大小关系比较,返回的结果是boolean型数据(只有truefalse两种取值),常用的关系运算符有:大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)。

//	案例2:使用关系运算符
public class TestDemo{
	public static void main(String args[]){
		System.out.println("3>1=" + (3>1));		//使用大于号
		System.out.println("3<1=" + (3<1));		//使用小于号
		System.out.println("3>=1=" + (3>=1));	//使用大于等于号
		System.out.println("3<=1=" + (3<=1));	//使用小于等于号
		System.out.println("3==1=" + (3==1));	//使用等于号
		System.out.println("3!=1="+(3!=1));		//使用不等于号
	}
}

程序执行结果:

3>1=true
3<1=false
3>=1=true
3<=1=false
3==1=false
3!=1=true

此程序演示了各种关系运算符的使用,考虑到运算符的优先级问题,使用了“()”运算符先进行关系运算,避免字符串直接拼接出现错误的结果。而对于关系运算符的使用往往是结合后续的分支、循环等程序逻辑控制语句一同进行使用。

1.2 算术运算符

算术运算符在开发中经常使用到,例如,进行四则运算、求模(取余)、自增等操作

//	案例3:使用四则运算
public class TestDemo{
	public static void main(String args[]){
		int numA=10;
		int numB=20;
		System.out.println("加法计算:"+(numA+numB));
		System.out.println("减法计算:"+(numA-numB));
		System.out.println("乘法计算:"+(numA*numB));
		System.out.println("除法计算:"+(numA/(double)numB));
	}
}

程序执行结果:

加法计算:30
减法计算:-10
乘法计算:200
除法计算:0.5

四则运算符的基本操作就是“+”、“-”、“*”、“/”,在程序中进行除法计算时,考虑到计算的精度问题,所以将其中一个int型变量强制转换为了double型变量。而“”也是在开发之中较为常见的计算,所谓的“”实际上就是余数的概念,例如:10÷3的结果是商3余1,其中余数1就是“”,对于求模,可以使用“%”运算符。

//	案例4:使用求模计算
public class TestDemo{
	public static void main(String args[]){
		int numA=10;
		int numB=3;
		System.out.println(numA % numB);
	}
}

程序执行结果:

1

本程序分别定义了两个int型变量,随后使用“%”进行了求模计算,最终的结果就是1

虽然Java提供了四则运算操作,但是为了简化用户的编写,在运算符里面又提供了一些简化的复合赋值运算符:*=/=+=-=%=,这些运算符表示参与运算后直接进行赋值操作,下面来看一个具体的代码。

//	案例5:使用复合赋值运算符
public class TestDemo{
	public static void main(String args[]){
		int num=10;
		num*=2;//等价:num=num*2;
		System.out.println(num);
	}
}

程序执行结果:

20

此程序使用了“num*=2”语句替代了“num=num*2”的语句,相比较后者,代码的长度更加简短。

而还有一类运算符是“++”(自增)、“--”(自减),它根据位置不同,执行的顺序也不同。

  • 前置用法:++变量、--变量:先在前面表示的是先进行变量内容的自增1或自减1,再使用变量进行数学计算;
  • 后置用法:变量++、变量--:先使用变量内容进行计算,而后再实现自增或自减的操作。
//	案例6:使用前置自增
public class TestDemo{
	public static void main(String args[]){
		int numA=10;	//定义整型变量
		int	numB=20;
		//“++”写在变量前面,表示先对numA的变量内容加1
		//而后使用处理后的numA变量的内容+numB变量的内容
		int result=++numA+numB;
		System.out.println("numA=" + numA);
		System.out.println("result="+result);
	}
}

程序执行结果:

numA=11
result=31

本程序中 “int result=++numA+numB;”,语句使用了“++numA”,表示在与numB进行加法计算时,首先先对numA的变量内容进行自增1的操作,即执行完“++numA”之后,numA的内容首先变为11,然后利用11这个值与numB变量的20进行计算,最终的结果就是31

//	案例7:使用后置自增
public class TestDemo{
	public static void main(String args[]){
		int numA=10;	//定义整型变量
		int	numB=20;
		//“++”写在后面,表示先使用numA的内容进行加法计算
		//而加法计算完成之后再对numA的内容进行自增
		int result = numA+++numB;
		System.out.println("numA=" + numA);
		System.out.println("result=" + result);
	}
}

程序执行结果:

numA=11
result=30

此程序与前一程序的区别在于“++”出现的位置,在计算中由于“++”在numA的后面(numA+++numB),所以表示先使用numA当前的内容与numB进行加法计算,再进行自己的自增1操作,所以最终的计算结果为30

1.3 三目运算符

三目是一种赋值运算的形式,执行三目时可以以一个布尔表达式的结果进行赋值,基本的语法结构如下。

数据类型变量 = 布尔表达式 ? 满足此表达式时设置的内容:不满足此表达式时设置的内容;
//	案例8:使用三目运算符实现赋值
public class TestDemo(
	public static void main(String args[){
		int numA=10;  // 定义int型变量
		int numB=20;
		//如果numA 大于numB, 返回 true,则将numA 的内容赋值给max
		//如果numA 小于numB, 返回 false,则将numB 的内容赋值给max
		int max= numA>numB ? numA:numB;
		System.outprintln(max);
	}
}

程序执行结果:

20

此程序主要是判断 numAnumB 哪个变量的内容较大 (numA > numB), 如果此时的判断条件成立,则表示使用 numA 的变量内容为 max 变量赋值,反之,则使用 numB 的变量内容为max 变量赋值。

对于上面案例的操作,实际上也可以不使用三目运算符完成,可以通过编写如下形式的判断体语句完成:

//	案例9:利用判断语句实现三目运算的功能
public class TestDemo{
	public static void main(String args[]){
		int numA=10;
		int numB=20;
		int max=0;
		//用if语句替代:int
		if(numA>numB){ // 如果numA 的内容大于numB,max 变量的内容为numA 的内容
			max=numA;
		}else{		//如果numA 的内容小于numB,max 变量的内容为numB 的内容
			max=numB;
		}
		System.out.println(max);
	}
}

程序执行结果:

20

此程序使用一个分支语句的形式替代了三目运算符的使用,但可以发现的是使用三目运算的赋值操作要明显比 if….else分支语句的判断赋值代码更简单。

1.4 逻辑运算

逻辑运算一共包含3种:与(多个条件一起满足)、或(多个条件有一个满 足)、非(使用“!”操作,可以实现 true 变 false 以及 false 变 true 的结果转换), 而与和或操作的真值表,如下表所示:

条件1条件2&、&&(与)结果|、||(或)结果
truetruetruetrue
truefalsefalsetrue
falsetruefalsetrue
falsefalsefalsefalse

1.4.1 与操作

与操作表示将若干个条件一起进行连接判断,同时满足返回 true,有一个不满足返回 false,对于与 操作有两种运算符:&(普通与)、&&(短路与)。

//	案例10:使用普通与“&”
public class TestDemo {
	public static void main(String args[]){
		if ((1!=2)&(10%2==0){     // 使用普通与判断多个条件
			System.out.printIn("Hello World!");
		}
	}
}

程序执行结果:

Hello World!

程序逻辑:
在这里插入图片描述

此程序最后输出了字符串,说明&的表达式中的结果值都为true,而现在有一种情况是,如果前面的条件已经返回了 false,后面不管有多少个 true, 按照与操作的 定义,最终的结果还是false,那么完全没有必要进行后续的判断,所以可以使用短路与进行操作:

//	案例11:使用短路与(&&)
public class TestDemo {
	public static void main(String args[]){
		if  ((1 ==2)&&(10/0==0)){
			System.out.printin("Hello World!");
		}
	}
}

程序执行结果: 正常结束。
程序逻辑:
在这里插入图片描述

注意此程序不会因为(10/0==0)而报错,因为前面的条件返回了false(“1== 2”的结果为false),所以后面的所有判断都没有继续执行到,所以最终的结果只会是false, 而如果此时使用的是&而非&&则会导致报错,此处不再做更多演示。

1.4.2 或操作

或操作是若干个条件一起判断,其中只要有一个返回 true, 结果就是 true, 只有都返回 false 的时候结果才是 false, 或操作有两种运算: |||

//	案例12:使用普通或操作(|)
public class TestDemo(
	public static void main(String args[])(
		if((1==1)|(10/0==0)){
			System.out.println("Hello World !");
		}
	}
}

程序运行结果:

Exception  in  thread"main"java.lang.ArithmeticException:/  by  zero at TestDemo.main(TestDemo.java:3)

此程序中使用普通或“|”操作,但在程序运行的时候出现了异常,即程序中给出的两个判断条件都执行了:

在这里插入图片描述

通过程序发现,使用普通或操作的过程中,即使前面的条件满足了,后面的也会进行正常的判断,而或运算中,只要有一个为 true, 那么最终的结果就一定是 true, 所以对于后面的判断似乎没有任何意义,因为不管返回是何种结果都不会影响最终的结果—true, 下面使用短路或(||) 来调整程序。

//	案例13:使用短路或操作(||)
public class TestDemo(
	public static void main(String args[]){
		if((1==1)||(10/0==0)){	
			System.out printIn("Hello World!");
		}
	}
}

程序执行结果:正常结束。

可以发现,前面的条件(1== 1)满足了就会返回 true, 不管后面是何条件最终的结果都是true, 所以后面的表达式不再执行,程序也没有任何异常产生。程序逻辑如下:
在这里插入图片描述

需要注意的是,在实际生产应用编写代码的过程中考虑到性能问题,都会优先考虑短路与和短路或操作。

1.4.3 非操作

非就是针对布尔结果进行求反。

//	案例14:使用非操作(!)
public class TestDemo {
	public static void main(String args[]){
		boolean flag = true;                          //定义布尔型变量
		System.out.println(!flag);                  //对变量结果进行非操作
	}
}

程序执行结果:

false

非操作的主要功能是进行布尔结果的转换,由于程序中定义的 flag 变量的内容为 true, 所以经过 非处理之后其结果变为 false

1.5 位运算

位运算在Java 中有:&|^>><<>>>, 而所有的位运算都是采用 二进制数据进行操作的。

Java 定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和 byte。
位运算符主要用来对操作数二进制的位进行运算,按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。

Java 语言中的位运算符分为位逻辑运算符和位移运算符两类:
(1)位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)
(2)位移运算符包含3个:<< 位左移、>> 位右移、>>> 无符号右移

🔍位运算规则

Java 定义的位运算直接对整数类型的位进行操作,运算时会先将十进制数据变为二进制数据。而十进制和二进制之间的数据转换规则如下:

十进制数据变为二进制数据的原则为:数据除2取余,随后倒着排列。例如:25 的二进值为11001,但是由于Java的int型数据为32位,所以实际上最终的数据 为:“0000000000000000000000000011001”。转变过程如下图:

在这里插入图片描述


然后再将二进制原码转成二进制补码,之后再正式进行运算。其中需要注意的点有:

  • 正数的原码,反码和补码都一样;
  • 负数的反码:符号位保持不变,其他位取反;
  • 负数的补码:反码 + 1;
  • 最高位为符号位,0表示正数,1表示负数;
  • 0的反码和补码都是0。

1.5.1 位与运算

//	案例15:使用位与操作
public class TestDemo{
	public static void main(String args[]){
		int numA= 9;                                           //定义整型变量
		int numB=11;                                         //定义整型变量
		System.out.println(numA & numB);//位与操作
	}
}

程序执行结果:

9

计算过程分析:
9的二进制: 00000000000000000000000000001001
11的二进制:00000000000000000000000000001011
&”结果: 00000000000000000000000000001001 转换为十进制是: 9

1.5.2 位或运算

//	案例16:使用位或操作
public class TestDemo {
	public static void main(String args[]){
		int numA =9;                                           //定义整型变量
		int numB=11;                                         //定义整型变量
		System.out.println(numA  |  numB);    // 位或操作
	}
}

程序执行结果:

11

计算过程分析:
9的二进制:00000000000000000000000000001001
11的二进制: 00000000000000000000000000001011
|”结果: 00000000000000000000000000001011 转换为十进制是: 11


🌾 总结

本文介绍了Java中常见的各类运算符,包括一元运算符、算术运算符、移位运算符、关系运算符、相等运算符、位运算符、逻辑运算符、条件运算符和赋值运算符等等。每种运算符都有其特定的运算方式和特征,可以应用于不同的场景。

运算符类型作用应用场景
一元运算符用于对单个操作数进行操作,例如逻辑非、求反以及自增和自减等在控制流语句和逻辑判断中非常有用
算术运算符支持基本的数学运算,如加法、减法、乘法和除法等用于处理数字计算和相关算术问题
移位运算符可对二进制数据进行位级操作,包括左移、带符号右移和无符号右移用于编码、解码和处理位模式数据
关系运算符用于比较两个操作数的大小关系,例如小于、大于、小于等于和大于等于用于判断条件和排序问题
相等运算符用于判断两个操作数是否相等或不相等在条件判断和对象比较等方面非常有用
位运算符用于对整数类型的二进制数据进行位级操作,包括位与、位或和位异或等在处理位标志、掩码和位操作等方面非常常见
逻辑运算符用于对布尔值进行逻辑运算,包括逻辑与、逻辑或和逻辑非等用于条件判断和逻辑表达式求值
条件运算符是Java中唯一的三元运算符用于根据条件的结果选择执行不同的操作经常用于编写替换简单的if-else语句
赋值运算符用于将右侧的值赋给左侧的变量,并支持一些复合赋值运算符的使用在数值计算和变量操作中非常频繁

在编写复杂的Java程序时,了解各类运算符的运算方式、特征以及运算符优先级是至关重要的。正确地应用运算符可以简化代码逻辑,提高程序的效率和可读性。

通过本文所提供的应用场景案例,读者可以进一步理解不同运算符的实际应用。掌握这些运算符的用法将帮助开发人员更好地处理问题并设计出更高效的算法。


温习回顾上一篇(点击跳转)《【Java基础教程】(三)程序概念篇 · 上》
继续阅读下一篇(点击跳转)《【Java基础教程】(五)程序概念篇 · 下》


本文图片来源:
《第一行代码JAVA》

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

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

相关文章

MSF安装使用指导案例

零.简介 Metasploit&#xff08;MSF&#xff09;是一个免费的、可下载的框架&#xff0c;它本身附带数百个已知软件漏洞&#xff0c;是一款专业级漏洞攻击工具。当H.D. Moore在2003年发布Metasploit时&#xff0c;计算机安全状况也被永久性地改变了&#xff0c;仿佛一夜之间&a…

选择排序--简单选择排序,堆排序(大根堆,小根堆的建立,堆排序,插入删除元素)包含程序

选择排序&#xff1a;每一趟从待排序列中选择最小的元素作为有序子序列中的元素&#xff0c;待元素只剩下一个&#xff0c;就不用选了。 一&#xff0c;简单选择排序 1.过程&#xff1a;假设以A[]表示数组 1.1最开始定义一个变量用来存储数组数组第一个元素的序号 i 0; min…

赛效:怎么无损压缩Word文档

1&#xff1a;在电脑上打开PDF猫&#xff0c;在导航栏的“文件压缩”菜单里点击“Word压缩”。 2&#xff1a;点击或者拖拽Word文档上传。 3&#xff1a;文件添加成功后&#xff0c;点击右下角“开始转换”。 4&#xff1a;转换成功后&#xff0c;文件下方有下载按钮&#xff0…

快速搭建专属于自己的单商户商城系统!

<系统简介> 基于ThinkPHP6.0、Vue、uni-app、PHP8.0、MySQL5.7、element-ui等主流通用技术开发的一套likeshop单商户商城系统&#xff0c;真正做到好懂&#xff0c;易改&#xff0c;不绕弯 代码全开源 极易二开 可免费商用 系统适用于B2C、单商户、自营商城场景。完…

SOLIDWORKS电控柜设计插件

电控柜设备的种类有很多种&#xff0c;但它们大体都是箱柜式的结构。电控柜是有标准的&#xff0c;但对于公司产品而言&#xff0c;针对不同的项目&#xff0c;如果都使用同一种规格的电控柜&#xff0c;又有可能空间太大&#xff0c;造成浪费&#xff0c;因此一般来说&#xf…

Postman 连接/请求超时(远程服务/接口访问不上)

一、问题情况 二、解决思路 接口访问不了&#xff0c;先看请求方式&#xff0c;然后看IP地址&#xff0c;发现都对着&#xff0c;但请求接口对应的端口号发现连接不上&#xff0c;于是想到是不是防火墙没有关&#xff08;不过理论上严谨一点&#xff0c;是只要把这个端口给开放…

机器学习27:使用 Pandas 和 TensorFlow 进行数据建模编程实践

本文将详细介绍基于 Pandas 和 TensorFlow 探索、清理以及转换用于训练模型的数据集的方法&#xff0c;辅以代码和图片。 学习目标&#xff1a; 了解使用 Pandas 进行数据清理和处理丢失数据的基础知识。使用校准图评估模型性能。使用各种特征转换训练模型。使用可视化来了解…

前端学习——jsDay5

对象 对象使用 小练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"width…

科技力量赋予 SK5 代理 HTTP 代理 IP 网络无限可能

第一部分&#xff1a;智能网络加速技术 智能缓存&#xff1a;SK5 代理 HTTP 代理 IP 利用智能缓存技术&#xff0c;将经常访问的资源缓存在代理服务器中&#xff0c;从而实现更快速的资源加载和页面响应。这种智能化的缓存策略有效减少了对远程服务器的依赖&#xff0c;提升了用…

产品经理学习画原型-登录界面

开始画登录界面 选择一个矩形 常用修改&#xff1a; 选择文本标签&#xff1a; 设置字体、字号、颜色 添加水平线&#xff1a; 调整两个线连接&#xff0c;可以用CTRL加号、减号放大缩小画布来处理 选择一个主要按钮&#xff1a; 处理颜色、圆角 添加文本框&#xff1a; 设置高…

Android性能分析【启动优化】

作者&#xff1a;申国骏 性能分析工具 首先我们来学习一下如何使用性能分析的工具。我们从一个具体的例子出发&#xff0c;就是如何分析应用启动的性能。 Android Profiler 配置 我们来先看看Android Profiler。为了能在应用一启动就能马上捕捉到分析数据&#xff0c;我们需…

python接口自动化(十八)--重定向(Location)(详解)

简介 在实际工作中&#xff0c;有些接口请求完以后会重定向到别的url&#xff0c;而你却需要重定向前的url。URL主要是针对虚拟空间而言&#xff0c;因为不是自己独立管理的服务器&#xff0c;所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问&#…

Linux下make和makefile的使用方法

1.make和makefile的区别 make是指令&#xff0c;makefile是文件&#xff0c;这是两者的却别。两者搭配使用&#xff0c;完成项目自动化创建。 2.make原理 make是如何工作的&#xff0c;也就是在默认情况下&#xff0c;我们只输入make命令&#xff0c;那么 1.make会在当前目录下…

Python基础:函数和函数式编程

文章目录 函数和函数式编程函数函数式编程 函数和函数式编程 函数 声明函数&#xff1a; def hello():print("hello function!")调用函数&#xff1a; # 使用()调用 hello()#output:hello function!# 没有()&#xff0c;则不进行调用&#xff0c;一切皆是对象&am…

Spring + Spring MVC + MyBatis+Bootstrap+Mysql酒店管理系统源码

IDEASpring Spring MVC MyBatisBootstrapMysql酒店管理系统源码 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.会员信息管理3.客房信息类型管理4.客房信息管理5.客房信息添加6.预定信息管理7.入住信息管理8.入住信息添加 三、部分代码UserMapper.javaUserController.j…

MySQl数据库第四课-------------努力------努力------努力

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————————— 目录 sudo whoami who exit reboot、shutdown 软件安装 编辑器vim ————————————————————————…

9.2.2 【Linux】按键说明

第一部份&#xff1a;一般指令模式可用的按钮说明&#xff0c;光标移动、复制贴上、搜寻取代等 第二部份&#xff1a;一般指令模式切换到编辑模式的可用的按钮说明 第三部份&#xff1a;一般指令模式切换到命令行界面的可用按钮说明

公网远程连接Redis数据库「内网穿透」

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 转载自cpolar极点云文章&#xff1a;公网远程连接Red…

Python_列表比较大小

比较原理 从第一个元素顺序开始比较&#xff0c;如果相等&#xff0c;则继续&#xff0c;返回第一个不相等元素得比较结果。如果所有元素比较均相等&#xff0c;则长的列表大&#xff0c;一样长则两列表相等。 示例 a [5, 6, 3] b [5, 4, 3, 1] # 返回第1个不相等同位元素…

计算机图形硬件(二) 5 - 3 图形工作站和观察系统、输入设备

1 图形工作站和观察系统 目前&#xff0c;大多数图形监视器以光栅扫描显示的方式工作&#xff0c;一般使用 CRT或平板系统。图形系统的范围从小型通用计算机系统到多监视器及超大幅面观察屏幕。个人计算机的屏幕分辨率从640x480到1280x1024屏幕对角线从12英寸到21英寸。多数通…