java基础学习了解
- 一.java变量
- 二.java数据类型
- 三.java运算符
java环境搭建资源
JDK1.8
链接: https://pan.baidu.com/s/18g5ZXcXmABDeru1r2Yc9xA
提取码:1mnq
Eclipse
(免安装,解压直接使用)
链接:https://pan.baidu.com/s/1SyBcBjdMLyQU87M7VU2nYw
提取码:65rz
一.java变量
使用变量前需要先声明: 数据类型 变量名;
在声明变量时可以同步赋值:数据类型 变量名=值;
int a;
System.out.println(a);
//变量是命名的内存空间
//只有给变量赋值了,该变量才有关联的内存空间。
二.java数据类型
java有无数种数据类型
分为两大类
基础数据类 和 引用数据类型
- 八种基础数据类
整形
byte 1字节 8位 -128~127
short 2字节 -28~28-1
int 4字节 32位 -231~231-1
long 8字节 64位 -263~263-1
浮点型
(单精度)float 4字节 -231~231-1
(双精度)double 8字节 -263~263-1
字符型
char 2字节 \u0000~\uFFFF
布尔型
boolean 1字节 1
计算机是通过补码存储数据
正数的补码是原码它本身
负数的补码是原码符号位不变,其他位取反+1
例:
byte类型是一字节为8位
表示的数字大小范围
-128~127
二进制表示
0 1 1 1 1 1 1 1
最高位是符号位,0表示正数,1表示负数
-127
127为
0 1 1 1 1 1 1 1
取反
1 0 0 0 0 0 0 0
加1得到
1 0 0 0 0 0 0 1
- 思考
float能表示的数据大,还是long能表示的数据大
float 4 long 8
float 内部机制涉及到科学计数法,能表示的数据大。
科学计数法(把一个数表示成a与10的n次幂相乘的形式)
例:306.9表示为3.069*102 == 3.069e2
char一定是两个字节吗?
不是的,这个跟我们选用的字符编码有关,如果采用”ISO-8859-1”编码,那么一个char只会有一个字节。采用”UTF-8”或者“GB2312”、“GBK”等编码格式是动态长度的,如果是英文字符,大家都是一个字节。如果是中文,”UTF-8”是三个字节,而”GBK”和”GB2312”是两个字节。而对于”unicode”而言,无论如何都是两个字节。
中文字符可以存储在char里面吗?
对于一个char如果用”ISO-8859-1”来存储的话,肯定无法存储一个中文,而对于”UTF-8”、“GB2312”、“GBK”而言大多数中文字符是可以存储的。
- 数据类型的强制转换与自动转换问题
自动转换:
在运算时,如果参与运算的数据的数据类型不相同,那么会自动将低级数据类型转换为高级数据类型,运算结果也是高级数据类型。
强制转换:
将高等级的数据类型,赋值给低等级数据类型,不能直接赋值,需要程序员显式声明。
数据类型强制转换时会失去精度
例:
byte a = (byte)129;
System.out.println(a);
a = -127
129 32位 -------》8位 0(23个0)10000001—砍掉多余的位—》10000001 原码取反+1成为补码
10000001 减1 10000000
10000000 取反 00000001 == -127
- 问题
1 .一个整型变量定义后,如果不赋值那么它的值为0,这种说法是否正确? 错
int a; syso(a); //报错,不赋值不能使用
2 基础数据类型之间可以互相转换,这种说法是否正确? 错
boolean不能与其他的类型转换
3 short a = 3; a = a+1; 这么写是否正确? 错
a为short 1为int ,a+1运算时,会自动将short—>int,运算结果也是 int, int----->a报错,需要强制转换
4 int a = (int)1.3+1.5是否正确?错误
int a = (int)(1.3+1.5);// 2
5 已知int能表示的最大的数是2147483647,那么定义long a = 2147483648; 是否正确? 错误
long a = 2147483648L;
三.java运算符
- 算术运算符:
” + - * / % “
int a = 5;
int b = 3;
double c = 2.0;
a/b=1
a%b=2 (%是求余数)
a/c = 2.5 (一次自动转换)
6/c = 3.0 (即使能整除,结果也是double类型)
a+b/c = 6.5 (先乘除,再加减)
- 自增自减运算符:
int a = 1;
b = a++;//1 b = a; a=a+1;
c = ++a;//3 a = a+1; c = a;
++在变量后,先去掉++符号,运算表达式;然后再给变量自增1。
++在变量前,先给变量自增1;然后再运算表达式。
自减运算符的规则与自增相同。
int a = 2++;(这是错误的写法,自增自减只是用在变量上)
int a=3;
a++; (单独写a++和++a,效果一样,都表示该变量自增1)
int b = a;//4
- 比较运算符
< == >= <= !=
比较运算符的运算结果是布尔类型
5>3 true
5>=3 true
5==3; false
5!=3; true
- 逻辑运算符
与或非
&& || !
参与运算的都是布尔类型的数据
5&&3 (错)
5>3 && 3<5 ==》 true 两个都为真,结果才为真
5>3 || 3>5 ==》 true 一个为真,结果即为真
!(5>3) ==》 false 非真即假,非假即真
5>3 || 5>6 && 5<1 ==》true
!的优先级高于&&,&&的优先级高于||
- 赋值运算
= += -= *= /= %=
int a=3;
int b = 5;
a = b;(从右向左运算,将b的值赋值给a)
a = b = 5;(连等)
a+=5; ==》 a=a+5;
- 位运算
按位与& (两个位都是1,结果是1,否则是0)
按位或 | (两个位都是0,结果是0,否则为1)
按位异或 ^(两位不相同,结果为1,否则为0)
按位取反 ~ (将该数的1变为0,0变为1)移位运算
5>>2 —》1 (高位补符号位)
0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1
右移n位,相当于除以2的n次方
5<<2 —》20 (低位补0)
0 0 0 0 0 1 0 1
0 0 0 1 0 1 0 0
左移n位,相当于乘以2的n次方
- 三元运算符
逻辑判断? 表达式1: 表达式2
如果逻辑判断成立,取表达式1的值,否则取表达式2的值。
int c = a>b? a:b; (c的值为a,b中大的那个)