01_基础语法(上):变量与运算符

注:本部分为自学内容,学习过程中整理笔记方便以后查阅。课件内容来自尚学堂,教程地址:https://www.bilibili.com/video/BV1Kb411W75N?p=63

Java语言环境:JDK、JRE、JVM
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等

JRE(Java Runtime Environment Java运行环境)
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

简单而言,使用JDK的开发工具完成的java程序,交给JRE去运行。
在这里插入图片描述

1、变量
1.1 变量分类-按数据类型

对于每一种数据都定义了明确的具体数据类型(强类型语言),在内存中分 配了不同大小的内存空间。
在这里插入图片描述

1.2 变量分类-按声明位置

在方法体外,类体内声明的变量称为成员变量
在方法体内部声明的变量称为局部变量
在这里插入图片描述
注意:二者在初始化值方面的异同:
:都有生命周期
:局部变量除形参外,需显式初始化。

1.3 变量详解
1.3.1 整数类型

java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’ (如果不加则为int)
java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long

在这里插入图片描述
1MB = 1024KB 1KB= 1024B B= byte ? bit?
bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。

1.3.2 浮点类型

1、与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体操作 系统的影响。
2、浮点型常量有两种表示形式:
(1)十进制数形式:如:5.12 512.0f .512 (必须有小数点)
(2)科学计数法形式:如:5.12e2 512E2 100E-2
3、(1)float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
(2)double:双精度,精度是float的两倍。通常采用此类型。
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
在这里插入图片描述

1.3.3 字符类型

1、char 型数据用来表示通常意义上“字符”(2字节)
2、Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字 母,一个汉字,或其他书面语的一个字符。
3、字符型变量的三种表现形式:
(1)字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
(2)Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。 例如:char c3 = ‘\n’; // '\n’表示换行符
(3)直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表 一个十六进制整数。如:\u000a 表示 \n。
4、char类型是可以进行运算的。因为它都对应有Unicode码。

1.3.4 布尔类型:boolean

boolean 类型用来判断逻辑条件,一般用于程序流程控制:
if条件控制语句;
while循环控制语句;
do-while循环控制语句;
for循环控制语句;

boolean类型数据只允许取值true和false,无null。
不可以使用0或非 0 的整数替代false和true,这点和C语言不同。
Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示。

1.3.5 基本数据类型转换

1)自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
在这里插入图片描述
2)有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
3)byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
4)boolean类型不能与其它数据类型运算。
5)当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。

1.3.6 字符串类型:String

1)String不是基本数据类型,属于引用数据类型,定义变量用 “”
2)使用方式与基本数据类型一致。例如:String str = “abcd”;
3)一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。例如:
str = str + “xyz” ;
int n = 100;
str = str + n;
4)string可以和8种基本数据类型做运算,且运算只能是连接运算(+)
5)运算结果仍然是string类型(+前后有string类型的参数,则+一定是连接;前后均不是string,则是加法运算)。
6)string关键练习:

//练习1
char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str);    --107hello,先运算再连接
System.out.println(c + str + num);    --ahello10,两个字符串连接
System.out.println(c + (num + str));  --a10hello,小括号先字符串连接,然后还是字符串连接
System.out.println((c + num) + str);  --107hello,小括号先运算,然后字符串连接
System.out.println(str + num + c);    --hello10a,先连接,后还是连接
//练习2
输出内容:*	*
System.out.println("*	*");    --*	*
System.out.println('*' + '\t' + '*');   --93char对应ascll码,运算的结果是int类型,int类型后又是一个加法
System.out.println('*' + "\t" + '*');	--* *,中间是string表示连接,"\t"类型标识制表符
System.out.println('*' + '\t' + "*");	--51*,先加法后连接
System.out.println('*' +('\t' + "*"));	--*	*,小括号先连接,然后还是连接。

char 有且只能放一个字符,string可以放任意个。

1.3.7 强制类型转换

1)自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。

  • eg:double d1 = 12.3; int i1 = (int)d1; System.out.println(i1); --12
  • 此处不是四舍五入,而是“截断操作”,即只取整数部分。

2)通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。

  • 如: String a = “43”; int i = Integer.parseInt(a);
  • boolean类型不可以转换为其它的数据类型。

注:

  • long l = 123213; 编译不会报错,运行时会默认为int类型;若 l 赋值超过int类型范围,则会编译失败。
  • float f = 12.3; 编译报错,因为默认为double类型时,double 转 float属于逆过程,没法直接转。
  • 常量:byte b = 12; byte b2 = b + 3; 编译报错,因为整型常量默认为int型;浮点型常量默认为double型
1.3.8 小结练习
String str1 = 4; //判断对错:no,字符串定义加""
String str2 = 3.5f + “”; //判断str2对错:yes
System.out.println(str2); //输出:”3.5”
System.out .println(3+4+“Hello!); //输出:7Hello!,先计算后连接
System.out.println(“Hello!+3+4); //输出:Hello!34,两个连接
System.out.println(‘a’+1+“Hello!); //输出:98Hello!,先计算后连接
System.out.println(“Hello”+‘a’+1); //输出:Helloa1,两个连接

判断能否通过编译
1short s = 5;
s = s-2; //判断:no,2是常量,为int型,所以结果应是int型
2byte b = 3;
b = b + 4; //判断:no,理由同上
b = (byte)(b+4); //判断:yes
3char c = ‘a’;
int i = 5;
float d = .314F;
double result = c+i+d; //判断:yes,c+i是int型,i+d计算结果可以赋给double型,double型容量更大
4byte b = 5;
short s = 3;
short t = s + b; //判断:no,应为int型
1.4 进制
1.4.1 变量之进制
  • 所有数字在计算机底层都以二进制形式存在。
  • 对于整数,有四种表示方式:
    1、二进制(binary):0,1 ,满2进1.以0b或0B开头。
    2、十进制(decimal):0-9 ,满10进1。
    3、八进制(octal):0-7 ,满8进1. 以数字0开头表示。
    4、十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。如:0x21AF +1= 0X21B0
    在这里插入图片描述
    在这里插入图片描述
1.4.2二进制
  • Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位
  • 二进制的整数有如下三种形式:
    1、原码:直接将一个数值换成二进制数。最高位是符号位
    2、负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
    3、负数的补码:其反码加1。
  • 计算机以二进制补码的形式保存所有的整数。
    1、正数的原码、反码、补码都相同
    2、负数的补码是其反码+1
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
1.4.3 进制间转化

进制的基本转换

  • 十进制 二进制互转
    1、二进制转成十进制 乘以2的幂数
    2、十进制转成二进制 除以2取余数
  • 二进制 八进制互转
  • 二进制 十六进制互转
  • 十进制 八进制互转
  • 十进制 十六进制互转
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
1.4 运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算术运算符
赋值运算符
比较运算符(关系运算符)
逻辑运算符
位运算符(很少用)
三元运算符

1.4.1 算数运算符

在这里插入图片描述
ps:7%5=2;7是被模数,5是模数。

public class airTest{
public static void main(String[] args){
int num1 = 12;
int num2 = 5;
int resule = num1 / num2;
System.out.print(result); // 2

int result2 = num1 / num2 * num2;
System.out.println(result2); // 10

double result3 = num1 / num2;  //两个int相比还是int得出结果2,然后将2赋给double
System.out.println(result3); // 2.0

double result4 = num1 / num2 + 0.0; // 2.0
double result5 = num1 / (num2 + 0.0); // 2.4 int加double是double,int比double为double 浮点型
double result6 = (double)num1 / num2; // 2.4
double result6 = (double)(num1 / num2); // 2.0
System.out.println(result5); // 2.4
}
}

/(前)++ :先自增1,后运算
/(后)++ :先运算,后自增1
注:++ 表示变量自增 1
int a1 = 10;
int b1 = ++a1; // a1先加1,然后赋值给b1,即先计算再赋值
System.out.println("a1 = " + a1 + ", b1 = " + b1);  // a1 = 11, b1 = 11
int a2 = 10;
int b2 = a2++; // a2先赋值给b2,再加1,即先赋值再计算
System.out.println("a2 = " + a2 + ", b2 = " + b2)  // a2 = 11, b2 = 10
int a3 = 10;
a3++;
int b3 = a3; // b3 = 11

/注意点:
short s1 = 10;
s1 = s1 + 1; //编译失败
s1 = (short)(s1 + 1); //正确
s1++; //自增 1 本身不会改变本身变量的数据类型

/问题:
byte bb1 = 127;
bb1++;
System.out.println("bb1 = " + bb1); /-1280...1(127的二进制表示)11...0(1为符号位,为负数,后边为128,即结果为-128)
 
/(前)-- : 先自减1,后运算
/(后)-- : 先运算,后自减1

算术运算符的注意问题
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略,即结果的符号和被模数相同。此外,取模运算的结果不一定总是整数。
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只
保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的
结果是? 3000
“+”除字符串相加功能外,还能把非字符串转换成字符串.例如:
System.out.println(“5+5=”+5+5); //打印结果是? 5+5=55 ?

--练习1:算术运算符:自加、自减
public class SignTest{
public static void main(String[] args){
int i1 = 10;
int i2 = 20;
int i = i1++;
System.out.print(“i=+i); // i = 10
System.out.println(“i1=+i1); // i1 = 11
i = ++i1;
System.out.print(“i=+i); // i = 12
System.out.println(“i1=+i1); i1 = 12
i = i2--;
System.out.print(“i=+i); // i = 20
System.out.println(“i2=+i2); // i2 = 19
i = --i2;
System.out.print(“i=+i); // i = 18
System.out.println(“i2=+i2); // i2 = 18
}
}
1.4.2 赋值运算符

符号:=
1)当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
2)支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %=

//赋值符号: =
int i1 = 10;
int j1 = 10;

//连续赋值
int i2,j2;
i2 = j2 = 10;
int i3 = 10;j3 = 20;
//*************************************
+=  -=  *=  /=  %=   先运算,再赋值
int num1 = 10;
num1 += 2;
System.out.println(num1); // 12

short s1 = 10;
s1 = s1 + 2;  //编译失败
s1 += 2; // 编译成功,不会改变变量本身的数据类型
System.out.println(s1); // 12
思考2int i = 1;
i *= 0.1;  //不会改变数据类型,所有还是int型
System.out.println(i);// 0
i++;
System.out.println(i);// 1
思考3int m = 2;
int n = 3;
n *= m++;  // n = n * m++  后++,先赋值再运算
System.out.println("m=" + m);  // 3
System.out.println("n=" + n);  // 6
思考4int n1 = 10;
n1 += (n1++) + (++n1); // n1 = n1 + (n1++) + (++n1) = 10 + 10 + 12 = 32
System.out.println(n1); // 31
1.4.3 比较运算符

在这里插入图片描述
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
比较运算符“==”不能误写成“=”

思考1boolean b1 = false;
//区分好 == 和=的区别。
if(b1==true)
System.out.println("结果为真");
else
System.out.println("结果为假");  //结果为假
1.4.4 逻辑运算符

在这里插入图片描述
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别:
1)单&时,左边无论真假,右边都进行运算;
2)双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
理解:异或,追求的是“异”!

--练习
int x = 1;
int y=1;
if(x++==2 & ++y==2){
x =7;
}
System.out.println("x="+x+",y="+y); // x=2,y=2

int x = 1,y = 1;
if(x++==2 && ++y==2){
x =7;
}
System.out.println("x="+x+",y="+y); // x=2,y=1

int x = 1,y = 1;
if(x++==1 | ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y); // x=7,y=2

int x = 1,y = 1;
if(x++==1 || ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y); // x=7,y=1
1.4.5 位运算符

在这里插入图片描述
在这里插入图片描述
1、位运算符才做的都是整型的数据
2、<<:在一定范围内,每向左移1位,相当于 * 2
3、>>:在一定范围内,每向右移1位,相当于 / 2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

0当作
在这里插入图片描述

小技巧:0当作false,1当作true在这里插入图片描述
~取反:符号位也取反
在这里插入图片描述

//练习:交换两个变量的值
int num1 = 10;
int num2 = 20;

//方式一:定义临时变量
int temp = num1;
num1 = num2;
num2 = temp;

//方式二:
//好处:不用定义临时变量
//弊端:1)相加操作可能超出存储范围;2)有局限性,只能适用于数值类型
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;

//方式三:使用位运算符
//有局限性,只能适用于数值类型
num1 = (num1 ^ num2);
num2 = num1 ^ num2;
num1 = num1 ^ num2;
1.4.6 三元运算符

格式: (条件表达式)?表达式1:表达式2;为true,运算后的结果是表达式1;为false,运算后的结果是表达式2;

 三元运算符与if-else的联系与区别:
1)凡是使用三元运算符的地方,都可以简化为if-else语句,反之不成立
2)三元运算符要求必须返回一个结果。
3)if后的代码块可有多个语句

说明:
1)条件表达式的结果是boolean类型
2)根据条件表达式真或假,决定执行表达式1,还是表达式2.
如果表达式位true,则执行表达式1.
如果表达式位false,则执行表达式2.
3)表达式1 和表达式2 要求是一致的。
4)三元运算符可以嵌套使用。

int m = 12;
int n = 5;
int max = (m > n)? m : n;
System.out.println(max);

double num = (m > n)? 2 : 1.0;

练习: 获取三个数中的较大数
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1 > n2)? n1 : n2;
int max2 = (max1 > n2)? max1 : n3;
System.out,println("三个数中的最大值为:" + max2);

//可读性差
int max2 = (( (n1 > n2)? n1 : n2) > n2)? ( (n1 > n2)? n1 : n2) : n3;
System.out,println("三个数中的最大值为:" + max3);

在这里插入图片描述
注:凡是想早运算的,加()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值