系列文章目录
Java基础篇之jdk、jre环境变量的配置
第六章 - Java集合
第七章 - Java网络编程
文章目录
一、标识符
标识符定义:
对程序中的各个元素命名时使用的记号称为标识符(identifier)(凡是自己可以起名字的地方都叫标识符,比如:类名、变量名、方法名、接口名、包名…)。
标识符的命名规则(需严格遵守、否则编译不通过):
1.由26个英文字母大小写,0-9,或$组成。
2.数字不可开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.Java中严格区分大小写,长度无限制。
5.标识符不能包含空格。
Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz。
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz。
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz。
常量名:所有字母大写。多个单词时每个单词用下划线连接:XXX_YYY_ZZZ。
命名时尽量做到见名知意。
二、变量
java定义变量的格式:
数据类型 变量名 = 变量值; 如:
int myAge = 20;
说明:
1.变量需要先声明,后使用。
2.变量都定义在其作用域内。在作用域内,它是有效的。
3.同一个作用域内,不可以声明两个同名的变量。
三、Java定义的数据类型
(一)、变量按照数据类型来分
基本数据类型:
整数:byte(1字节) \ short(2字节) \ int(4字节) \ long(8字节)
浮点型 : float (4字节)\ double(8字节)
字符型 : char(1字符=2字节)
布尔型 : boolean
1.byte范围:-128~127
byte b1 = 12
byte b2 = -128
2.声明long类型变量,必须以"l"或者 "L"结尾
`long l1 = 34324234324L`
3.浮点型,表示带小数点的值
4.float表示的数值范围比long还大
5.定义float类型变量时,变量要以"f"或者"F"结尾
6.通常定义浮点型用double型(范围大,精度高)
7.定义char类型变量,通常使用一对’',内部只能写一个字符;
表示方式:
7.1声明一个字符
7.2转义字符
7.3直接使用Unicode值来表示字符型常量
char c1 = 'a';
char c2 = '\n';
char c3 = '\u0043';
8.布尔型:boolean,只能取两个值之一:true \ false,常在条件判断、循环结构中使用
引用数据类型:
类(class)
接口(interface)
数组(array)
(二)、变量在类中声明的位置来分
成员变量
局部变量
(三)、基本数据类型之间的运算规则
前提:这里讨论只是7种基本数据类型变量间的运算。不包含boolean类型的
1.自动类型提升:
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。byte \ char \ short --> int --> long --> float --> double
特别的:当byte、char、short做运算时结果为int型
2.强制类型转换:自动类型提升运算的逆运算
2.1需要使用强转符:()
2.2注意点:强制类型转换,可能会导致精度损失
//精度损失举例1:
double d1 = 12.9;
int i1 = (int)d1;//结果:12 截断操作
//没有精度损失
long l1 = 123;
short s2 = (short)l1;
//精度损失举例2
int i2 = 128;
byte b = (byte)i2;//结果:-128
(四)、变量运算规则的两个特殊情况
1.编码情况一:
long l = 123123;
System.out.println(l);
//编译失败:过大的整数
//long l1 = 2321432432434324234;(不加L默认为int型,此时超出int的取值范围)
long l1 = 2321432432434324234L;(这样就没问题)
//编译失败
float f1 = 12.3 (不加f默认为double类型,再赋值给float类型,自然会失败,除非强制类型转换)
2.编码情况2:
//整形常量,默认类型为int型
//浮点型常量,默认类型为double
byte b = 12;
//byte b1 = b + 1;//编译失败
//float f1 = b + 12.3//编译失败
(五)String类型变量的使用
1.String属于引用数据类型
2.声明String类型变量时,使用一对""
3.String可以和8种基本数据类型做运算,且运算只能是连接运算:+
int number = 1001;
String numberStr = "学号:";
String info = numberStr + number;//+ : 连接运算
4.运算结果仍然是String类型
练习1:
char c = 'a'; //97 A : 65
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 );//hell010a
练习2:
System.out.println("* *");
System.out.println('*' + '\t' + '*');
System.out.println('*'+"\t" +'*');
System.out.println('*'+'\t'+"*");
System.out.println('*'+('\t' + "*"));
四、进制
(一)关于进制
- 所有计算机底层都以二进制形式存在
- 对于整数,有四种表示方式
二进制:0,1 满2进1,以0b或0B开头
十进制:0-9,满10进1
八进制:0-7,满8进1,以数字0开头表示
十六进制:0-9及A-F,满16进1,以0x或0X开头表示。此处的A-F不区分大小写
如:0x21AF + 1 = 0X21B0
进制之间对应规则:
十进制 | 十六进制 | 八进制 | 二进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 2 | 2 | 10 |
3 | 3 | 3 | 11 |
4 | 4 | 4 | 100 |
5 | 5 | 5 | 101 |
6 | 6 | 6 | 110 |
7 | 7 | 7 | 111 |
8 | 8 | 10 | 1000 |
9 | 9 | 11 | 1001 |
10 | A | 12 | 1010 |
11 | B | 13 | 1011 |
12 | C | 14 | 1100 |
13 | D | 15 | 1101 |
14 | E | 16 | 1110 |
15 | F | 17 | 1111 |
16 | 10 | 20 | 10000 |
17 | 11 | 21 | 10001 |
(二)二进制的原码、反码、补码
1 * 2^3 + 1* 2^2 +1 * 2^1 = 14
符号位 | ||||||||
---|---|---|---|---|---|---|---|---|
原码 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
符号位:
1:正数
0:负数
-14
原码 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
反码 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
补码 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
原码:符号位为1
反码:在原码基础上除符号位外,各个位取反
补码:在反码的基础上+1
计算机底层都以补码的方式来存储数据
给你一个二进制怎么推出十进制是多少?
补码 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
反码 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
原码 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 |
1.根据补码-1得出反码
2.反码的符号位不变,各位取反得到原码
+127 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
-127的原码 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
-127的反码 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
-127的补码 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
-128 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
(三)进制间的转换
1.十进制 二进制互转
二进制转成十进制 乘以2的幂数
00001010对应的十进制就是1*2^1 + 1*2^3 = 10
十进制转成二进制 除以2取余数
15转化成二进制就是
15/2 = 7 余数为1
7/2 = 3 余数为1
3/2 = 1 余数为1
1/2 = 0 余数为1
得出15对应的二进制为1111
2.二进制 八进制互转
二进制转为八进制
010101001转为八进制
每三位做运算
1*2 ^ 1 = 2
1*2 ^ 0 + 1*2 ^ 2 = 5
1*2 ^ 0 = 1
对应的八进制为251
八进制转为二进制
255转换为二进制为
010101101
3.二进制十六进制互转
二进制转换为十六进制
1011010100011010
转为十六进制
每四位做运算
得1*2 ^ 0+1*2 ^ 1 + 1* 2 ^ 3 = 11 即 B
1* 2 ^ 0 + 1* 2 ^ 2 = 5
1 * 2 ^ 0 = 1
1 * 2 ^ 1 + 1* 2 ^ 3 = 10 即A
得到十六进制为B51A
十六进制转为二进制
D3F9转为二进制为
每一位分为四个二进制位得到
D = 13 = 4+8+1 = 1101
3 = 0011
F = 15 = 8 + 4 + 2 + 1 = 1111
9 = 8 + 1 = 1001
十六进制为1101001111111001
4.十进制 八进制互转
以二进制作为中间枢纽进行转换即可
5.十进制 十六进制互转
以二进制作为中间枢纽进行转换即可