java 源文件
===========================================
* 公共类类名,与文件名一致
<>
----------------------------------
public class HelloWorld {
}
* package 包
*)用来分门别类,存放不同的类
*)本质是文件夹
* import 导包
用来指明一个类的完整路径,
后面代码中,可以简写类名
import android.widget.EditText;
import android.widget.*;
java 数据类型
========================================
* 基本类型
* 引用类型
基本类型
============================================
* 八种
byte 1字节,-128到127,-2^7到2^7-1
short 2字节,-2^15到2^15-1
int 4字节,-2^31到2^31-1
long 8字节,-2^63到2^63-1
float 4字节,单精度
double 8字节,双精度
美国工业电气协会浮点数表示规范
char 2字节,0 到 2^16-1,0到65535
字符、字符的数字编码
char c = 'a';
char c = '中';
char c = 97;
char c = 20013;
boolean 1字节
真 true 00000001
假 false 00000000
基本类型字面值
=============================================
1.整数字面值是 int 类型
int a = 65364
long a = 9999999999; //错,右侧字面值是int类型,但超出int范围
2.byte,short,char 比 int 范围小的整数
可以用范围内的值直接赋值
byte a = 127;//对,右侧是 byte 类型
byte a = 128;//错,右侧是 int 类型
3.浮点数是 double 类型
double a = 3.14;
float a = 3.14;//错,右侧是 double
4.字面值后缀
L long
long a = 9999999999L;
F float
flaot a = 3.14F;
D double
double a = 3D;
5.进制前缀
0x 16进制
0xff 255
0 8进制
0377 255
\u char类型16进制
'\u0061' 97 'a'
'\u4e2d' 20013 '中'
基本类型运算规则
========================================
1.运算结果的数据类型
与运算项中范围最大的类型一致
3 / 2 得 1
3d / 2 得 1.5
2.byte,short,char 比 int 范围小的整数
运算时,会先自动转成 int 类型
byte a = 2;
byte b = 3;
byte c = a + b;//错,右侧是int + int,结果是 int
3.整数数运算溢出
int a = Integer.MAX_VALUE;
a = a + 1;//负数最小值
01111111111111111111111111111111 + 1
10000000000000000000000000000000
4.浮点数运算不精确
2-1.9 得 0.1000000000000009
4.35*100 得 434.9999999999999994
5.浮点数特殊值
Infinity
无穷大
------------------------
3.14/0
Double.MAX_VALUE*2
NaN
Not a Number
------------------------
Math.sqrt(-2)
基本类型类型转换
==========================================
* 范围小的类型 --> 范围大的类型
byte a = 127;
int b = a;
01111111
00000000 00000000 00000000 01111111
byte a = -128;
int b = a;
10000000
11111111 11111111 11111111 10000000
* 范围大的类型 --> 范围小的类型
强制转型
int a = 356;
byte b = (byte) a;
00000000 00000000 00000001 01100100
01100100
运算符
=========================================
+-*/
+ 数学运算、 字符串的连接运算
% 取余
0 % 3 0
1 % 3 1
2 % 3 2
3 % 3 0
4 % 3 1
5 % 3 2
6 % 3 0
7 % 3 1
8 % 3 2
9 % 3 0
10 % 3 1
判断能否被4整除,是看有没有余数
x % 4 是 0
> >= < <= == !=
a = 2
b = 3
a > b false
a < b true
a == b false
a != b true
&& 逻辑与,两侧同时是真结果是真,
任意一侧是假结果是假
短路与: 左侧是假,右侧被忽略
|| 逻辑或,两侧同时是假结果是假,
任意一侧是真结果是真
短路或: 左侧是真,右侧被忽略
! 非,真变假,假变真
可以做相反的判断
如果“非a”是真,即a是假
if(!a) {
}
& 位与:两位同时是1结果是1,任意一位是0结果是0
| 位或:两位同时是0结果是0,任意一位是1结果是1
^ 异或:不同是1,相同是0;
对同一个值异或两次得到原值;
可以对boolean值求异或
~ 求反:1变0,0变1
>> 带符号右移位,
符号位是0,左侧补0;
符号位是1,左侧补1。
>>> 不带符号右移位,
不管符号位是0还是1,左侧补0
<< 左移位,右侧补0
++
--
自增、自减
int a = 10;
//a先自增变成11,打印显示a的原值10
System.out.println(a++);
int a = 10;
//a先自增变成11,打印显示a的新值11
System.out.println(++a);
int a = 10;
int b = a++;//a是11, b是10
int a = 10;
a = a++;//a先自增变成11,再被赋a的原值10
? :
三项运算
1 ? 2 : 3
1是真,执行2;
1是假,执行3。
= 赋值运算
+=
-+
/=
^=
>>=
...
a += 3; // a = a+3;
赋值运算与其他运算符联用,
会自动转型
byte a = 10;
a = (byte) (a + 3);
a += 3;
a += 3.14;
*)运算符优先级
不用记优先级高低,
只需要多加小括号
(1+(2-3))*4/5
流程控制语句
=========================================
if-else if-else
if(条件1) {
1
} else if(条件2) {
2
} else if(条件3) {
3
} else {
4
}
switch-case-default
*)只能判断 byte,short,char,int, enum
*)当一个case成立,从这个case向后无条件
执行每个case,直到结束,或者遇到 break
中断执行(跳出switch)
switch(变量或表达式) {
case 10:
case 3:
break;
case 50:
case 30:
default:
}
for
for(定义变量; 执行条件; 变量修改) {
重复执行的代码
}
for(int i=1; i<=10; i++) {
System.out.println(i);
}
while
先判断后执行
while(执行条件) {
}
do-while
先执行后判断
至少执行一次
do {
} while(执行条件);
循环嵌套
-------------------------------
for(int i=1;i<=3;i++) {
for(int j=1;j<=2;j++) {
i, j
}
}
i j
---- ----
1 1
1 2
2 1
2 2
3 1
3 2
break
continue
-------------------------------
break 中断循环、跳出循环
continue 继续执行循环的下一轮
for(int i=x; i<=y; i++) {
....
...
continue;//跳到 i++ 执行
...
...
}
循环命名
-----------------------------------
outer:
for(...) {
for(...) {
break outer;
continue outer;
}
}
数组
=========================================
* 用来存放一组数据
创建数组
------------------------------------
1. int[] a = new int[5];
创建长度是5的数组,
每个位置都有默认值0
2. int[] a = {5,3,75,2,5,7,45,3};
3. 如果为 a 变量重新赋一个新的数组
a = new int[]{2,23,23,6};
访问数组
------------------------------
a[0] = 232
print(a[2])
int b = a[3] + 2
a[1]++
数组长度属性
------------------------------
a.length
*)最大下标是 a.length-1
*)长度不可变
*)数组长度可以是0
数组遍历
------------------------------
从 0 位置到 a.length-1 位置,
依次访问每个位置
for(int i=0; i