该用户从未签到
|
1. java 变量
; @( d& {7 H Y: b2 I8 y( e 1) 变量就是自然语言中的代词
: [4 G/ Q2 i# }8 {- @2 G' j Person he; int age = 15;
* e X% ~- L( f2 Q4 A //age= 00000000 00000000 00000000 00001111
7 i4 E+ N2 t. R$ _, B System.out.println(age);//15
1 b1 P$ B6 @ G* x/ c& L 2) Java 中的变量, Java是强类型语言,
- G8 F) I3 T% C& Q2 u A 变量必须声明,并且初始化以后使用 int i=0;
8 @3 {( o) b4 d5 a6 W B 变量必须有明确的类型4 [8 K. m I! q7 A( [$ g7 q
C 变量不能重复定义
6 `3 M( R# q% ~# G 3) 变量的作用域3 F; _3 C ` x4 @0 V; y( r
a 在声明的地方开始,到块结束为止" E" n: W( d4 U& ^
b 离开变量的作用域结束,变量将回收。% n) h9 Q( y% d
# k: Y( `$ T" X: a/ v2. 进制转换基础
7 V) M$ K- i+ w- b6 E 1) 十进制 : i5 `2 G& I2 b
逢10进17 A" O7 h" f6 }7 M; U( _4 {
基数: 10
9 @/ B+ W7 @& i, s1 e# I* p8 { 权: 10^n, 10000 1000 100 10 1& Z1 A$ J' g- J3 U* s8 u
23678(10) = 2*10000+3*1000+6*100+7*10+8*1
8 [/ e/ r. E6 P$ O- {8 k = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 " O" F ~' z& U6 s) Z' ^$ S
= 23679
0 u# n4 F6 _* q/ p2 g0 i0 ^ s: X
2) 二进制
0 t+ u4 E4 d3 n 逢2进1
; ]! V: A# n5 U3 v' P 基数: 2
$ Q" ~2 D% j0 v* R, a 权: 2^n, 128 64 32 16 8 4 2 1 2 { y/ o# |& U. V9 E4 C5 e
01000001(2) = 1*64 + 1*1
) Z0 @: r2 N, m0 T, \ = 65(10)
9 @# W# d- p. h$ a D/ }5 g+ A7 A 3) 补码基础3 C4 ~3 x! K4 P; L+ y- J
-128 10000000 11111111 11111111 11111111 10000000
& k$ ^3 c q3 p8 m/ s10 2进制 ... ...
7 X( s+ ^* x+ b0 F6 [% c 8421 11110111 11111111 11111111 11111111 11110111
: f; ^" X9 A7 ?5 p% e-8 1000 11111000 11111111 11111111 11111111 11111000
; M8 y( T1 n! h7 @( {2 H-7 1001 11111001 11111111 11111111 11111111 11111001
0 Z4 D& q+ I1 W- B" b7 j, s9 Z8 t. A-6 1010 11111010 11111111 11111111 11111111 11111010
7 ]; {( N0 M( U" X6 [5 ?8 t! {-5 1011 11111011 11111111 11111111 11111111 11111011
, }( Z- |: z% g5 A, n. d. C$ L" r-4 1100 11111100 11111111 11111111 11111111 11111100
8 n* H, |4 I, { e! ^-3 1101 11111101 11111111 11111111 11111111 11111101% B7 v1 Q3 ?" W3 x- l; o& Y
-2 1110 11111110 11111111 11111111 11111111 11111110
W) S& Z' ~' T-1 1111 11111111 11111111 11111111 11111111 11111111
2 x1 q' P, D2 h4 _5 u m, }: R O& J- U 0 0000 00000000 00000000 00000000 00000000 000000008 N& i* U1 K( I" U
1 0001 00000001 00000000 00000000 00000000 00000001' z0 o9 M3 S/ P* q$ z; ]
2 0010 00000010 00000000 00000000 00000000 00000010
8 C/ [" r; }. y7 Z! f: k4 t 3 0011 00000011 00000000 00000000 00000000 000000117 R6 F( x4 v* [3 \" Z* _
4 0100 00000100 00000000 00000000 00000000 00000100
3 z7 [" b( d& |0 Z: C 5 0101 00000101 00000000 00000000 00000000 000001013 ]9 P. _4 P3 g' f3 @8 K4 O
6 0110 00000110 00000000 00000000 00000000 00000110% i, i. {& H J- ~* {: a$ D3 V
7 0111 00000111 00000000 00000000 00000000 00000111 9 t- v9 P2 B. c$ P3 l
00001000 00000000 00000000 00000000 000010002 C, c3 r( Z" ~, z i) F1 @
.... ...
0 F% @( ~, J" l( } 127 01111111 00000000 00000000 00000000 01111111
* }6 U2 ?: d/ Q; e+ F0 g6 v 补码运算:% \ Y. C' {: h) o0 P% N' O
-1 1111# f3 o" U' m- b7 Z+ i w
-1 1111. }2 @8 c1 q7 g$ E; s) s8 S5 F
*
' |7 W w. g) `8 Y# }3 v ----------
; q1 u( N6 W. L4 q 1111
7 y, _% R0 S5 F4 p+ q 1111% a# X/ {2 z8 ~ g. H
1111
+ K# O5 E7 @: [: N& ]4 p 1111
! t0 z9 x K# R0 A/ ?" N8 V. u. O 1010101
6 @/ c' I+ `$ r+ @& R6 A2 n -----------5 e# i7 Z/ Q8 r7 ]1 y
0001
* g7 }, v) @8 c8 O3 e
1 N, ], O7 n9 ^6 t6 h8 E& ]1 v o 4) A Java 内部只有二进制补码
) q# C5 O9 U" f Z* P0 ` B Java 内部采用补码运算, 自动发送上溢出和下溢出+ P7 N7 L! H: o: _# n
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出# ~- P* h% F1 x& [6 y C7 w
D 补码的负数 最高位是 1, 也称作符号位' Q I' s3 `: W3 e
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
+ N. m+ z- a' C& y' l$ A. W 16进制8 R5 [* _$ @# I) P7 H/ Q" [0 @
逢16进1
4 }6 Z, W) S# m8 n, ^0 n 基数: 169 n7 K& S& r Y9 r* \3 C! `5 m
权: 16^n, 256 16 1
3 ?# d: i. ~: F- b* R% L 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f) ?) { H$ m o- i3 x0 `1 |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" v4 c7 o- ~" K6 N! N
8 U: n( s) N; t: O7 W# p 41(16) = 4*16 + 1*1
* J$ E! i6 X! i+ a! g = 65(10)# a& w' v/ a; q: e4 E
= 0100 0001(2), v- p- w2 Z" A+ {
8421 8421# [% h$ a1 R0 g8 [. ?/ e
4 1 (16)
8 E1 [5 Y# j# }% R7 M' a7 ^) g4 s2 D5 O3 u4 L
128 64 32 16 8 4 2 1 9 e3 V& {+ o' k! n
0 1 0 0 0 0 0 1
! ^/ T. {, _2 K/ b 练习:转换以下十进制为二进制 192(10) 137(10) 145(10) 5 M6 a8 `! {" _% h. M; N
192(10) = 1100 0000 (2)
( S. E' `4 k1 J( S+ d* B c 0 (16)$ v8 U$ H( T3 F& N7 }+ X1 m
-8(10) = fffffff8(16)
k0 k* s. T3 o H) j9 h 进制总结:) b. h* `" a2 m- b8 k$ Q8 V
计算机内存只有 二进制补码
7 Z! y) R7 C' Y( H+ ?9 ~ d0 P 默认输出, 按照人习惯输出10机制结果
" c' t7 T0 N# f G8 C 16进制是, 二进制的简写, 16进制本质就是2进制+ e! i+ f/ |. Y
16进制存在的价值: 方便书写2进制!" Z4 X! }4 E6 p L( W
* r' l/ v Q8 m. }+ Y9 S
3. Java 数据类型: 分为引用类型和基本数据类型
2 f$ g3 x g8 C1 X" _( q 1) 基本数据类型: 8种. W# u% A H3 g9 @: m7 I
byte, short, int, long( i* A2 F1 I* f5 d; g) y
float, double
' n: S; Y7 a3 P' L2 } char* }) Q+ a1 a# ~
boolean
7 `$ s7 l5 l! G) ]4 s) L 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
/ p6 b) w$ p! N1 i byte 8位补码 最大值 0x7f 127 最小值 0x80 -1286 f3 `$ }$ C2 k' ?, L/ s/ h# v
short 16位有符号数 0x7fff 32767 0x8000 -32768
8 n" E" H+ T8 C int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G + [# |. J) S9 n" I) Q
long 64位 ....! K4 x7 ] U S% s* @
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给6 k* G% C2 ?' B
小类型直接赋值.
3 @% p. c) A1 }2 [1 @4 } 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
' X. J s; Q' c& t. G java 底层byte,short 按照32位计算
8 V/ o( n/ `, k; u' A: r( V/ O. p; }; c3 ~5 b6 c X; ^ A; m
long 类型的字面量使用"L","l" 后缀
3 N$ [9 s9 p ?" O' T' d1 k
8 z6 A8 {5 a6 v* N# A 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)& f, C: v: o+ o( S: {
浮点数原理: 10进制浮点数(科学计数法)原理" y- W& I. X0 S+ p( B% U# d& j1 Z
2356189. = 2.356189 * 10^6+ D5 B8 }! q; I3 Z; g4 ?8 s
概念: 尾数: 2.356189
( _5 M( X8 h$ {: ?: G 指数: 60 D/ S" _. o& w; Y5 S J+ r8 E
基数: 10
/ g6 {% w2 r- |! X& x pi = 3.14
* U/ s* c. a: z- r3 R6 o 3.1415926535897932384626433
( O# c* z! z1 t% N, `5 j r+ j3 A4 W, K, H
6 F n" y. E9 l) N0 L 二进制浮点数:( S7 {+ c, ~9 |( ?6 F: \( e
101001010101. = 1.01001010101 * 2^1011
( z1 s. a% f, L9 Y5 f0 o* { 概念: 尾数: 1.01001010101
8 w5 d6 B6 h/ Y1 p 指数: 10110 Y, n- r! p( ?
基数: 2
0 s( B+ Y. g9 {" o& B* }6 s& ?$ Y0 [2 R L6 n# o/ V
float: 32位 其中: 1位符号位, 8位指数, 23位尾数
4 }. u0 s, k7 l. h1 d8 H" g& I; X3 N4 u/ B5 }
精度: 23 位
, ^3 r- }+ q, R) ?5 D3 y int max = 01111111 11111111 11111111 11111111& N( O, l6 [2 c k4 |) W$ R$ K
float f = 1.111111 11111111 11111111 1 * 2^000111107 M+ E9 S; d& e. M
8 h# f/ [& F; t# T5 L' u3 @
double: 64位 其中: 1位符号位, 11位指数, 52位尾数
$ J: y; W d* s# f- }3 ~- G2 C$ q8 G
& K+ s2 x! w) @# P, \ 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
# X& J9 U6 H2 c& z8 }5 l3 W4 g; {$ Z6 d! W- b4 A# B' `
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
* A* A, K8 w+ Q% R: S0 B 数值是一个字符的unicode编码值. * K5 G6 ?: i, d" X( ]7 U
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
' |3 B, r4 N4 Z. t# n: M6 k 阿拉伯, 希伯来, ..... 8万+ 字符
; s- k. ~/ `* e! Y7 C6 m- o 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.6 p: k- F9 ~" t( {" R( X$ C
ASCII: 0~128. a) l0 _+ y: e# P3 W: u- W
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
& W& `( m2 K$ D2 o unicode只能够最常用的部分
/ F: L# Q9 I' Q* `* F$ A9 q. Y
1 l7 R. a/ F% S. R/ l& E *最小值:0, 最大值:65535 = 2^16-1* B* ?, t. d8 B8 J2 r
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
& |, Q4 U7 ^& R: a" [ 字面量也是整数常量! 52 48 ( W! _5 L4 y- q& w* P' N; x: @7 r
特殊字符采用转义字符表示:
+ ]7 p% i6 E7 S% P) s9 F 如: '\n' '\t' '\\' '\b' '\r' ( b8 j# B. s e. i' r/ f8 G
'\'' '\"' '\u4e2d'
" \. ^$ w! D* L4 w3 y
7 f) D# l6 j j* ^$ i char c = '\\';
2 ?: |0 g5 } e8 @$ z$ K2 b% n$ T) ]1 \: ?
'X' - 'A' = N
[3 [) D3 K, [; M5 m& o) Z- M& c% k 'x' - 'a' = N
% J9 s% f, O2 r: f8 y! j: Y7 j X = 'c' - 'a' + 'A'( x/ _$ k3 \5 V
) @& ^. ]# ?; N& C3 e/ I
5) boolean 布尔类型 表达: 真(true)/假(false)
) x/ J% }$ A5 i7 L D$ p$ R' D# N* g 建议使用长变量名定义变量
0 I, V' g7 P3 K3 O1 e2 m. N boolean started = true;
) b# e2 N# R; h& Y& Z3 ? boolean isMan = true;
4 E2 w: Y3 F) Q3 S/ U2 R isMan = false;
- w1 D8 m- T0 `( E5 Z) |) w boolean used = true;//二手的. M' X8 L# [; l7 e& Z
if(used){( \- a" X/ R2 G# T
System.out.println("打八折"); " r8 s" J' D" |4 B8 G$ ]% @
}
% w3 W, o9 k3 r9 ^7 [* e/ w 不建议 定义没有意义的变量
5 s2 d, {# q: _) L boolean u = true;//u = you n, q$ J' n+ f2 P
boolean flag = false;9 z6 \4 T" Y# k
% U/ {/ N: d6 U/ r
if(flag){
3 L3 @: f; |- R! p# o7 Z/ S System.out.println("打八折");
; H( y% R0 h1 P5 j } / D4 s6 h! Q+ @6 Z
8 |" X7 j3 b' q- F9 q( b
4. 数据类型转换
) S' C/ p9 {! i9 b, [ ?0 T5 m" I* U char ->
1 a5 G E; u, [7 D byte -> short -> int -> long -> float -> double, S" N( w1 Y6 }* F% w
! {! T+ Q, m3 z# x1 ] 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
+ ? y: z* M9 Y 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
) t. |5 q$ O H( t! n 注意, 整数到浮点数转换会损失精确度9 D: f# W$ U5 i1 B* T
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
( O" Q' f5 r& P/ v% k2 O9 i5 j% U0 k
int i = -1;
e$ S1 z2 O. ]7 b7 W" ^6 k1 F& E long l = i;5 ]7 w9 l, g! @9 z; N7 c8 b: c( G
- T8 k' D+ s3 @% W7 k1 d" S
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行0 w$ \0 s: U, _# ]4 Q
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围7 s! I* d& X- G
int i = 128+256;// 00000000 00000000 00000001 10000000 1 B5 A0 f0 e8 s8 w
byte b = (byte)i;//-1282 D# D4 y) x+ y& _
' t! z! a0 `8 M3 N/ K h0 v' T long l=0xf80000000L;
/ H j2 X( p: g+ k% X8 r int c = (int)l;//负数
$ W: W0 E# a9 Q8 v. _0 G; ]8 C& j7 W
l = 8;6 _5 q) M9 Q; d/ `& o" }( `
int d = (int)l;
+ l& }4 s$ G% p/ q: V7 k9 Q | x; `% X' A7 m- O
float pi = (float)3.1415926535;//损失精度! A+ V6 w, Y' z/ T3 l; x) q
+ B- q2 X1 [$ k0 T5 o' [3 u
char c = '0';8 ~% H" u7 |7 C8 h# D
char x = (char)(c+2);+ _ @; I' F8 P; S
5 T& D% S" d Z& \+ C" Z |
|