|
该用户从未签到
|
1. java 变量
- ~( M# l- A! S( L* G- j0 q 1) 变量就是自然语言中的代词
/ q* Q" c) W6 H$ N4 ^7 ]3 N* r2 N Person he; int age = 15; 6 A) D/ N! u" O# Z1 J
//age= 00000000 00000000 00000000 00001111% ?6 T) g% p1 a8 j7 J
System.out.println(age);//15
7 w, l; m. S% O0 J- t 2) Java 中的变量, Java是强类型语言,
+ |9 G$ i+ d/ u7 N A 变量必须声明,并且初始化以后使用 int i=0;: I5 C- G8 R3 X, U0 u$ e( k. i& k
B 变量必须有明确的类型: Q) N% N5 c- ^
C 变量不能重复定义
. _" S% Z% t p5 f7 r 3) 变量的作用域$ b; A2 y* H; @' X6 i
a 在声明的地方开始,到块结束为止
- S1 n, k1 K* ?' Q4 Q9 ? b 离开变量的作用域结束,变量将回收。 ]- \ X0 c" B9 K* @8 v
, I4 m5 c9 \6 x* y1 f
2. 进制转换基础 U+ y) F+ R/ x, C2 U
1) 十进制
3 n; |- \9 V3 `: A7 X. I. d' J' @ P 逢10进1& R( `6 {& h5 N
基数: 107 h1 c+ C- A, s- S6 H
权: 10^n, 10000 1000 100 10 16 U3 ^6 l! `# U* z
23678(10) = 2*10000+3*1000+6*100+7*10+8*1
6 j0 n( |& W3 }5 a% e = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
2 h7 ^- `6 u- g/ @2 v = 23679( ^( S0 h! V; Z2 s' q5 {' q
% `5 a+ u; T( V
2) 二进制% r) V# |/ i3 e
逢2进1- u) J8 p+ f$ E- a& q& V
基数: 26 l( j! ?8 n! K8 r+ v) i
权: 2^n, 128 64 32 16 8 4 2 1
4 B! }% C1 I" T# @4 X 01000001(2) = 1*64 + 1*1
5 G5 u/ w* d9 m" B! c; o' l( w$ ` = 65(10)9 w) |' t. a7 r! |5 Q' K' t# L
3) 补码基础9 T! _. T) E; h3 \
-128 10000000 11111111 11111111 11111111 10000000# c2 E# K/ B- j+ Y; `# l
10 2进制 ... ...# \9 x: V* [1 x) g6 z! Q) Y
8421 11110111 11111111 11111111 11111111 11110111* e% J' ~3 c8 a9 p
-8 1000 11111000 11111111 11111111 11111111 11111000 # U( O0 ]8 P. t
-7 1001 11111001 11111111 11111111 11111111 11111001
4 K7 T6 }0 k, E. c# n9 C-6 1010 11111010 11111111 11111111 11111111 11111010
1 g0 ]+ w) `5 a5 q4 u-5 1011 11111011 11111111 11111111 11111111 11111011. D+ y6 ^, ]1 X- l4 M' s
-4 1100 11111100 11111111 11111111 11111111 11111100
' g4 C( V# i$ U+ ?/ p-3 1101 11111101 11111111 11111111 11111111 11111101
5 I4 n- a) [9 {: V: K-2 1110 11111110 11111111 11111111 11111111 11111110( ?+ X h) r+ S7 D5 L/ k) ]
-1 1111 11111111 11111111 11111111 11111111 11111111# t2 q* ^$ S& V9 O- q
0 0000 00000000 00000000 00000000 00000000 00000000
' c* B2 I4 \3 O/ x 1 0001 00000001 00000000 00000000 00000000 00000001. R4 |2 E# H$ o+ K9 L
2 0010 00000010 00000000 00000000 00000000 000000106 X" W9 l+ B5 ]3 H
3 0011 00000011 00000000 00000000 00000000 000000111 J$ F# i8 R! k% W9 @ M$ S o/ `
4 0100 00000100 00000000 00000000 00000000 00000100
& K3 \& ?: s$ h( e, a9 y6 S5 V7 J" \ 5 0101 00000101 00000000 00000000 00000000 000001017 p) ?: J5 R1 R1 x; S
6 0110 00000110 00000000 00000000 00000000 000001105 u) d+ b8 a/ `9 E1 I/ Z
7 0111 00000111 00000000 00000000 00000000 00000111
: g/ ^5 s) p" U 00001000 00000000 00000000 00000000 000010007 P, E% J- B7 i/ b8 V' ^
.... ...7 _% r6 j H( F+ s! P7 G, ?
127 01111111 00000000 00000000 00000000 01111111
% S" P4 v- _9 V. _& }+ Z& X9 i0 Q 补码运算:8 p) o* S3 a! U6 V) Q/ j3 w" `4 o1 b. i4 U
-1 1111
. t/ q p! b9 n/ s4 z, C -1 1111
0 n9 s* B3 i1 P! M! r. h * 1 ]2 H, F. Z6 W3 {+ b# q. v8 p
---------- ( W" z' t P. E" X! [% H$ s8 l: q
1111
( O7 h' Q2 w3 [, x0 T8 p; e2 G- \ 1111
, O9 J c6 \- r9 N- J! h. U6 M 1111
) \7 l/ a5 f; m* h9 }/ \ 1111
4 f. W& u$ }" k, c$ Q 1010101
$ ^" ^5 l5 {3 P5 s+ u% P -----------" Q0 J0 e5 S. F; I) r3 s
0001) a6 ]& _2 l5 d- C- P6 N
) Y$ a9 q# H! y- y1 _* H 4) A Java 内部只有二进制补码! a& J5 o6 f" ]0 |' e5 H( v- v
B Java 内部采用补码运算, 自动发送上溢出和下溢出
W# F% W4 l8 S& @. S% Y+ M C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出, X* @, g; E; {# ~2 {% Z9 z' ^
D 补码的负数 最高位是 1, 也称作符号位- u. Z0 z' R0 J5 ?- f
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
+ _4 ?6 _) p0 C9 n( [. d; h1 X+ Q 16进制
' a# J2 L m1 F4 n% I 逢16进1
' v& }+ ]) f) b 基数: 16
$ B, `, U! I' y 权: 16^n, 256 16 1 " P" a* ?) K, o; J9 j* S- S* q
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
& {* g: o& E7 O5 |* K; t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
( m+ { O" f5 n: \* ~: A, u# |% n * ~0 y( X4 R& `
41(16) = 4*16 + 1*1! k% g N5 T1 w) a: E$ `5 [! p4 r
= 65(10)4 ]; t7 r: q7 Q0 ^
= 0100 0001(2); I/ y+ u. q( h N5 q) C, z2 @
8421 84212 S" k- ^; f( z+ z# [; n. i7 Z
4 1 (16): P9 X- ~2 D1 H& u
4 K- V" i8 f2 B' P. R8 Y 128 64 32 16 8 4 2 1 9 Z8 `! l; N5 p" `8 n
0 1 0 0 0 0 0 1
# Q$ Z6 \# t2 |: j/ R; |0 D; H& u 练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
: ~, Y! Q# A: p+ N. C3 |8 O# u 192(10) = 1100 0000 (2)! A& b* C3 X4 N0 R1 m
c 0 (16)
( K( E4 Y0 ^! x9 Z: i+ T, M8 N: P -8(10) = fffffff8(16)0 p$ L0 Y3 i0 V: e
进制总结:( b7 `: j+ p/ V" n; q2 m5 X
计算机内存只有 二进制补码
- Q/ j) A: T1 M% o1 m. O 默认输出, 按照人习惯输出10机制结果# [% q& m. h1 [# x
16进制是, 二进制的简写, 16进制本质就是2进制
" M5 Y; `2 x7 |8 Z/ Y 16进制存在的价值: 方便书写2进制!
9 d; B5 E& U& z! S6 j# J, r9 P( e9 H* l9 L8 \
3. Java 数据类型: 分为引用类型和基本数据类型 S6 z2 Z# K0 u6 n' _( U
1) 基本数据类型: 8种. j* s" c4 G8 _* V* R
byte, short, int, long. B% m) r. \. T9 c2 z: f {
float, double 4 A6 j, [5 _* P: g7 O: ?
char
& d* X% w" @ x0 x( m boolean
& a2 X" m$ n9 o+ D/ H* m 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
# N, E2 L6 g1 d; ` byte 8位补码 最大值 0x7f 127 最小值 0x80 -128& W5 w* _% Z- K
short 16位有符号数 0x7fff 32767 0x8000 -327682 E1 d) N, E, X ~" W; e. |: M
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G
; p6 X. ^) p; p6 q long 64位 ....3 ]) G+ F% c3 f* ?" J6 T
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
/ u$ Z6 A D3 Q% B' O) ^/ T; d! V& g 小类型直接赋值.
' t" l* N3 e& p, a7 a7 P& Q2 w: | 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
, P5 M1 J7 t; g j, v, a5 P& h4 { java 底层byte,short 按照32位计算$ g/ R+ A' k6 }: E% x$ C
9 N4 q9 y A* w5 d2 b2 P
long 类型的字面量使用"L","l" 后缀
: n9 c2 m0 P: S: X Q) G# u9 V% A) D( m* ~# M
3) 浮点数, 小数 (不必掌握 浮点数的存储方式)2 g' C$ W. {, N( G
浮点数原理: 10进制浮点数(科学计数法)原理$ r: ?! G/ G8 { W
2356189. = 2.356189 * 10^63 N2 n2 v7 O8 B4 w7 s6 y
概念: 尾数: 2.356189
* H1 g2 {7 F! m, |8 r/ [ 指数: 6
8 B% r" X0 k- u 基数: 105 G' U9 v! ]7 A
pi = 3.14
3 O) z4 i2 C% l# h/ k 3.14159265358979323846264331 V" |" N. M, ~1 q9 T
! s" u; u! K+ H4 I. M! }$ ~1 C( A A; J" c6 L5 f* m6 g
二进制浮点数:/ [/ ~* e' `( z, l3 G: G" _
101001010101. = 1.01001010101 * 2^1011+ G* K* r# i% m' x6 O1 H
概念: 尾数: 1.01001010101
* P/ T! E- L% Z- L 指数: 1011
9 X# J; E+ F/ {0 ^ 基数: 2
. {3 @5 r8 [; @; o# {( J/ @7 z7 O# u$ D/ d l) F( G2 O
float: 32位 其中: 1位符号位, 8位指数, 23位尾数
7 b3 e! @3 A$ T) s* t
* h/ X; f- t2 b+ _$ _' f* r- t, w2 P& Z 精度: 23 位
: E: o: t8 r6 y, i! } int max = 01111111 11111111 11111111 111111114 u1 b2 j2 r. T4 M
float f = 1.111111 11111111 11111111 1 * 2^000111104 ?7 L0 r5 n% V6 p) ~: ^" ~' ?
. t+ c) N& m5 n |7 k3 b' p8 L% P
double: 64位 其中: 1位符号位, 11位指数, 52位尾数
7 m9 ~/ j, K5 `) q
% S% X9 U$ |) H9 V+ I 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
a/ m: n P! O5 m+ K# Y4 u4 _5 Q% y: A. J
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
6 w# ^* n$ q5 |% _1 x 数值是一个字符的unicode编码值. * Y- u$ E+ s& w* E2 y% j! O
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩! R0 @9 a' E6 \# N* X# q' T
阿拉伯, 希伯来, ..... 8万+ 字符6 i& z) ~' b9 n3 o/ {9 M# M
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.5 n' D2 g0 a4 Y" g5 F
ASCII: 0~128
& ~$ ?9 m3 E; j; A& o5 R Java char 的范围 0~65535 不能表示全部unicode 但是可以表示+ X' g' x$ Q V
unicode只能够最常用的部分
+ K X! `; f: k0 N) {/ H' K; k- [/ I- i% H) O) @' ^
*最小值:0, 最大值:65535 = 2^16-1
9 d* |- g7 s6 l1 c7 x1 \ *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->44 _$ g7 [2 B& Q/ N# s
字面量也是整数常量! 52 48
8 X* {5 B" k: s, m% f7 | 特殊字符采用转义字符表示:
& C8 f/ M9 o1 S% o$ m7 o 如: '\n' '\t' '\\' '\b' '\r'
7 \7 u% i1 U7 {& [1 p- }1 Q '\'' '\"' '\u4e2d'
0 o; q! K9 y+ ~7 [% A
* i; v% ^( U+ E char c = '\\';
+ ]0 @' V. `9 O. m e* F2 u4 Q, D; Q+ V* e8 U3 U
'X' - 'A' = N
7 y# z' O* ^: Y8 A D0 x, ] 'x' - 'a' = N
3 g0 Y; t- R8 @* T& ^& ]! F X = 'c' - 'a' + 'A'6 w/ N/ g% x$ l' Y
' x! G+ f7 S/ ?4 W) z; ~
5) boolean 布尔类型 表达: 真(true)/假(false)3 X/ f" Q" u- _4 _
建议使用长变量名定义变量
7 a. x3 C6 o& O! U5 q boolean started = true;
4 H# F8 D$ u w% {- a boolean isMan = true;
+ u! k3 t5 x/ \% A& Z5 K isMan = false;, n# a2 F- j# D- j d8 W
boolean used = true;//二手的+ s7 g# D5 n6 Y+ O0 `8 S; m
if(used){- A- J; ?$ L, q' P. e4 j/ H
System.out.println("打八折"); / Z# y2 d* z4 y" F+ A: r% U3 `
}% W+ a, W# z, N1 e5 [; ^
不建议 定义没有意义的变量
4 ~+ f" t2 m4 o boolean u = true;//u = you
% M6 d2 ] E X4 n, T) F9 I8 k d boolean flag = false;
6 \) Q8 H6 z+ k: Z9 n& Y2 g
. b+ h' w/ }4 B if(flag){
( s5 S$ W. g2 B6 ?; O# \ System.out.println("打八折");
! ^4 S+ p) V+ H4 ?3 W- A }
7 r" T$ }) i& Q0 i* w
! N" t2 ?& U0 S1 V+ e* }1 `4. 数据类型转换 % D& E+ D P0 y. _) t* `* z* c( v# {
char ->
& R) E* {& R2 p9 B- m, b. n) t byte -> short -> int -> long -> float -> double: P6 t0 t$ D3 l; a
/ G4 m0 k+ c" u
1) 自动类型转换,正方向,小类型到大类型的转换会自动完成 Q# L* R$ |* ?, e
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
+ f# n. g" {" w8 Y. v; R3 ~: v: q 注意, 整数到浮点数转换会损失精确度3 M, F* N0 d+ U5 y- ^* D4 v
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
, G( O; I% [6 l8 o
+ Z, |5 a/ `9 {: ] int i = -1;2 C/ _) J+ H, T- S# P
long l = i;
, @( [0 |% ]$ n0 d( m/ Z1 R7 Z0 I# D, V h" s
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行
! d5 A: |: G) f" v( @ 的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
( ~2 K+ n9 R1 h H& m& u3 q% G int i = 128+256;// 00000000 00000000 00000001 10000000 $ p) R& `( `- w$ T
byte b = (byte)i;//-1286 t. D" q% e5 w: k+ Y0 D/ E6 P
9 R# n& o% B5 C6 ]2 R! s5 S
long l=0xf80000000L;+ {; T4 }9 M# M+ H2 N, A5 o
int c = (int)l;//负数8 ?, B1 P, E1 X! Y' b' w3 l( J
3 w3 q* ~+ X' X" _3 k1 _
l = 8;
7 }3 i+ u8 ^: ]" Q+ x& M int d = (int)l;
; p, E5 T3 R) J4 v& u
0 O5 g! D6 ?+ D% Y( }' O float pi = (float)3.1415926535;//损失精度
2 a2 x* ~' V# T! G* d5 ?, d- K9 z* |- ]/ S( q
char c = '0';
7 |7 ~3 k i8 v: k( e) p char x = (char)(c+2);+ b, ]9 U' J: L# ~
, C- I7 a: E* D. ?
|
|