1. java 变量7 |5 l, Y6 k( n9 m. {( f
1) 变量就是自然语言中的代词+ O' h+ l2 x! }& e
Person he; int age = 15; " |- k$ U( g: s: f1 m0 K2 ^ //age= 00000000 00000000 00000000 00001111 2 h* V5 L2 B/ V" Z* H5 ~3 z4 v System.out.println(age);//15 & ]+ F. }; A |6 m# L; r2 y 2) Java 中的变量, Java是强类型语言, / B, f! J- q) T8 \6 J A 变量必须声明,并且初始化以后使用 int i=0; 2 y6 A7 M4 ^3 K$ j- A B 变量必须有明确的类型. c: f5 @' K4 L1 A; `: @3 d( N# q
C 变量不能重复定义( u( {# B8 ~: r% _, d1 l4 t
3) 变量的作用域8 M3 w9 v% B/ F* G8 ?
a 在声明的地方开始,到块结束为止 5 n- X* m8 S/ P& ~' s b 离开变量的作用域结束,变量将回收。 $ K% v; t9 n5 ^0 a. r7 F 8 d8 D0 L7 e% S/ S5 E0 ]5 Q2. 进制转换基础( l! r( z0 \" T) y$ l
1) 十进制 + L6 |: s. t( Z+ b$ g 逢10进13 j8 o' [, `( Z( d+ f4 N- {# E
基数: 10) E5 j* ~/ h7 f" B) H1 E* |
权: 10^n, 10000 1000 100 10 14 R/ Z0 h% l& ^9 H0 Q& D: c$ w
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 * j* |0 x* G; y* q
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 3 p4 ~ x' N: ]3 u
= 23679, x/ B6 i0 K/ m$ g0 R# W; m* P. R
3 U* q/ T6 Y z/ o$ P; i3 R4 T
2) 二进制 - F% Q( o; F: H& q4 R9 o$ X3 |9 U 逢2进1 7 x/ Z1 O1 `9 ?5 P2 |! j/ a% z' |% E 基数: 2 , `9 S0 J) F0 U! V* |9 ] 权: 2^n, 128 64 32 16 8 4 2 1 " W# T1 o, `& f1 L$ P0 }0 B
01000001(2) = 1*64 + 1*1) L: m; F6 q( }# Q: G
= 65(10)6 D/ {! K0 K; ~. H$ t/ ?
3) 补码基础 1 G7 y5 k- F k% q H -128 10000000 11111111 11111111 11111111 10000000 5 e% ?# r8 ]) l* }' u( g% ?10 2进制 ... ...( L' W( ~) F6 h: m! [& U- V1 D
8421 11110111 11111111 11111111 11111111 11110111 / H$ v2 x& x! Q, ]+ |+ r) Q-8 1000 11111000 11111111 11111111 11111111 11111000 , N' y" X0 e# L6 B4 T% f: \
-7 1001 11111001 11111111 11111111 11111111 11111001- \2 i- I: A% Q/ @9 S' L2 u2 @
-6 1010 11111010 11111111 11111111 11111111 11111010 8 D9 ~8 F3 ^0 u( n4 g-5 1011 11111011 11111111 11111111 11111111 11111011 / Q. o! z+ m; q9 N5 K! u- h-4 1100 11111100 11111111 11111111 11111111 11111100 h$ V+ ^* `4 V* t/ E
-3 1101 11111101 11111111 11111111 11111111 11111101 9 C6 b5 h3 e* q4 D* k2 @/ _7 H-2 1110 11111110 11111111 11111111 11111111 11111110 ! L/ g* ^9 q, ]# q4 a-1 1111 11111111 11111111 11111111 11111111 11111111 % c) Z/ e: ~$ \% G7 P! H9 F 0 0000 00000000 00000000 00000000 00000000 00000000 7 v# }4 f3 F( H& a1 b5 ` 1 0001 00000001 00000000 00000000 00000000 00000001 0 s/ c$ X+ a. C5 s" q 2 0010 00000010 00000000 00000000 00000000 00000010# X% \1 [; p+ d& k: E5 R7 u
3 0011 00000011 00000000 00000000 00000000 000000114 m5 c( U1 B% ^5 E" Y
4 0100 00000100 00000000 00000000 00000000 00000100 % \2 C( ^, e* f/ O, i! U 5 0101 00000101 00000000 00000000 00000000 00000101 ! x" x8 n) I/ i$ q 6 0110 00000110 00000000 00000000 00000000 00000110 ' m; K1 f5 _$ y, L3 Z4 p3 K 7 0111 00000111 00000000 00000000 00000000 00000111 ( q* `3 }/ y( _- q4 v5 T. F
00001000 00000000 00000000 00000000 000010002 j3 C' G" S; u" O" b
.... ... % Q3 W8 P! s9 w0 o0 }9 f" a 127 01111111 00000000 00000000 00000000 01111111 3 ?$ q; f' s- m2 h c; n i 补码运算:4 p2 e; j7 j$ A; s! O G. v
-1 1111 0 s% q: h+ @ S: I8 K | -1 1111 , _2 M1 a9 c* R, S! u1 k: I * ' ~) ^: g, h5 K5 q# ] ---------- . k. }( D# ^9 m/ B% W
11110 v( L7 R8 H$ M2 \" P) M
1111 : f( o0 y7 @5 C7 j; s- K$ [ 1111 $ _3 E7 J v8 a, x0 `. l 1111 3 U$ W! ?) ~. X2 \7 R8 w5 C 1010101 ; q; |; Y& l8 a9 u) m$ Z -----------* A9 Z4 n8 L0 J% g9 T
0001( w5 o- @5 J t& _6 G/ d
; {7 ^8 b% O- _
4) A Java 内部只有二进制补码 + q5 S4 B4 `* x) _' H* I B Java 内部采用补码运算, 自动发送上溢出和下溢出 - L+ t3 c- g1 d) e- L C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出 & V" E, R2 o7 N0 }( ^: l D 补码的负数 最高位是 1, 也称作符号位 , z7 \* J8 d5 w3 J' c% f! k3 E( e 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据& R; N2 K. b% t; U' N f
16进制6 @! J, H1 [. s( G; }4 d
逢16进1 ! w' b4 z7 g9 O3 r: |# C+ [$ A 基数: 16# }' W) Y" m5 i4 Q5 L
权: 16^n, 256 16 1 & h6 H) L# v) T/ u7 P! ~1 t
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f- g# K. c3 q O/ Q) S2 A7 e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 4 l$ @0 g+ f( [ + }* h; D/ n l2 ]3 O 41(16) = 4*16 + 1*1 l. o# W" W* V3 A$ W7 u+ e = 65(10). ?" o% r1 j1 A1 v m
= 0100 0001(2)9 c% T1 w! q/ |4 O0 d
8421 8421 3 d3 }$ K' j1 d6 W- H8 A1 R 4 1 (16), ~$ `/ y1 x- R6 f% e
' S6 K( a3 p; O$ w2 E
128 64 32 16 8 4 2 1 ) D0 O6 V' `6 I 0 1 0 0 0 0 0 13 d/ a% L/ R" d3 V0 u" G' _: D, I
练习:转换以下十进制为二进制 192(10) 137(10) 145(10) ! S& N n# i7 E/ \ R9 v, a, [
192(10) = 1100 0000 (2) 4 k6 Z# F, T# E c 0 (16)! g# k W. x7 \2 Z) k# M- Y$ G
-8(10) = fffffff8(16)5 y" t! {, Y3 {( w; j7 E6 q C
进制总结: 6 i8 A8 H+ _* Y; H2 v2 X 计算机内存只有 二进制补码7 C3 Y+ u3 o% `3 S: s) C8 o% X
默认输出, 按照人习惯输出10机制结果/ Z8 |" @; I4 {8 _4 p
16进制是, 二进制的简写, 16进制本质就是2进制 ! q3 _+ G# v3 c) Z! G* B( B 16进制存在的价值: 方便书写2进制! & m7 ]7 e( m' ^4 M4 Y5 t ) m3 f0 `2 ^* [, g) r: _) d3. Java 数据类型: 分为引用类型和基本数据类型 ; ]) e. K5 a% J( n" M0 d 1) 基本数据类型: 8种- J: K. o7 j" ^% f, C+ G
byte, short, int, long $ Q- d$ k& B% K float, double u* N3 s- b0 U: Y1 s/ A. j; r
char # _! M" m( q ~/ D/ Z" n boolean 1 N6 u+ ~' [0 R" a5 M1 ` 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数6 H) D6 t9 i, R7 d9 _7 u6 R
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128. o, {3 c. i6 |- u9 R
short 16位有符号数 0x7fff 32767 0x8000 -32768* k0 C _6 t |- w2 M+ K, {2 F( r
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G % E- w8 S8 Q, d8 B7 C
long 64位 ....' t. |; o) {+ w% H5 ?# h& M
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给; N e1 N5 J$ `6 c* S5 U- y
小类型直接赋值. $ a! x: A9 l, r" q3 @6 j. ] 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算# E. G! T0 i' b" e* P
java 底层byte,short 按照32位计算 ; }9 ]! l, u' I8 S R9 ]* J6 {6 `5 p long 类型的字面量使用"L","l" 后缀1 i. W' ~) i! N, Q
( u: n; ~9 U8 J 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)8 }( q( u' C( n- b2 D
浮点数原理: 10进制浮点数(科学计数法)原理1 ?4 M6 t: K8 I4 b+ m( h
2356189. = 2.356189 * 10^6: U0 ?* ~7 q3 A! M& k. J. i
概念: 尾数: 2.356189 6 a; W8 f: h' y7 A) Q) j9 \9 T5 g 指数: 62 d: k, Z# p0 v7 g
基数: 10" `! a1 l7 D4 a$ b4 E
pi = 3.145 R, ?" u8 s5 u
3.1415926535897932384626433 : q7 M( ~7 x! D G6 e, V; v1 ] - g3 n: f, h7 ]7 e( p+ t; _# V2 g 二进制浮点数: @# Z) [* b' X: v# ~6 b
101001010101. = 1.01001010101 * 2^1011 / M6 X8 K1 i( [ 概念: 尾数: 1.01001010101 2 u# f4 ] T& V/ x% K3 L- @ 指数: 1011* q" B7 |8 r2 r. e& J- t0 [0 ]
基数: 2 : d& Y- y9 d/ N* C / F+ T/ P5 Z3 ]# l1 n float: 32位 其中: 1位符号位, 8位指数, 23位尾数5 R, A1 v2 |) h1 s$ W
/ n+ v: R7 J+ n/ x5 b
精度: 23 位 1 B. o5 F7 m; [# [% H$ F int max = 01111111 11111111 11111111 11111111 1 G4 y" M0 K1 r" f$ M( N) ^8 |5 \; R float f = 1.111111 11111111 11111111 1 * 2^00011110 $ N' I! D: k3 W# W5 M / |5 }: c7 z, Y% ~* j* _6 H double: 64位 其中: 1位符号位, 11位指数, 52位尾数6 M+ |. b7 W X# a" m2 \# F5 h
" _, p. y0 T( `
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float ' v$ z* F4 ?/ I+ q( X0 S& N1 d* i, F4 ~! A" L* r3 k! _9 p
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数 # W! H& h8 k0 Y& e 数值是一个字符的unicode编码值. 8 |% O' Q& C+ C$ d1 Y unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩 h: I$ e" Y: h" `& F
阿拉伯, 希伯来, ..... 8万+ 字符 4 P6 F" A% K4 a+ U2 `% ]* B 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的. ' H- ^0 ]' T$ t ASCII: 0~128 , g" m6 q5 Y9 u0 i0 @+ \; f Java char 的范围 0~65535 不能表示全部unicode 但是可以表示 , z- A* t4 _, s9 B& e unicode只能够最常用的部分7 ~# T6 t; A& {, s+ e
' A8 Z0 `, n w; h0 x& |6 ?. k
*最小值:0, 最大值:65535 = 2^16-1 ! K, P# V8 C' G& ?' i6 d *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4 ! }3 C% s) P. u R" E x! N0 B 字面量也是整数常量! 52 48 % i* }) g, Z4 i+ R: m
特殊字符采用转义字符表示: 2 e7 V; j5 e2 \) N; B* |8 G 如: '\n' '\t' '\\' '\b' '\r' - k/ ]0 f+ V; f4 G( r7 f
'\'' '\"' '\u4e2d' 0 C8 K6 q- x9 @$ v+ I" J, R' C$ I# s J) f4 _6 q
char c = '\\'; ' _! ]9 N4 T7 ]3 u9 v# t) r % j C6 h7 R- S. i" o( Y 'X' - 'A' = N9 z9 n3 Z+ ^" q+ s6 ?
'x' - 'a' = N0 f ~' H3 t9 X- v, O
X = 'c' - 'a' + 'A' ( J4 I; |& q+ B/ Q6 Y- N8 H4 t% Z' s# h$ g5 f" A$ v o' E6 `$ ?
5) boolean 布尔类型 表达: 真(true)/假(false) 2 p5 ?% I- h9 J/ J: m x 建议使用长变量名定义变量 + Q; |, s" ` E7 C. d+ ?/ m boolean started = true; ( c* Y0 m$ L* n3 Q; W& e; O, V+ p boolean isMan = true;- w; n1 t# `3 ?9 F
isMan = false;4 K" W" s' c/ M+ _! K5 z. U
boolean used = true;//二手的 & B; B" ]' v0 o$ m if(used){% I9 {' E% I& E$ ^% E
System.out.println("打八折"); : ]4 m/ e: R* v! x! p/ O } D0 {5 \5 w) T- D& @ 不建议 定义没有意义的变量% [4 j6 }# }9 s. _
boolean u = true;//u = you3 s6 M" I& G* Z! d7 ^/ Q$ z) q2 T b( a
boolean flag = false;7 Z$ e! P+ `$ w L' K
% B' O6 U5 l' h0 B
if(flag){) o4 l- y. d3 R
System.out.println("打八折"); 8 i, ~6 }/ b9 g9 I! ?4 i
} - M* [' L' w+ }' p; z
$ r" ~& ~/ g# y9 |3 j. i% [
4. 数据类型转换 + w1 r) N$ Y. t+ r
char -> 5 }+ \! i. l# h5 k ` byte -> short -> int -> long -> float -> double4 M4 @9 { t; k& L1 Z: e# U* O
! E" W' o; p" Q N# @7 A3 H" L2 q7 u
1) 自动类型转换,正方向,小类型到大类型的转换会自动完成 X6 Q( m7 u% E4 Q* n; O0 G0 W
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变. R0 p& D/ _* _/ m/ E, P
注意, 整数到浮点数转换会损失精确度7 `) u i4 R7 q2 Z
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理& k' Y4 K5 I$ j. W
& S1 G6 t7 `0 u0 h% b& A' i" q& b
int i = -1; ( m6 _6 `% p3 _7 T9 P long l = i;, T8 u4 c, f( C! O4 P
2 O) M4 }' s- m; J9 Y" E1 E 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行 . P; n5 x+ ~0 X) J 的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围; j. x! C9 \9 D7 X$ N9 |! s- m# j( i' f
int i = 128+256;// 00000000 00000000 00000001 10000000 1 J# E/ l* P! {) l byte b = (byte)i;//-1284 p6 c1 U" Z v I9 H8 I
+ [: u* d# \( _: G long l=0xf80000000L; ) z/ D$ ]- }6 y int c = (int)l;//负数 ) c7 D ~1 a y ) ?. V+ ^! \) [& o0 K: x l = 8;- x5 h/ W3 l. o
int d = (int)l;( a V& Y& Z1 N5 u! P4 y' a' q
& s5 C, k( W; R% s) V
float pi = (float)3.1415926535;//损失精度5 E; t: }. ^; O' C; _; U
+ k' _( M0 Q* T% O% v
char c = '0'; / m3 b, B; w+ e5 O, ^ char x = (char)(c+2); 6 M. \/ Z2 z- d7 U1 W5 c: R 9 {4 V# h5 ?4 u N' j* B+ M