该用户从未签到
|
1. java 变量
: w2 @4 @- \7 t' b" u 1) 变量就是自然语言中的代词
3 M* F" f9 d( q4 s/ @6 A; y- k( p Person he; int age = 15; , `. v" A, t1 X* I; M: J- X. `; u
//age= 00000000 00000000 00000000 00001111& |0 w B3 z1 N% e3 W
System.out.println(age);//152 [% x7 p- U; G1 b$ C
2) Java 中的变量, Java是强类型语言,
5 a" q2 ]# Z9 a5 ~2 ` A 变量必须声明,并且初始化以后使用 int i=0;
0 M+ x" ~, V& c" y3 }; m B 变量必须有明确的类型! Z& |! Y, r. j& _( ^% W9 M
C 变量不能重复定义. Y/ O! F8 {: [
3) 变量的作用域8 C# l4 a+ i: W3 v
a 在声明的地方开始,到块结束为止' W$ v5 t C0 G$ G
b 离开变量的作用域结束,变量将回收。1 o2 x& `1 X6 v2 y- n
( r. s1 v( f" m8 N6 O$ @; Z8 ~2. 进制转换基础$ ]4 I: u7 l) l6 s4 H6 ^0 t# D; N8 s
1) 十进制
( Z W" c0 m8 p- q 逢10进1
) y) d2 H9 X5 i9 w/ f 基数: 10
( y# `' M9 _& P3 z0 U. ? 权: 10^n, 10000 1000 100 10 15 c- _+ e8 q; L/ L, m5 m' B. _4 a
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 , W0 Y; @4 q3 @/ B8 V& J/ H& K
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 " w; ]- O( R. p9 W3 S B: j
= 236791 j3 G) j( K# g$ p/ M `4 [
6 j: a' J6 w# a* g) i6 l" ?
2) 二进制
* b7 P$ L$ S; U# {8 o1 o) q 逢2进1
0 D. R2 ^6 a. Z& s 基数: 2. y( |( H& Y3 |' G( O' w) N
权: 2^n, 128 64 32 16 8 4 2 1 3 J/ t+ u0 w1 t# U) u0 ^
01000001(2) = 1*64 + 1*1
T; n- M c" x* \% Y/ e& Z = 65(10)
! I- Y4 a6 [! f, i 3) 补码基础
+ z2 M6 ^, T; v -128 10000000 11111111 11111111 11111111 10000000
( x7 A5 f$ Y( M" v+ N/ \- a: l10 2进制 ... ...
2 M$ x' K9 o" R& d' `1 f f/ ? 8421 11110111 11111111 11111111 11111111 111101117 ^2 V4 e. L- p! M! V
-8 1000 11111000 11111111 11111111 11111111 11111000 + b1 I4 L" b% v/ C- A; ]+ l
-7 1001 11111001 11111111 11111111 11111111 11111001
* N; J `! J3 q/ V0 z-6 1010 11111010 11111111 11111111 11111111 111110106 H M! ]) D7 t
-5 1011 11111011 11111111 11111111 11111111 11111011. c" K$ k! T* |3 ~4 u
-4 1100 11111100 11111111 11111111 11111111 11111100
5 }) R Q5 F; h' j; Z9 Q7 T-3 1101 11111101 11111111 11111111 11111111 11111101
* V! V) Y \8 P+ C$ [6 \ @-2 1110 11111110 11111111 11111111 11111111 11111110
: X6 B/ V) ^/ w. u, g0 M-1 1111 11111111 11111111 11111111 11111111 11111111* J# A9 q) W6 O7 l+ O
0 0000 00000000 00000000 00000000 00000000 00000000) f6 P% _$ p! [# f; y1 ~
1 0001 00000001 00000000 00000000 00000000 00000001! q+ ]1 F5 c" Y" f! p- P4 q) M
2 0010 00000010 00000000 00000000 00000000 00000010
9 _8 h' X. \( R+ t/ z! I. W% ? 3 0011 00000011 00000000 00000000 00000000 000000119 [3 U2 p5 z/ Y' A, l6 @/ k, z% r
4 0100 00000100 00000000 00000000 00000000 00000100. l5 ?" K; F4 `* E5 J& s
5 0101 00000101 00000000 00000000 00000000 000001018 e, w# E( ^8 g$ K
6 0110 00000110 00000000 00000000 00000000 00000110
* S* v- K" u7 o 7 0111 00000111 00000000 00000000 00000000 00000111 & W; R2 }; l$ h4 b
00001000 00000000 00000000 00000000 00001000
N1 }' N+ ]# K3 ` .... ...! r& o, K+ |# O5 X# e
127 01111111 00000000 00000000 00000000 01111111
( i+ h5 _: G! a# T6 r0 o# h 补码运算: T: N& x! F; A& H5 J5 y4 l
-1 11118 ]& B: g" f- ?- i/ ~
-1 1111$ f7 l9 i- r" V [4 Y3 B
* ; R- D- {+ D \! H: R
----------
! q3 R. M2 `6 b# V/ [ 1111; T; `+ h* z( {! t
1111
' L2 F% i: H7 ^$ ~& Y- W9 Y3 V 1111# b7 e& ~+ L H1 U E8 {
1111
$ ]) N6 y1 E+ M" S 1010101
. ], G [# ?3 O% o- b -----------
/ t2 B2 \$ J7 M 0001
* V) x% w! ^' ?' w& ]* O5 @. ]% s
4 `! z% ]( |& W `# u 4) A Java 内部只有二进制补码" u3 O. m* o+ ^: x1 h
B Java 内部采用补码运算, 自动发送上溢出和下溢出
) T+ c0 c9 \: b6 f9 T e# r C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出6 [% ?( z+ X3 p: E, V; ]# r3 L- ]0 y
D 补码的负数 最高位是 1, 也称作符号位
$ E6 ^8 U, p) x5 i0 ^% V 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
! f' d) c- f, X9 X7 J6 ?0 o 16进制/ B: ^4 l. @3 D! B
逢16进1+ n8 O! i. }# d! `- u4 m8 ~8 e
基数: 16
8 y0 Y9 j/ | ~- }* n4 A 权: 16^n, 256 16 1 " g0 b: g- Y# b3 u
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
4 w/ y% B |. g 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 156 }) G* m, X }8 X D
! [" D! W/ {8 p2 u 41(16) = 4*16 + 1*1
& Y9 H m0 z7 c- }; I0 ~! I = 65(10)
0 r* z) `/ N( F* `7 c+ _1 t1 j8 J = 0100 0001(2)7 N; r0 X& k& {$ }9 e# u
8421 8421- k3 K* u# k: R5 c b2 B Z
4 1 (16)
7 ~* \& n7 y! }! X# N2 d- T V A# w8 Y. L* W
128 64 32 16 8 4 2 1 0 k! U1 t+ E& S
0 1 0 0 0 0 0 1" R" e1 \. A3 [8 t' a6 A
练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
, S+ i. Q5 Q4 v; m3 R9 T 192(10) = 1100 0000 (2)
4 }1 R7 n$ ]: ?1 w1 ^. g9 e5 x c 0 (16)
+ g8 W6 m' b5 u" {+ n6 M8 B& D# V4 V0 d -8(10) = fffffff8(16)
5 P" M- x; K/ D( U* n# g" e 进制总结:
- j! C0 @9 F: j0 h5 l+ s 计算机内存只有 二进制补码
# p7 }2 a# K/ ?. v0 }, i0 k& D2 p0 ` 默认输出, 按照人习惯输出10机制结果
1 A) ]; R/ |% {; H+ G& d9 p 16进制是, 二进制的简写, 16进制本质就是2进制# m7 j; H' Y4 C. e Y. C
16进制存在的价值: 方便书写2进制!. W/ W8 |' R/ A! [3 ]# l' w
, e; d1 r5 q: ~3 E
3. Java 数据类型: 分为引用类型和基本数据类型) u3 b$ v. E4 q
1) 基本数据类型: 8种# |+ n1 w- k( a$ S
byte, short, int, long0 H. o# Z+ K7 a( g" q" o' @
float, double
6 I- g0 \0 d3 U) h7 e- \9 N char
; P0 E5 n4 _, n/ `" q boolean- ~9 p$ L% s7 U5 h2 B+ K, x+ [# F! w
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数; M7 F- P* ?/ r" C
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
! X; D5 I5 k7 W# i+ @/ M short 16位有符号数 0x7fff 32767 0x8000 -32768
. w4 B3 B ~ x- K _' B int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G ' [9 q: Q4 Z$ {+ E4 b' h
long 64位 ....5 ^8 d+ D7 Z; m, O
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
! g! o1 D3 p1 r; s% X2 t 小类型直接赋值.+ C! ^) n6 o0 G: G
使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
5 C$ ~ p; H* n& s D/ L java 底层byte,short 按照32位计算. ?! M+ q) \8 W# q
+ h9 _8 g: E5 Z% d long 类型的字面量使用"L","l" 后缀8 G: ]9 e( ~: R4 L3 e- j m$ B; r" J
) A9 |2 R- U0 X. `& y4 L6 K$ ? 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)/ s# [* \: ~+ \) _. T
浮点数原理: 10进制浮点数(科学计数法)原理. Y# C- @6 p& N5 t4 {
2356189. = 2.356189 * 10^6
, C9 l7 D3 t! U- G ?% }8 { 概念: 尾数: 2.356189
8 b" j2 i( k% P3 N: j; c7 } 指数: 6! z0 N3 i3 a0 C7 G; C, v k
基数: 10) {& ^; E8 t4 s7 ~6 f! H+ X
pi = 3.14
( H# H% k* d; B/ p E$ c% M; f/ Y 3.14159265358979323846264330 J4 Q4 v; G! D; T& `, z
& V0 |" V0 y/ m1 @ U( b f& S9 {% x
二进制浮点数:
J x* z! Z1 r) a7 j; j' Q! j 101001010101. = 1.01001010101 * 2^1011& O8 x8 o+ P) ]+ U# U
概念: 尾数: 1.01001010101; c& W/ O6 z( b% z1 Q
指数: 1011
+ h) Q# u7 p+ J# \( {9 ^) j1 v 基数: 28 H3 e. g. @" q0 M; b0 _
8 d; J: C# o; }$ a/ {" U5 z- W float: 32位 其中: 1位符号位, 8位指数, 23位尾数0 u' f( D6 g; ? D5 O$ V
3 ]* a* D" _7 I& q
精度: 23 位
" y9 y* T+ d3 D int max = 01111111 11111111 11111111 11111111; p6 a% [2 A& u1 Z9 A: d0 b1 @# B
float f = 1.111111 11111111 11111111 1 * 2^00011110
% r; h/ G, y! J$ C: A3 w( E- b
- @5 V8 e2 h. m F3 s double: 64位 其中: 1位符号位, 11位指数, 52位尾数
* N- h1 x6 G; t5 g: T' r% G: J7 ^3 h- ~) o; j& x- ] S `; C4 ?
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float" F' [6 _- B9 f4 x) t
4 W0 o) }: S& U+ ~1 Z' c% }; V: f& K, V
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数* `1 z) u( z$ W; r
数值是一个字符的unicode编码值.
2 _% W% X( y! O* T0 k, x# S1 S unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
0 x4 f4 e0 G8 |9 Z a. c* x5 C 阿拉伯, 希伯来, ..... 8万+ 字符) s5 F- m: q; Y: J! m- l; E$ S
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
4 s2 w! x5 M- P7 g) ^ ASCII: 0~128" J- B4 l, j3 n* k# }! \
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
' [7 K( x x+ p unicode只能够最常用的部分
3 L1 i E5 H, k2 Y/ w& R
/ r h% V+ a, d- m' {* V1 L* u *最小值:0, 最大值:65535 = 2^16-1
& e6 l7 f; A0 G. h* _( {" R9 L *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4 \- y% |4 |* ]- q* V
字面量也是整数常量! 52 48 U7 H. j {' E& \
特殊字符采用转义字符表示:
- w' u! P" Y9 f, w4 Y& m( s 如: '\n' '\t' '\\' '\b' '\r' ( c: [2 W$ d: y' j5 i1 [# J
'\'' '\"' '\u4e2d'
+ C! H; Z1 a0 O: I A
0 s, U" ]2 O5 E! {9 b char c = '\\';, U- W3 g6 P+ I* ^
5 D2 O4 _! U6 V( c
'X' - 'A' = N
+ O3 V1 H+ t+ F4 z. {( z3 O1 V 'x' - 'a' = N& g- _# y- z5 J6 a% e6 k7 d
X = 'c' - 'a' + 'A'" Z/ D, G* \, r* T5 \: I" \
& L2 h# @9 }4 g7 n 5) boolean 布尔类型 表达: 真(true)/假(false)
. ~7 {% {( K% {4 I; E 建议使用长变量名定义变量
/ z5 x& R9 Z/ t8 L1 i9 L( U; ? boolean started = true;
5 ~! L% J% E/ w; \3 c9 J boolean isMan = true;) b6 f# D! L; k! q$ o, g: T
isMan = false;+ t0 a6 B6 r9 u- f' }7 q6 k# _: `
boolean used = true;//二手的, |+ d3 ?4 C3 h8 [8 h3 r& S# h
if(used){
4 d/ r0 M- U; o+ V8 P, _ System.out.println("打八折"); ( t% _' A" @& h) j
}( G: H% W( L8 M! Y2 A' x
不建议 定义没有意义的变量& G5 ~- Q; d9 q3 }8 Q$ m
boolean u = true;//u = you7 f6 e& }6 n$ \) @! G2 Q
boolean flag = false;( \6 D0 r9 E7 |. \' ]* M
. U" }( f5 H7 p! [& U
if(flag){4 E! \! u5 T6 z, X& E
System.out.println("打八折"); ) n8 f( q! N! |+ C" t
} + m0 n5 R; N4 f1 V7 H
. w+ N) X; W( C9 E; G R7 n& N4. 数据类型转换
8 U7 p, |: |8 o' V char ->
6 G( q- C" F% @) j% u+ K8 T byte -> short -> int -> long -> float -> double
3 F: H D1 n8 m, k/ r7 t% N$ B5 P, C" _1 u2 h
1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
, s) [8 Q3 _/ C5 T: G. s$ r 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
+ K4 A* S+ Y1 ?$ {! s 注意, 整数到浮点数转换会损失精确度1 J+ q: Q$ `3 I6 ~
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理4 R7 \# j9 |. ^$ x p
' R9 L# ]( F( Z+ n8 D k int i = -1;' b& k' P- o1 p) `' R
long l = i;
! U& D$ R0 o* @ r+ A9 i$ P5 Y; a
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行- s& H! n" B5 a* R& J) o8 K! G
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围7 P5 |7 v# r; a
int i = 128+256;// 00000000 00000000 00000001 10000000 % q+ x2 o! V. O% M0 A6 V7 l: x; Z
byte b = (byte)i;//-128
* J d) G* G+ G U+ {" t% U
6 x4 S! U0 M* ^8 p8 I! ^- n- ^ long l=0xf80000000L;
- x/ S* @4 m: l8 H. r, E0 F int c = (int)l;//负数
/ U4 t3 p- n( z2 K1 p# l5 A# ]5 q7 t
l = 8;
7 o# o: |( y/ o! v int d = (int)l;
- Q; d8 g1 {( ] X! F; W' A0 e/ Z
$ Y( A0 I p4 H! P+ S1 X float pi = (float)3.1415926535;//损失精度
9 s* c, A; u5 ^5 u7 ?8 O/ ?2 c) `" D: P0 ]. D, ?
char c = '0';
4 q- Q. _9 o) {- W! k; X* K4 y& n char x = (char)(c+2);/ u) R% L( c& f( T+ ~8 S& x, D
% N) n5 Y5 w. w( {/ @ |
|