java基础系列01--基础类型
java 基础
1 变量
变量的定义格式:数据类型 变量名 = 变量值;
int a = 5;
2数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
Java中数据类型的分类:
Java中数据类型的分类:
- 基本数据类型 : 整型、浮点型、字符型、布尔型
- 引用数据类型 :数组、类、接口、枚举
基本数据类型分类(4类8种)
整数型
* byte 占一个字节 -128到127
* short 占两个字 -2^15~2^15-1
* int 占四个字节 -2^31~2^31-1
* long 占八个字节 -2^63~2^63-1
浮点型
* float 占四个字节 -3.403E38~3.403E38 单精度
* double 占八个字节-1.798E308~1.798E308 双精度
字符型
* char 占两个字节 0~65535
布尔型
* boolean 理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
定义不同类型的值并且输出,注意float类型,和long类型
byte a = 'a'; // 1个字节 //print ==> 97
short b = 12; // 2个字节 //print ==> 12
int c = 12; // 4个字节 //print ==> 12
long d = 12L; // 8个字节 长整形加L表示 //print ==> 12
float e = 12.3F; // 4个字节,浮点数默认为double 类型,必须加f //print ==> 12.3
double f = 12.3; // 8个字节 //print ==> 12.3
char g = 'a'; // 2个字节 //print ==> a
基本类型默认初始化值:
- 整数类型:byte,short,int,long默认初始化值都是0
- 浮点类型:float,double默认初始化值都是0.0
- 布尔类型:boolean 默认初始化值是false
- 字符类型:char默认初始化值'\u0000',每一个0都是16进制的0
数据类型转换之隐式转换
取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算
int a = 5;
byte b = 4;
a = a + b; // --> a == 9
b = a + b; // 编译报错,cannot convert from int to byte
数据类型转换之强制转换
如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
int a = 126;
byte b = 4;
b = (byte)(a+b); // ---> -126
byte b2 = (byte)300; // ---> 44
变量相加和常量相加的区别
byte a = 10;
byte b = 11;
byte c = a+b; // cannot convert from int to byte
// byte与byte(或者short,char)进行运算的时候都会提升为int,2个int类型的值相加结果也是int,直接赋值给byte类型的c,会出错,其次 a,b是两个变量,变量存储的值是变化的,在编译的时候无法判断具体的值,所以不会报错,但是运行的时候就可能会超出byte的取值
byte d = 3+4 // java编译器有常量优化机制,会先把3+4 =7,和 byte d = 7效果一样
总结:进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的 byte,short,char -- int -- long -- float -- double
float表示的数据范围比long的范围要大
字符char和字符串参与运算
System.out.println("hello"+'a'+1); // --> helloa1
System.out.println('a'+1+"hello"); // --> 98hello
Java语言中的字符char可以存储一个中文汉字吗? 可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节
3运算符
自增(++)和自减(--)以及 +=,-= ...
byte b = 1;
b++; // --> b = 2 自增和自减会有个强制类型转换 等价于 b = (byte)(b+1)
b = b + 1; --> 报错 cannot convert from int to byte
b += 1; // --> b = 3 这种方式也会有个默认强转
逻辑运算符
&, |, ^, !, &&, || :短路与和短路或
- &逻辑与:有false则false。
- |逻辑或:有true则true。
- ^逻辑异或:相同为false,不同为true。
10<20 ^ 20>10 -->true两边同为false或者true结果为true
- !逻辑非:非false则true,非true则false。
位运算符
&,|,^,~ ,>>,>>>,<<
- &:有0则0
- |:有1则1
- ^:相同则0,不同则1
任意一个数异或2次同一个数得到结果不变:5^10^10 = 5
- ~:按位取反
- <<:左移 左边最高位丢弃,右边补齐0 ( *2 的几次方)
- >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1 (除以2的几次方)
- >>>:无符号右移 无论最高位是0还是1,左边补齐0
4方法
方法重载:
在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
5数组
数组定义格式: 数据类型[] 数组名 = new 数据类型[数组的长度] int[] arr = new int[4]
一维数组初始化:
-
动态初始化 只指定长度,由系统给出初始化值
int[] arr = new int[5];
-
静态初始化, 给出初始化值,由系统决定长度
int[] arr = new int[]{1,2,3,4}; // 长度为4,这个也不能拆分,赋值定义得在同一行
int[] arr ={1,2,3,4} // 上面的简写形式,常用的
不允许动静结合:int[] arr = new int[4]{1,2,3,4}; //报错
二维数组初始化:
int[][] arr = new int[3][2];
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
数组当作参数传递:
传递的是数组的地址值:public static void Change(int[] arr){};Change(arrs)
冒泡排序:
选择排序:
二分查找法: 前提是排好序的
6 基本类型包装类:
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
基本类型和包装类的对应:
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
7 Eclipse快捷键操作
类实现了一个接口,生成接口中方法的快捷键: Ctrl+1
新建一个 java文件: Ctrl + n
查找本文件中的类或者方法: Ctrl + o
生成资源面板 : Alt + Shift + s
全局搜索类: Ctrl + Shift + t
导入代码中需要包: Ctrl + Shift + o