Java编程基础
一、变量与标识符
1、什么是变量
没有固定的值,可以改变的数。
系统为程序分配的一块内存单元,用来存储各种类型的数据,根据存储的数据类型不同,有不同类型的变量,变量名标识内存这数据的名称。
2、变量的分类
a、按所属的数据类型划分:
基本数据类型变量。
引用数据类型变量。
b、按被声明的位置划分:
局部变量:方法或语句块内部定义的变量。
成员变量:方法的外部、类的内部定义的变量。
3、标识符
Java对包、类、方法、参数和变量等命名时使用的字符序列叫做标识符
1、标识符的命名规则
a、由字母、数字、下划线_、和$组成
b、不能以数字开头
c、区分大小写
d、长度没有限制
e、不能是java中的关键字和保留关键字
2、标识符的命名习惯
以单词或单词组合来命名。
a、驼峰命名法
b、见名知意
stringName 、 $wer_123
二、八种基础数据类型
1、字节 Byte
字节是计算机文件大小的基本计算单位。
1个字节(Byte)=8个位(Bit)
Bit意思是"位"或"比特",是计算机运算的基础;二进制中的一比特,是二进制最小的信息单位,二进制可以用来表示一个简单的正负判断。
单位换算
1 Byte=8 Bit
1 KB=1024 Byte
1 MB=1024 KB
1 GB=1024 MB
1 TB=1024 GB
1 PB=1024 TB
在内存计算过程中,字节少的的数据计算速度更快,
2、基本数据类型
数据类型 | 关键字 | 占用字节 | 取值范围 | 默认值 |
---|---|---|---|---|
布尔型 | boolean | 不定值 | true、false | false |
字节型 | byte | 1 | -128~127 | 0 |
短整型 | short | 2 | -32768~32768 | 0 |
整型 | int | 4 | -214748364~214748364 | 0 |
长整型 | long | 8 | -9223372036854775808~9223372036854775807 | 0 |
字符型 | char | 2 | 0~65535 | ‘\u0000’ 代表空格 |
单精度浮点型 | float | 4 | 1.4E~3.4028235E38 | 0.0F |
双精度浮点型 | double | 8 | 4.9E-324~1.7976931348623157E308 | 0.0D |
三、基本数据类型的声明
定义变量的格式
//类型(byte) 变量名(a)加了等于符号,代表给声明的变量a赋值 (20)
byte a = 20;
//使用字符型,当a1等于90的时候,打印时根据ascll码表输入字母Z
char a1 = 90;
ascll 码表详细内容 点击查看
四、进制与转化
计算机的进制通常有:十进制、二进制、八进制、十六进制
1、二进制
计算机中的数据都是二进制数字进行保存,逢二进一
如:十进制中的10在计算机中保存为二进制的1010
2、八进制
java中八进制的数据以0开头,如:0123
3、十六进制
二进制太长,所以在程序中一般喜欢用十六进制,基数为十六,逢十六进一,使用abcdef表示0~9的值。
java中十六进制数据要以0x或者0X开头,如0X21D。
十六进制转换二进制只需将每个十六进制数字替换为对应的四个二进制。
二进制 | 十六进制 | 二进制 | 十六进制 |
---|---|---|---|
0000 | 0 | 1001 | 9 |
0011 | 1 | 1010 | A |
0010 | 2 | 1011 | B |
0011 | 3 | 1100 | C |
0100 | 4 | 1101 | D |
0101 | 5 | 1110 | E |
0110 | 6 | 1111 | F |
0111 | 7 | ||
1000 | 8 |
4、补码
计算机内的二进制数值以补码形式表示。
一个正数的补码和其原码形式是相同的。
一个负数的补码是将该数绝对值的二进制形式,按位取反,再加1。
二进制补码数值的最高位(最左位)是符号位:该位是0表示数值为正数,该位是1表示为负数。
十进制 | 二进制 |
---|---|
10 | 00000000 00000000 00000000 00000000 |
-10 | 11111111 11111111 11111111 11110110 |
案列
//-4 计算
0000 0100
1111 1011 这个地方 按位取反
1111 0100 按位取反后再加 1
// -7 计算
0000 0111
1111 1000 这个地方 按位取反
1111 1001 按位取反后再加 1
原因:使用补码可以将符号和其他位统一处理,同时减法也可以按照加法来处理,当两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
5、二进制、十进制转换
1、二进制转换十进制
按权相加:把二进制数写成加权系数展开式,然后按十进制加法规则求和
1101.01 二进制数据计算
=8+4+0+1+0+0.25
=13.25 十进制数据等于13.25
2、十进制转化二进制
整数部分:除2取余,逆序排列
小数部分:乘2取整,顺序排列
56.34 计算十进制数据56转换成二进制
整数部分
57 除 2 余
28 除 2 余 1
14 除 2 余 0
7 除 2 余 0
3 除 2 余 1
1 除 2 余 1
0 1
逆序排列 111001 十进制数据56转换成二进制值为111001
=32+16+8+0+0+1
=56
小数部分
0.34
0.34 乘 2 等于 0.68
0.68 乘 2 等于 1.36
0.36 乘 2 等于 0.72
0.72 乘 2 等于 1.44
0.44 乘 2 等于 0.88
0.88 乘 2 等于 1.76
0.76 乘 2 等于 0.52
。。。。。
0.0101011100001010
十进制数据56.34 等于二进制数据
111001.0101011100001010
五、基本数据类型的转换
1、自动类型转换
容量小的类型自动转换成容量大的数据类型
byte 、short、int 3种类型在计算时会转换成int类型计算。
float 和 double 属于近似值,byte 、int 、short、long 属于精确值。精确值转换成近似值可能丢失精度
byte a = 5;
short b=a ;//把一个字节赋值给一个短整型变量,自动转换
int c = b;//把一个短整型赋值给一个整形变量,自动转换
long e =c;
//精确值转换成近似值可能丢失精度
int num=21314235343999;
float num1=num;
System.out.println(num1)
2、强制数据类型转换
容量大的类型转换成容量小的数据类型时,需要加上强制转换符;
有可能造成精度降低或者数据溢出,谨慎使用
boolea类型不能转换成其他数据类型
//byte 、short、int 3种类型在计算时会转换成int类型计算。
byte a=10;
short b=20;
b=(short)(a+b);
//容量大的类型转换成容量小的数据类型时,需要加上强制转换符;
long num=100;
int num1=(int)num;
六、关键字
48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
2个保留字(现在没用以后可能用到作为关键字):goto、const。
3个特殊直接量:true、false、null。
七、 转义字符
符号 | 说明 |
---|---|
\n | 换行(LF),将当前位置移到下一行开头 |
\r | 回车(CR)将当前位置移到本行开头 |
\t | 水平制表(HT),跳到下一个TAB的位置 |
\ \ | 代表一个反斜线字符’’\‘ |
\ * | 代表一个单引号字符 |
\ " | 代表一个双引号字符 |
// \t:一个制表位,实现对齐功能
System.out.println("北京\t天津\t重庆");
// \\:输出一个\
System.out.println("路径A\\路径B");
// \":输出一个"
System.out.println("小明说\"我要学Java\"");
// \':输出一个'
System.out.println("\'单引号\'");
// \n:换行符
System.out.println("小明\n小王\n小红");
// \r:一个回车
//注意:回车和换行不一样
System.out.println("天津\r北京");
八、运算符与优先级
1、算术运算符
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 1+2 | 3 |
- | 减法 | 7-3 | 5 |
* | 乘法 | 5*2 | 10 |
/ | 除法 | 8/4 | 2 |
% | 取余(取模) | 10%3 | 1 |
++ | 自增(前,后) | ||
– | 自减(前,后) |
int a =3;
int b =4;
a=b++;//先赋值后自增
System.out.println("a="+a); a=4
System.out.println("b="+b); b=5;
int c =3;
int d =4;
c=++d;//先自增后赋值
System.out.println("c="+c); c=5
System.out.println("d="+d); d=5;
2、赋值运算符
将一个值赋给一个变量,运算顺序从左到右
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
= | 赋值 | a=10 | a=10 |
+= | 加等于 | a=2 , a+=4 | a=6 |
-= | 减等于 | a=2 , a-=3 | a=1 |
*= | 乘等于 | a=2 , a*=3 | a=6 |
/= | 除等于 | a=10, a/=3 | a=3 |
%= | 模等于 | a=10 , a%=3 | a=1 |
3、关系运算符
比较两边的操作数,返回类型为booleam类型
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | a=1 , a==10 | false |
!= | 不等于 | a=1 , a !=10 | true |
< | 小于 | a=1 , a<10 | true |
> | 大于 | a=1 , a>10 | false |
<= | 小于等于 | a=1 , a<=10 | true |
>= | 大于等于 | a=1 , a>=10 | false |
4、逻辑运算符
对booleam型结果的表达式进行运算,结果总是为booleam类型
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
& | 与 | false & true | false |
I | 或 | false I true | true |
^ | 异或 | false ^ true | false |
! | 非 | ! true | false |
&& | 短路与 | false && true | false |
II | 短路或 | false II true | true |
在计算机中,非0既真,0为假
逻辑或:或1则1
逻辑与:全1才1
& 和 && 的区别
& 在做逻辑运算时分别计算表达式两边的结果,再做&运算,在做位运算时&表示按位与。
&& 短路与运算,先计算左边的表达式,如结果是false,右边不会再计算,直接返回false。
I 原理同上
II 原理同上
5、位运算符
对两个操作数中的每一个二进制都进行运算。
位运算符 | 按位取反 ~ | 按位与 & | 按位或 | | 按位异或 ^ | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
示例 |
|
|
|
| |||||||||||
说明 | 按位取反 | 有0则0,相同1则1 | 有1则1 | 相同为0,不同取1 |
6、位移运算符
左移 :“a<<b;”将二进制形式的a逐位左移b位,最低位空出的b位补0。
带符号右移 :“a>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位。
无符号右移 :“a>>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补0。