编译器 javac
运行 java
数据类型:基本数据类型,对象类型。
{
基本数据类型:char boolean byte short int long float double
{ byte(有符号单字节整型-128~127)
0开头是八进制,0x十六进制
long ll = 123123L; default int
float ff = 3.14f; default double
byte bb = 100; int截断
char在Java中占两个字节
7-bit-ASCII GBK两字节
Java======Unicode编码 每个两字节
'\u75f6'转义Unicode \u后加四位十六进制数
UTF-8=汉字3字节(变长字节) Unicode=汉字2字节=高位先传
记事本ANSI使用GBK word默认UTF-8
}
对象类型:
{
没有struct union
class Date{
int year;
int month;
int day;
}//所有的复杂数据类型都是类/对象实现的
}
数据声明:
{
在类中可以声明数据,在函数里也可以。
所有对象都在堆Heap里
两个概念:引用 对象
HelloWorld w = new HelloWorld();w是一个指针/引用。
HelloWorld w2 = null;//引用 未指向任何对象
垃圾对象:堆中的对象没有被任何指针指向
引用是访问对象的唯一方式
函数栈 栈:局部变量(自动变量) 堆:动态分配空间
Java支持函数递归
}
函数声明:
{
}
参数传递:
{
只有一种:传值
swap(a, b)要使用引用/指针。
}
}
数组
{
声明:
int[] a;//未初始化,不可用
int a[];//少用
int[] b = null; //初始化为空
int[] a = new int[10];
int[][] a = new int[2][3];//二维数组
for(int i = 0; i < a.length; i++){//二维数组初始化
for(int j = 0; j < a[].length; j++){
a[i][j] = 1;
}
}
//非矩形的二维数组
int[][] a = new int[2][];
a[0] = new int[2];
a[1] = new int[5];
//全局变量默认值0
//函数内局部变量一定要初始化
}
运算符
{
算术>关系>逻辑
一元>二元
算术运算:{
% 结果与被除数的符号位一致,与除数无关
+- 运算结果类型不能低于int类型,可以有强制类型转换
浮点->整型,向下取整或最大值(超出范围)
下列两行不完全等价
x = x + y;
x += y;//隐含了一个类型转化 <==> x = (x-type)(x + y);
数组之间不能赋值
元素可以赋值
有继承关系的引用数组之间可以互相赋值
特殊运算符:>>> 无符号移位 符号位都补0
int i = 5;
i>>33; <==> i>>1;
编译器自动取模
byte也对32取模,计算结果是int类型
int i = 0x80;
byte b = -128;
二者不同
}
关系运算:{
结果为Boolean
}
逻辑运算:{
~ 位反运算符
- 算术反//算术
! 逻辑反
& ^ | 位逻辑运算 //int/boolean
&& || 短路运算,只作用Boolean //可确定表达式值时,不再执行
?: 三元运算符,结果的精度由两个结果中精度大的决定,复制兼容
}
}