该用户从未签到
|
1. java 变量
6 C% J9 w, Z' s 1) 变量就是自然语言中的代词- \+ @! h8 ]* H; N# R
Person he; int age = 15;
0 A# @* j: z& @7 ]; d0 I+ M# r //age= 00000000 00000000 00000000 00001111
6 ?7 u) ~$ w0 x" X6 s& K/ } _( v* V System.out.println(age);//153 [3 t4 N* W4 ]0 A& V3 z: \4 u
2) Java 中的变量, Java是强类型语言,
% e$ v! n8 Z+ N1 `" o5 T: [ A 变量必须声明,并且初始化以后使用 int i=0;
?6 J. A7 E0 Y B 变量必须有明确的类型
( y' E- F- s- f/ f C 变量不能重复定义3 m5 `+ P. }% |) L2 P7 z; g/ z8 i# J- ~
3) 变量的作用域" |+ E$ r! M, D) u; _% L
a 在声明的地方开始,到块结束为止& O" b- }6 p; `6 G
b 离开变量的作用域结束,变量将回收。0 ?' o" j$ j/ s& a
3 x, I* M9 @# W9 o2. 进制转换基础$ ?# n6 }% f [, p$ {1 l, ~
1) 十进制 8 O$ G9 Q6 g$ Z' S, M9 L3 k
逢10进1$ e( o3 A4 s. `+ q
基数: 10
6 @/ }/ K3 _9 g) X5 {% ? 权: 10^n, 10000 1000 100 10 1
- d) w8 t4 n4 f9 s2 i- f 23678(10) = 2*10000+3*1000+6*100+7*10+8*1 / g0 e$ v: |4 C$ w
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
8 t4 P* `' ^* c6 F = 23679) H: u% C6 y3 ]
: E# a7 j1 }' H5 e% d$ F8 L
2) 二进制$ J2 |/ t3 s2 j; P2 U# p6 Z
逢2进1
; Z& A% v' x' u6 W* P) w. ] 基数: 2
" a. V% O' N4 s! \( m/ W; G 权: 2^n, 128 64 32 16 8 4 2 1
B5 b0 |/ e4 f" n% z 01000001(2) = 1*64 + 1*1
+ N T7 e0 Q) r- i$ \ = 65(10)
; z' b) T5 S6 j& M c$ u) A 3) 补码基础+ l$ q* d( T& }( M, B: _% {
-128 10000000 11111111 11111111 11111111 10000000; `' d9 O: j. {/ N @& A" A% v# R
10 2进制 ... ...
% Q0 Y" V) ]0 M 8421 11110111 11111111 11111111 11111111 11110111
l/ ?+ K( _% v1 t-8 1000 11111000 11111111 11111111 11111111 11111000
]6 ?! t) Q. ?6 u( t8 E8 a9 w-7 1001 11111001 11111111 11111111 11111111 11111001* ^$ S0 F; d) y
-6 1010 11111010 11111111 11111111 11111111 11111010
( o$ z9 ^7 O) D# v" O-5 1011 11111011 11111111 11111111 11111111 11111011- ~0 r/ e# z F# o" h
-4 1100 11111100 11111111 11111111 11111111 11111100' M! P; a4 f8 B' B4 h
-3 1101 11111101 11111111 11111111 11111111 11111101
! i9 u$ p9 B2 j# {-2 1110 11111110 11111111 11111111 11111111 11111110
4 f0 H) R1 k8 A, n-1 1111 11111111 11111111 11111111 11111111 11111111! f+ p3 [* w# I9 a0 a) b5 U: r4 \# m4 r
0 0000 00000000 00000000 00000000 00000000 00000000
" j+ g. H4 m, n' {( x 1 0001 00000001 00000000 00000000 00000000 00000001, `2 g* z# f6 y* g$ E- c3 @
2 0010 00000010 00000000 00000000 00000000 00000010
" B! `1 ?% s- ?$ c5 [1 S& `4 R 3 0011 00000011 00000000 00000000 00000000 00000011
: p+ ]# t9 a2 ?& ~0 g) G 4 0100 00000100 00000000 00000000 00000000 000001002 S0 K& x ^9 v. `7 z+ j
5 0101 00000101 00000000 00000000 00000000 00000101* k2 m. t/ L( {6 m8 J2 D; Q
6 0110 00000110 00000000 00000000 00000000 00000110$ e& L( L% f5 `0 f1 I, W9 B' O3 x4 ?
7 0111 00000111 00000000 00000000 00000000 00000111 6 `, e% a' M: I6 ?& U5 p$ S; D
00001000 00000000 00000000 00000000 00001000$ Y; d1 s% y: l5 U- A/ h
.... ...& [* c7 E, L) d
127 01111111 00000000 00000000 00000000 01111111
$ O8 ^+ R7 s6 @' O1 P5 R6 k 补码运算:
8 F: r @! q& S- C# P. J -1 1111
; I6 P7 v2 q8 P) I0 b5 I$ t7 W -1 1111
9 C, v0 L8 x/ H8 N/ n/ F7 w' J * 8 {( B4 ] w9 M: L p% Y* _
----------
/ f9 i ~* o/ q( w2 C# c2 [6 r3 a 1111; L6 \* l. [3 @+ P! h3 g
11118 M! s2 W% q' V6 B+ a' d
1111
+ Z2 p0 t) `" n& B3 y 1111
; e' n/ A( T' |8 u y8 z; V 1010101. Z b7 w) h/ f* ]3 a
-----------
1 o2 u1 [2 e" C 0001
8 e5 p# q* U8 @. a6 S6 B* ~; W6 E$ N& |* Q! t
4) A Java 内部只有二进制补码% V9 G% V# h" C/ M
B Java 内部采用补码运算, 自动发送上溢出和下溢出
3 f. `$ x' q7 b1 U C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出+ l( S+ y: Y! f, q7 ^+ w
D 补码的负数 最高位是 1, 也称作符号位
1 j. w* n Y2 r# h 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据+ R0 t% b/ J- G. L
16进制( |& r0 c5 J0 _2 r g
逢16进1; a+ o \% K- s) L1 ^
基数: 164 w4 w5 e# }" m1 v6 f8 @1 c
权: 16^n, 256 16 1 0 Z6 J6 g* x3 H5 s
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f# r; }9 M# S5 ~1 N. s
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
. }5 ~* ?+ ^) F/ ~5 u2 e9 Q 5 A" C$ a B3 r6 P; a
41(16) = 4*16 + 1*1
6 C9 W% K+ F0 B4 } }: s P = 65(10)
3 ~' \: I) Q7 ]9 a = 0100 0001(2)
1 n! q2 F- ]3 ~8 m7 y0 G 8421 8421
5 M7 E% }4 L# s 4 1 (16)
9 E3 K' e/ {) w: e0 H& y. J% g2 G u. A }* O
128 64 32 16 8 4 2 1
% G8 S7 N) b2 [' o6 E! r 0 1 0 0 0 0 0 1
! |; Z. T5 l5 O8 O- f( ~! o* c 练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
( T ^6 _4 b) M. y6 u 192(10) = 1100 0000 (2)4 X9 j' g. J( y ~, Q
c 0 (16)
: J! k+ x7 z! x0 ^* A -8(10) = fffffff8(16)
( `2 p* V8 r6 k7 V) S# G$ u 进制总结:/ G. F V; o- I i4 r
计算机内存只有 二进制补码: w$ |. Y% _# l8 W' |
默认输出, 按照人习惯输出10机制结果
- W- F- [/ g* b$ ?& @ 16进制是, 二进制的简写, 16进制本质就是2进制
- r: g" V# D3 f* u+ T3 C( R1 v% k 16进制存在的价值: 方便书写2进制!
% I- \# k A- I c+ U, k( V- @
3. Java 数据类型: 分为引用类型和基本数据类型
! t6 e% v; O6 H0 ~; e" F3 O* i: G 1) 基本数据类型: 8种" S( A: d8 ~2 _5 s0 H
byte, short, int, long. q' {% h" ], Y
float, double
7 ?# o7 n: B5 L& ? char
" T; _' C# L& [* e1 Z, `2 i2 a boolean' w6 A/ \0 H* _) y" I' w
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数( l9 I& b) j+ M: Y& m3 e0 r
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128" A( G, h0 T6 n) J
short 16位有符号数 0x7fff 32767 0x8000 -327684 i9 t" @% {1 r' ?' V+ U/ i; v
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G 1 x9 w+ A! |* g( g1 W
long 64位 ....# K' ^! C+ F( h* i1 C
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
6 e$ H8 x5 k0 n 小类型直接赋值.
' {1 }+ R2 Z1 y! E 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算2 j" `+ i& g- b- a9 j" i
java 底层byte,short 按照32位计算
! O2 {, R( Q; U- M" E& ~8 `7 y% t) J2 \ y
long 类型的字面量使用"L","l" 后缀- J. y# g3 a( B$ z+ w! s5 e
+ ?: N Q2 v2 _( Z2 R+ w3 Y" j 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)$ w2 f1 T! F4 s; M2 V3 E& D0 z* F
浮点数原理: 10进制浮点数(科学计数法)原理
5 k/ [$ u/ M1 E/ L. r/ h 2356189. = 2.356189 * 10^69 J* Y3 A# \9 M; z% c( ~) @/ S
概念: 尾数: 2.356189 + _( U+ I% s+ Q7 |. o, X2 V
指数: 6/ ]4 w0 ?( G0 I7 A7 X6 @. R( g
基数: 10
' r; o& M; M: l: k# j( j4 i pi = 3.140 k% d5 q9 h4 l
3.1415926535897932384626433
4 j% } L0 f2 K+ @6 T' P) w% C
; s$ t; l( Z4 {* C$ ^5 { 二进制浮点数:
) y0 d4 b: P- P! q* s1 Q* M' N- T 101001010101. = 1.01001010101 * 2^1011
) P" {3 I% ^# \* E6 O( b0 r 概念: 尾数: 1.01001010101
8 b% a! w4 M z& M 指数: 10117 @" A! l- r6 D9 H2 d
基数: 2
: V) T0 J8 R* j5 H
P% k8 g) a; {) @7 d float: 32位 其中: 1位符号位, 8位指数, 23位尾数
+ ^# b, l8 ?6 ^/ d" b F5 k; c: f1 i) @8 C
精度: 23 位. }2 a P- d+ ~. h5 J$ u
int max = 01111111 11111111 11111111 11111111
0 m, z8 m3 n1 a0 ~1 B- M float f = 1.111111 11111111 11111111 1 * 2^00011110
8 Z, C/ K! ]* y# T$ Q2 f6 c0 [! d2 V( E5 X( }0 ?8 y
double: 64位 其中: 1位符号位, 11位指数, 52位尾数1 t- \/ R3 G5 e
6 C; h# o. e6 O) J 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
6 y- S# y6 n: C
$ N0 U1 b# G& h5 g$ u4 l( g. o 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数4 R9 C. F: F# [9 S/ C- I0 a) U
数值是一个字符的unicode编码值.
- _- v4 |, @# a- r7 ?' q unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩9 y& ]0 E4 |6 c
阿拉伯, 希伯来, ..... 8万+ 字符5 y2 p' @& Y6 x3 u
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
- l u8 k' ]5 y8 W3 k+ M ASCII: 0~1283 F9 W; y7 M' {) v' z( S
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示; U) `5 x. G1 P6 l3 {4 W8 P
unicode只能够最常用的部分) J. |. M7 s6 Y& h1 v
" H& V: C1 o. S2 I% O1 h
*最小值:0, 最大值:65535 = 2^16-1
/ `$ E: i" t. [1 h4 |2 D: a2 U *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4* o9 a1 x$ q1 |% z V2 J
字面量也是整数常量! 52 48 ; P* \$ K3 k# l1 }
特殊字符采用转义字符表示:+ a- H/ b2 S% c8 p
如: '\n' '\t' '\\' '\b' '\r'
' X! t j8 z% |: n' p '\'' '\"' '\u4e2d' 3 p+ y" I8 H/ ]+ G% C3 B/ a
& P7 R r* W. y$ W
char c = '\\';1 {) i$ L; h8 v; P) \
8 W5 {& f) a9 [9 M( I 'X' - 'A' = N1 Z6 {4 a8 P m: A. K" T/ S# [
'x' - 'a' = N
" P4 E! B# H( P8 R X = 'c' - 'a' + 'A'
" @7 B |& l$ q$ \" D" l1 |7 X5 N6 I& `* q/ z4 i8 q! u2 a
5) boolean 布尔类型 表达: 真(true)/假(false)
. _0 i T7 g. {- V; e 建议使用长变量名定义变量
2 S+ l! Y: a) g L7 F8 ^ boolean started = true;
/ a$ B: Y- ]' w, v boolean isMan = true;+ F- S. i) D! A. A. U
isMan = false;# { Y" h0 d6 [% d1 `7 F1 h- G
boolean used = true;//二手的8 J: a/ c. _/ V2 Y+ x' x
if(used){
4 z/ q r; b3 H0 ^6 S System.out.println("打八折"); ! Q3 Y9 o4 Z) o. c$ H3 U
}
. ?5 H, G, ?$ O: o 不建议 定义没有意义的变量
/ E% f7 U* k" _- o5 I boolean u = true;//u = you/ Y. i& G9 k, c: A6 X# x- x8 ~/ ^
boolean flag = false;
: ?! R! ]) X' r+ A5 x4 ^; L5 f. q8 T0 V( V. k' y8 ^
if(flag){
: ~; p7 R6 F; n. L6 r/ [ System.out.println("打八折"); 0 D3 Z# `# w2 v' H' {; e
} " n& M/ E% W& e9 n
7 g- D% q( b" @: e5 l
4. 数据类型转换
7 i, J9 e2 W! w) M, j0 }% V" o, O- ? char ->
/ G7 D4 [, z( S5 i byte -> short -> int -> long -> float -> double
2 Z: M9 P- T) b) [
6 a" b/ r0 @! U* d- k5 s+ _ 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
$ o0 x: B. z% A/ h+ y0 [( [ 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
4 p) m, K- T. _! D" N5 g% H' q. V 注意, 整数到浮点数转换会损失精确度3 K4 c7 b4 b! n6 E* t: l
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理+ O5 k# w1 m: H3 P
8 R- {4 [( @6 i4 T Y
int i = -1;
2 m+ s6 ^ B- M' j long l = i;
' q& r, J; [# |1 |2 B9 J3 J, k4 I
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行
# T1 |" |9 V5 N7 [3 ~ 的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围0 t F a$ ?5 \* ^; t9 z
int i = 128+256;// 00000000 00000000 00000001 10000000
: P3 T0 i3 \4 D, S2 o, J byte b = (byte)i;//-128; N" M4 t1 ~ V4 @
; e+ h; h$ k9 Y6 N' b( e) v$ J long l=0xf80000000L;
! y, h4 R0 A+ Q8 J0 B' F7 S0 w int c = (int)l;//负数2 e. X2 w0 G' {2 ~. b4 _
4 s. s+ y+ f7 C$ Z: E
l = 8;
: e- ^$ m7 Q2 \6 T. w7 ^ int d = (int)l;
9 g+ G- B5 O! \4 Y A
1 [ h0 j7 j5 Y float pi = (float)3.1415926535;//损失精度
" t* E. w4 s4 e& K/ l7 T4 R. K* O: W+ ?
char c = '0';
8 w* G; b6 e6 U* N7 q3 F4 \: C8 d2 y char x = (char)(c+2);
% A6 y% i/ \& n1 h
, B, b9 v' G, p4 [# c5 p |
|