1. java 变量 2 {! y" O7 v! Y; R4 ^; H5 Q 1) 变量就是自然语言中的代词# e0 T. F" r' a0 Z; H( o
Person he; int age = 15; " l7 \$ ]) y' M# C //age= 00000000 00000000 00000000 00001111 8 b$ p5 n# T& `7 {9 W( i System.out.println(age);//15: Z' f2 ^6 F8 Z8 o3 b. r
2) Java 中的变量, Java是强类型语言,- W. d/ X9 x( M4 l1 T
A 变量必须声明,并且初始化以后使用 int i=0; 1 _9 L* i9 ]$ j# e5 A B 变量必须有明确的类型7 V) Z# t8 K# ` D& D! W5 e1 _
C 变量不能重复定义0 D; z1 `, |' @0 ~& ^
3) 变量的作用域 & @! Q8 V! Q3 H! a0 m a 在声明的地方开始,到块结束为止 1 M! Z# G% l2 m7 X+ R b 离开变量的作用域结束,变量将回收。 6 `! T! S: p* \+ G V# N- | 9 {& f) P+ N. u5 H8 y( I7 e4 N2. 进制转换基础 P/ c( s8 T/ f
1) 十进制 0 ?0 c M$ Q3 j! v
逢10进1 9 S7 O# ^! x$ ~& G: g C 基数: 102 u# B3 W5 T5 @! w( s
权: 10^n, 10000 1000 100 10 1, B2 a4 x2 [. b9 M2 ~
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 ' f$ @0 m' [3 ?' j5 z
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 4 c0 @2 B# e9 M9 h, u9 G
= 23679, ?/ `. }4 B5 O
4 m# x8 [3 f% X* l& N. b- V
2) 二进制 1 o y9 ?- s0 S* Z; O 逢2进1 6 X" e5 j9 M8 s+ @ 基数: 2! W$ r, [' _1 |) i! b* M" K& y' J
权: 2^n, 128 64 32 16 8 4 2 1 1 g/ {: {- W% l* J1 D+ H9 G. V( @ 01000001(2) = 1*64 + 1*1 ! u2 B! X) q* |) q = 65(10) : L! O" e- R% s% v; S: j. D 3) 补码基础 0 \( b) U/ G( E& ?, T9 H -128 10000000 11111111 11111111 11111111 10000000 ! x ]5 q; C( s5 ^3 h- {# q10 2进制 ... ... ( @# D& T( U" f$ @3 F7 f; h% \" W, n# T 8421 11110111 11111111 11111111 11111111 111101112 w0 E# g. F* g# l8 A
-8 1000 11111000 11111111 11111111 11111111 11111000 ! v' x1 t% J: x8 G-7 1001 11111001 11111111 11111111 11111111 11111001 5 d4 _6 S' j9 x% f C-6 1010 11111010 11111111 11111111 11111111 11111010+ W( V' h7 n) s) z. a' `( q$ O$ y
-5 1011 11111011 11111111 11111111 11111111 11111011# C4 i& T o9 e- k3 g4 w" p6 _
-4 1100 11111100 11111111 11111111 11111111 11111100( }9 ?- D0 j6 G
-3 1101 11111101 11111111 11111111 11111111 11111101 9 w5 e) W4 N( c5 ^1 B: `-2 1110 11111110 11111111 11111111 11111111 11111110 ! X( R+ l& ?/ b. m1 k- q-1 1111 11111111 11111111 11111111 11111111 11111111 3 W5 C f6 P, f3 T( j' N7 A7 B 0 0000 00000000 00000000 00000000 00000000 00000000 ; g* ~. b( D* [5 X6 n3 h, ^" [ 1 0001 00000001 00000000 00000000 00000000 00000001 9 A, o/ Z% X6 l 2 0010 00000010 00000000 00000000 00000000 00000010" n/ {1 e; k4 k- x# r. Q
3 0011 00000011 00000000 00000000 00000000 00000011 , e( J# H! M, \0 l8 v- n. M 4 0100 00000100 00000000 00000000 00000000 00000100 % [! ~" |3 G7 }5 ^ 5 0101 00000101 00000000 00000000 00000000 000001019 T. u2 W4 w% D4 w O
6 0110 00000110 00000000 00000000 00000000 00000110 - W' d8 s3 m6 Y. g) e3 u s 7 0111 00000111 00000000 00000000 00000000 00000111 ) j/ l* W( U f$ m" w
00001000 00000000 00000000 00000000 00001000 6 D8 R% p. q! P0 A3 P# ^/ c .... ... 7 g0 X' y" r% O# K5 b1 ? 127 01111111 00000000 00000000 00000000 01111111 ( {/ l4 |2 G; R# t" v 补码运算:8 L, R2 q5 C; s% g" y
-1 1111 4 V1 n9 D# E: `' l5 m -1 1111 - j* S7 k$ b- j0 ~- Y * ' X( u: t g g$ M7 |1 k ---------- 3 s, I( U$ s! Q8 c9 ^+ q
11114 [; e+ X: ?1 U! R/ W1 |
1111! P( ~) f$ b; f
1111 ' R1 `. I# [) ]5 I2 e3 M 1111; T' ?5 ?4 X w# ~
1010101 + r& e2 U- [. J8 K2 @ ----------- ( K. @9 K2 w% x+ c 0001 ' o( ^3 Z( T7 U, `* ?' ^+ l. ?/ v, U8 F$ V( U
4) A Java 内部只有二进制补码$ B3 l! E* [# [6 k. P
B Java 内部采用补码运算, 自动发送上溢出和下溢出( E" n/ x1 J$ C j- V7 l
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出 / H; C: y9 p4 r# l! J1 }5 J D 补码的负数 最高位是 1, 也称作符号位. |' r, H# u6 @0 T' y( R( O2 F
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据 # \/ ]) g% W4 m 16进制 1 e# s* }. y% X, M( n1 T3 c7 v9 [ 逢16进1. Y& u+ ?% C& W9 ]1 [
基数: 16 & P; j6 e& @- ?2 i 权: 16^n, 256 16 1 / i3 I) t# b) a; ~5 Z) p
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f1 N% u7 s6 [9 o0 J
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 4 L( R+ W# u: O9 M4 a6 z " r* Z+ T9 W9 |" c; u
41(16) = 4*16 + 1*16 E. G* d' r7 S+ Y
= 65(10) % U$ F! t, ~! S* z4 C7 S = 0100 0001(2) ! b* E; {# {3 X, e 8421 8421 ~; x& R3 O; |; J# \$ G
4 1 (16) ! E1 g9 E K( j6 `0 n& G9 Y D6 o
128 64 32 16 8 4 2 1 x- D& \( _5 ?! Y% S7 Q 0 1 0 0 0 0 0 13 t- y& r' c4 g4 @9 |0 I
练习:转换以下十进制为二进制 192(10) 137(10) 145(10) ' J6 W# `+ C# [1 o" F! f) e1 g
192(10) = 1100 0000 (2)' k# o; \3 a, a) w- d
c 0 (16) 3 u" C* F/ a4 i -8(10) = fffffff8(16)2 H& h6 @$ Z9 f7 H' s' k/ k
进制总结:! q/ {8 b, R8 |
计算机内存只有 二进制补码 ; v! s2 N! b9 B 默认输出, 按照人习惯输出10机制结果: A6 v3 \( F9 J2 ?3 B
16进制是, 二进制的简写, 16进制本质就是2进制) m% K# Q% [1 x' O) ~" M/ O
16进制存在的价值: 方便书写2进制! 6 e: X# P, y/ U! s" @0 p+ w6 G( g8 V
3. Java 数据类型: 分为引用类型和基本数据类型 + b( k( k: i$ ~9 v6 K+ ]8 n 1) 基本数据类型: 8种 : X; ^/ J8 m& O9 i5 q byte, short, int, long) }6 ]7 B! @5 ^
float, double A3 \2 ~4 u) C, T# F# O6 o. _6 G char # e2 b# U4 H! f; ]* | boolean # g$ ~ Z& J" C+ a6 {5 R# w 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数+ [2 w* j( w6 [ x- t" _" @& w
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128. ], @+ ?) W/ b; f0 V1 W
short 16位有符号数 0x7fff 32767 0x8000 -327682 B, I) `3 z/ m. m
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G 5 B3 o3 D) t0 m: a7 T6 n$ F long 64位 .... 9 b/ G6 G7 ]% x+ e 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给$ h) X) R) ]- n/ G
小类型直接赋值. ) w# e1 M! X, s# L5 Q* _& A$ e 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算4 Q& k6 c0 c% [& ?7 D: Y7 y
java 底层byte,short 按照32位计算- `3 y4 u7 \; B
3 k5 `% o) H9 ^+ D& _' R& w long 类型的字面量使用"L","l" 后缀 ) d. _- q4 u1 }% l% o" X ( }) E2 y/ b1 A. C9 K! m. j/ a 3) 浮点数, 小数 (不必掌握 浮点数的存储方式) - I+ z( o, _- M 浮点数原理: 10进制浮点数(科学计数法)原理8 P1 A$ _5 l& N, n" M$ ?! x" y* g3 W( R
2356189. = 2.356189 * 10^6 6 ]( }3 n; v1 |# U, Y 概念: 尾数: 2.356189 8 m4 k5 |' i, L6 _" l$ F 指数: 6, s" j c9 a- F: l! }3 i% P$ m
基数: 10; i5 W' l7 G$ H' h
pi = 3.14( C( Q/ ]3 Q$ E6 u- D) A5 s
3.14159265358979323846264332 i( a# m; c$ U, g( t# p
/ j8 R" s* V; |+ _8 b9 O% @+ ?( C& { J0 I" y7 }( Y
二进制浮点数:" w, T$ a/ k* x2 C
101001010101. = 1.01001010101 * 2^1011# h1 i% Z% z% U, \
概念: 尾数: 1.01001010101 . J3 E( m* B: e" [1 r2 { 指数: 10110 \: f3 z* n" L% N* e
基数: 2 / b! b5 [+ s1 W) A. j - _! H, |; @7 k float: 32位 其中: 1位符号位, 8位指数, 23位尾数- ~* y3 V) }/ N; q/ X* a
8 W s3 @( P3 n* C) W
精度: 23 位 / b+ r. z i5 ]! t int max = 01111111 11111111 11111111 11111111 ! x. z# V4 y& S$ t float f = 1.111111 11111111 11111111 1 * 2^00011110 3 W' ~' z9 n7 w) z+ _, T0 ]7 r% F. V/ S' o4 ?' n9 a! D
double: 64位 其中: 1位符号位, 11位指数, 52位尾数 , I1 c ^; }4 x8 I* J8 D5 P$ `5 t* W z9 o* n: Z8 P
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float4 i; q9 \' m5 N
+ G4 d/ `% y* Z4 m ^. L
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数5 Y7 n% O, v$ \* k7 t3 F. H
数值是一个字符的unicode编码值. 2 L) X. N, D' g; B* I/ h9 A unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩" \. G7 A" H8 B7 A( z
阿拉伯, 希伯来, ..... 8万+ 字符; E' | u/ A. }' \
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的. 3 H# P z) @, ` ASCII: 0~128& p4 k! R1 Z( u/ ?. B
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示 ) L/ i. B) c j. Q4 v8 ~/ {) \; a# ^ unicode只能够最常用的部分 1 p# [/ S! Q4 k' p% l6 ^0 W e* S) _% R/ i2 i
*最小值:0, 最大值:65535 = 2^16-1 ; k w8 s$ V! |4 Z( a7 F! F *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4 8 T x( ^- L+ p- x1 V 字面量也是整数常量! 52 48 # R5 ?! k, J/ S- ^: z- }: m1 H& l 特殊字符采用转义字符表示: # [' t. s8 G9 p3 J0 T7 I 如: '\n' '\t' '\\' '\b' '\r' ' ]. D% w7 T. F1 Z/ k' E
'\'' '\"' '\u4e2d' 7 ^. v$ t6 F N x
7 h8 o' _' m# t
char c = '\\'; 5 g- _3 K$ q- F4 ?4 X& [# U: ]1 C: U# Y8 P9 U& H3 l _) S
'X' - 'A' = N+ p7 U7 T1 l; o" s. A
'x' - 'a' = N: \6 f7 t- K2 L- S. |! F3 R
X = 'c' - 'a' + 'A' 8 H% v: s4 `! P " C, D# D3 ?3 H7 w# W3 R, J 5) boolean 布尔类型 表达: 真(true)/假(false) 2 T" j1 q5 L C; w* T9 ] 建议使用长变量名定义变量 6 r8 G* B& |6 l9 m boolean started = true;/ L6 q$ v$ X8 Z* v: t
boolean isMan = true;+ }7 h9 w9 A/ }, d4 M
isMan = false;0 E1 ?1 o) O) \; a4 I
boolean used = true;//二手的 , D5 u! h9 y% P0 J if(used){ $ y0 h( E3 ?+ _. h- N" N2 v1 ? System.out.println("打八折"); # Q6 K0 p/ P5 i/ {4 } } ; B/ P/ |' [) s5 b 不建议 定义没有意义的变量 8 _, c7 p. C5 A% E6 h8 S/ W boolean u = true;//u = you & u' C4 {% z% q" p0 b9 o boolean flag = false; 4 k4 E* e# h8 g3 [: v R, f" K7 k2 k. G/ H1 T7 b
if(flag){ 1 K+ m. B! x' |9 T System.out.println("打八折"); Q% T# H/ O/ i8 F v' \8 I5 H$ \+ M
} ; r1 ^5 w( N n( ~' N+ X
# W7 v8 H o, W0 P0 P" S+ E" m& z2 r4. 数据类型转换 - D j" x. p: ?8 ?% @1 d) ^, g char ->: }+ `$ r3 l% b# F3 @. Y( S+ I
byte -> short -> int -> long -> float -> double4 \# B+ ]' e; a! `; L0 H) n
3 ?6 r7 b1 J/ [$ ?1 F
1) 自动类型转换,正方向,小类型到大类型的转换会自动完成 * F/ o: q2 z; Z1 ~6 k! }" N 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变 + f/ |6 ]: G E! R6 [ 注意, 整数到浮点数转换会损失精确度 8 V1 ?3 n3 \% X8 f 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理 ! S' d% Z" ]- C+ H7 E* [2 h. G8 g% V1 r7 a8 P4 C4 O$ U+ v
int i = -1; 6 i2 K. @' ^3 P5 c' A long l = i; 4 _. [& M9 h5 p; y) A2 ?' `: e( Z+ ]4 Z
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行1 H/ |. S( n- h/ p6 ]
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围. |# B* Q2 A$ X# r' `
int i = 128+256;// 00000000 00000000 00000001 10000000 $ d0 o" ~, y9 n8 e3 `9 V! M6 M. m byte b = (byte)i;//-128) Q- ^" D5 C0 m; p
- E. d" @! k2 m! o* q
long l=0xf80000000L; 1 @9 W# A! d( q: v( U% i- C) D6 w) L int c = (int)l;//负数8 w: H" l4 f2 c6 J
5 O; I& @4 B# |8 H2 W l = 8;0 p: |6 ?& R$ z: Y; Z& B$ B8 t
int d = (int)l;/ ?5 Y1 B/ F9 {3 a
1 e* D# s9 `, f1 H1 m% ^! L1 y: `5 a float pi = (float)3.1415926535;//损失精度 ) H; @8 }# [# [( L8 _ $ c; b1 ^; l: i b char c = '0';4 \3 A1 U# C' K9 S3 v f7 L
char x = (char)(c+2);& [ G; G/ Y% m8 h. {8 F5 T4 S