编程语言基础《2》

2.6变量

1什么是变量

1,变量本质上就是内存中的一块空间。

2,变量包含三部分:数据类型、名称、字面值(数据)。

3,变量是内存中存储数据的最基本的单元。

2数据类型

1,数据类型不一样,在内存中开辟的空间大小也是不一样的

2,数据类型的作用:指导JVM在运行阶段应该开辟多大的内存空间。

3变量要求

变量中存储的具体“数据”必须和变量的“数据类型”一致,否则,编译时会报错。

4声明变量

1,数据类型 变量名; 例如,【int num;

2,变量在一行可以声明多个:【int a,b,c;

5声明变量并赋值

1,变量名 = 字面值; 例如,【int num = 10;

1,在这里“=”叫赋值运算符,它先运算等号右边的表达式,然后将结果赋值给左边的变量。

2,变量赋值之后,可以重新赋值,变量的值是可以变化的。

int num = 10;

System.out.println(num); // 10

num = 20;

System.out.println(num); // 20

num = 100;

System.out.println(num); // 100

2,有了变量的概念以后,内存空间就得到了重复的使用

3,变量必须声明且赋值以后才能访问。int i; 程序执行到这里,内存空间并没有开辟出来,程序是无法访问的。

4,一行上可以同时声明多个变量,但不能同时赋值,只会对最后一个起到赋值作用

int a,b,c = 300;

只有c被赋值为300,a和b均没被赋值,所以,这种写法会报编译错误。

5,在同一个“作用域”中,变量名不能重名,但可以重新赋值。

public static void test1(){

int i = 100;

System.out.println(i); // 100

i = 200;

System.out.println(i); // 200

int i = 90;

System.out.println(i); // 报错,因为之前已经有一个变量i了,不能再命名一个变量i。

}

7访问变量的两种形式

1,读取变量中保存的具体数据:get(获取)

2,修改变量中保存的具体数据:set(设置)

8变量作用域

1,作用域:就是变量的有效范围。

2,变量出了大括号就不管用了

9变量的分类

1,根据变量声明的位置

1,局部变量:在方法体中声明的变量

2,成员变量:在方法体外【类体之中】声明的变量

2,在不同的作用域中,变量名是可以重名的。

 

2.7数据类型详解

1,数据类型的作用指导JVM在运行阶段应该开辟多大的内存空间。

1分类

1,基本数据类型

2,引用数据类型

2基本数据类型

1,整数型:byte、short、int、long

2,浮点型:float、double

3,布尔型:boolean

4,字符型:char

3字符串和字符

字符串"abc"属于引用数据类型

4基本数据类型占用空间

基本数据类型 占用空间大小【单位:字节】

-------------------------------------------------------------------

byte 1 取值范围(-128~127)

short 2

int 4

long 8

float 4

double 8

boolean 1

char 2 取值范围(0~65535)

----------------------------------------------------------------

5八种基本数据类型的默认值

8种基本数据类型 默认值

-------------------------------------------

1,byte short int long 0

2,float double 0.0

3,boolean false【0

4,char \u0000

注意:char类型变量可以存储一个中文字符(2个字节)UTF-8中一个中文是3个字节

6转义字符 \

1,各种含义的转义字符表示

1,换行符:\n

2,制表符(Tab):\t 注意:制表符和空格不一样,它们的ASCII值不一样。

3,反斜杠:\\

4,单引号:\'

2,该目录下有一个转义字符的工具:C:\Windows\System32\cmd.exe

1,输入命令:native2ascii.exe 进入编辑状态,输入你想编写的文字,它就会转义成Unicode编码形式的文字。

2,你最近过的还好吗?----> \u4f60\u6700\u8fd1\u8fc7\u7684\u8fd8\u597d\u5417\uff1f

7整数型

1,java中整数型的字面值默认是int类型。

2java中long类型的数值要在后面添加“L”,例如:34244324L。

3java语言中的整数型字面值有三种表示方式

1,十进制

2,八进制:以0开始 例如,010

3,十六进制:以0x开始 例如,0x10

4,示例:long x = 456;

1456默认是int类型

2,long类型比int类型的取值范围大,小容量的可以自动转换为大容量的,不会报错

3,存在类型转换。

5,示例:long z = 2147483648;

1,会报编译错误:过大的整数。

2,2147483648默认被当做int类型4个字节处理,但它超出了int类型的取值范围

3,解决方法:long z = 2147483648L;这就表示把该数字当成了long类型来存储,就不会报编译错误了。这样也就 不存在类型转换了

6,大容量的强转为小容量会损失精度,造成数据不准确

long x = 100L;

int y = x;

int y = (int)x; // 将long类型的数据强转为int类型

总结:强转的话,编译不会报错,但在运行期间会损失精度。

8浮点型

1,分类

float  单精度  4个字节

    double 双精度  8个字节(默认)

2double的精度太低(相对而言),不适合做财务软件。

但是sun公司准备了更高精度的引用数据类型:java.math.BigDecimal。

3,javaSE类库的源码和字节码位置:

SE类库的字节码:C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar

SE类库的源码:C:\Program Files\Java\jdk1.8.0_202\src.zip

4,想要自定义指定浮点型的具体类型,在字面值后面添加“F或者f”;比如,float s = 5.1f;

5,double和float在计算机内部二进制存储的都是近似值。

9布尔型

1,boolean的两个值:true和false。

2,底层存储boolean类型占用1个字节,false是0,true是1

3,布尔类型经常使用在逻辑运算和条件控制语句当中。

10基本数据类型之间互相转换

1,小容量向大容量转换叫自动类型转换,容量从小到大排序

   byte < short < int < long < float < double

  char  <

   注意:

任何浮点类型不管占用多少个字节,都比整数型容量大。

char 和 short可表示的种类数量相同,但char可以去更大的正整数。

2,大容量转小容量叫强转,需要加强制类型转换符。程序才能编译通过,但在运行阶段会损失精度,需要谨慎使用。

3,当整数字面值没有超出byte、short、char的取值范围,可以直接赋值给byte、short、char类型的变量。

4char num = 97;  表示int类型的97赋值为char型的变量num,存在类型转换,int类型转为char类型。

5byte、short、char混合运算时各自先转换成int类型再做运算。

6,多种数据类型混合运算,先转换成容量大的类型再运算。

7,注意:

byte b = 3; 可以编译通过,3没有超出byte类型取值范围。

int i = 10;

byte b = i / 3; 编译报错,编译器只检查语法,不会“运算”i/3,

2.8运算符

1算数运算符

1,内容

+ 求和

- 相减

 * 乘积

/

% 求余数【取模】

++ 自加1 【单目运算符】 可以出现在变量前面或后面;比如,int k = 10; k++;   ++k;

-- 自减1 【单目运算符】

2,总结

1,无论++运算符出现在变量前或者变量后,只要运算结束,该变量的值一定会自加1.

2,++出现在变量后面(k++):先做赋值操作,再对变量中保存的值做自加1运算。

int num = 10;

int sum = num ++;

System.out.println(num); // 11

System.out.println(sum); //  10

3,++出现在变量前面(++k):先做自加1运算,再做赋值操作。

int m = 20;

int n = ++m;

System.out.println(m); // 21

ystem.out.println(n);// 21

4,示例:

int e = 100;

System.out.println(e ++); // 100  先赋值,100

System.out.println(e); // 101 先赋值,再运算,结果:101

----------------------------------------------------------------------------------------

int s = 100;

System.out.println(++s);//101 先运算,自加1是101

System.out.println(s); // 101 运算后是101,再赋值给变量s,结果是101

2关系运算符

1,内容

> 大于

>=  大于等于

< 小于

<= 小于等于

!= 不等于

== 等于

= 赋值

2,关系运算符的结果一定是布尔类型true或false

3逻辑运算符

1,内容

& And 逻辑与 有车有房就为真,少一样就是假。

| Or 逻辑或 车和房有一样就为真,都没有就是假。

 Not 逻辑非 取反,!false是真;!true是假。

^ 逻辑异或 两边的算子只要不同就是真。相同就是假。

 

&& 短路与

|| 短路或

2,逻辑运算符要求两边的算子都是布尔类型,并且运算结果也是布尔类型。

3,“逻辑与和逻辑或”与“短路与和短路或”最终运算结果是相同的,只不过“短路与和短路或”存在短路现象。

int x = 10;

int y = 8;

System.out.println(10 < 8 && ++x < y);

System.out.println(x);// 10

注意:短路与(&&),由于10 < 8 为false,而逻辑运算符是短路与,存在短路现象,后面的 ++x < y 就没有执行的必要了,

这就是短路现象,所以结果为false。

4,如果希望两个表达式都执行的话就是用逻辑与。

5,从某个角度来看,短路与更智能,因为后面的表达式可能不执行,所以执行效率比较高,实际开发中使用频率也比较高。

4赋值类运算符

1,基本赋值运算符:=

2,扩展赋值运算符:+= -= *= /= %=

1, byte x = 10;

x += 5;// 等同于x = (byte)(x+5),并不等同于:x = x + 5;

x += 1000; // 等同于x = (byte)(x + 1000)

2,扩展类赋值运算符不改变运算结果的数据类型,比如,最初你的z是byte类型,不管加多少次,结果都是byte 类型。

5字符串连接运算符

1,有字符串参与,“+”表示连接字符串。没有字符串参数,“+”表示求和运算。

a = 100;

b = 200;

System.out.println(a + "+" b + "=" + (a+b)); //100 + 200 = 300

6三元运算符

1,语法规则:布尔表达式 ? 表达式1:表达式2

2,执行原理:

1,如果布尔表达式的值为真,就把表达式1的执行结果作为整个运算的结果返回。

2,如果布尔表达式的值为假,就把表达式2的执行结果作为整个运算的结果返回。

3,示例:

sex = true;

c = sex ? '男':'女';

System.out.println(c);//男

posted @ 2021-02-24 21:17  兵长砍猴  阅读(103)  评论(0)    收藏  举报