该用户从未签到
|
1. java 变量
" ]" o+ N+ D2 D' j' z 1) 变量就是自然语言中的代词
6 q3 W1 T* @, _ Person he; int age = 15;
& C* P3 O* B/ {* Y //age= 00000000 00000000 00000000 00001111
6 r, ~" V( _' H9 V& Y+ |) J9 _8 o) @ System.out.println(age);//15
! Q- f; D3 V5 d6 _5 ]3 U5 e4 N' A 2) Java 中的变量, Java是强类型语言,
+ L2 J* |" D. p A 变量必须声明,并且初始化以后使用 int i=0;+ r: c0 h& b) |1 t& f
B 变量必须有明确的类型% ]& Z) e$ B2 E/ I' |/ O: }
C 变量不能重复定义4 ?6 @) z9 J- ~4 K' t
3) 变量的作用域) F5 p/ I7 H1 M, F8 @4 V
a 在声明的地方开始,到块结束为止6 B; x* g- \ o9 t/ x- W! N# |0 X* a
b 离开变量的作用域结束,变量将回收。
( l/ g: U' c7 a* }! u4 c4 }9 n% B$ [( n: s
2. 进制转换基础- ]* G5 b; q+ f s
1) 十进制
6 h9 v0 B) _* f8 ` 逢10进1
" J" V1 r- [/ K1 U/ q( a 基数: 10
j/ d5 a2 ^2 q* r8 y! w( f 权: 10^n, 10000 1000 100 10 1
3 u% h2 E) `0 x# k4 n; b; e/ f# h 23678(10) = 2*10000+3*1000+6*100+7*10+8*1 0 R/ c* D# S; M6 H. S
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 6 H3 o3 i4 N4 {/ r+ U* q5 [
= 23679 l* w) N7 L. N/ U) ?
8 |% p' I) b8 _. x
2) 二进制- q( q$ ]3 z3 Q" Y' t
逢2进1
2 i6 Q" L, \! }* H# A 基数: 2$ m; ]0 I9 e% B5 V
权: 2^n, 128 64 32 16 8 4 2 1 4 z+ V8 z4 h8 v/ b+ O9 U" r8 K5 _
01000001(2) = 1*64 + 1*1/ p! d; | T* C/ D( [
= 65(10)
! Z: ^3 M6 c Y% z* t" X 3) 补码基础8 a' \9 u. V# r j- a. u5 `
-128 10000000 11111111 11111111 11111111 10000000) P4 {0 T# }# s* w! s' B8 {
10 2进制 ... ...1 b% `$ ]- b7 H+ ^9 |* p& f
8421 11110111 11111111 11111111 11111111 111101118 ]! q# U5 O/ h- C7 F
-8 1000 11111000 11111111 11111111 11111111 11111000
- }' O5 \( A) `! i-7 1001 11111001 11111111 11111111 11111111 11111001
2 C5 \- S; w I8 Y7 Q1 d& V-6 1010 11111010 11111111 11111111 11111111 11111010
0 X: v- t0 l/ h$ ~& j% M-5 1011 11111011 11111111 11111111 11111111 11111011
" R# U& u3 p C5 u- F-4 1100 11111100 11111111 11111111 11111111 11111100
. A2 `, s4 C2 A5 n$ o-3 1101 11111101 11111111 11111111 11111111 11111101
@. y B- o* Y4 Y# e- f-2 1110 11111110 11111111 11111111 11111111 111111101 r6 H& q- w% N* |' ]! f: J
-1 1111 11111111 11111111 11111111 11111111 11111111
+ [, h! w8 t' y" j! ^6 S( J 0 0000 00000000 00000000 00000000 00000000 00000000
6 P2 c) H1 o% [+ o0 ]. }# ` 1 0001 00000001 00000000 00000000 00000000 00000001% G- a6 F( O( ?7 \4 U
2 0010 00000010 00000000 00000000 00000000 00000010# C$ Z1 X/ G. s7 W
3 0011 00000011 00000000 00000000 00000000 00000011
3 Z3 ?& Z# t% m8 Y8 k& M 4 0100 00000100 00000000 00000000 00000000 00000100
& [# S% N1 t7 ? m) ^6 s" c- q 5 0101 00000101 00000000 00000000 00000000 00000101# ~, }8 P! r3 x2 e- @& z7 c( U% T
6 0110 00000110 00000000 00000000 00000000 00000110
& ]& ^0 p+ M" k 7 0111 00000111 00000000 00000000 00000000 00000111 ) `; t2 d+ o+ k7 L" E3 |3 ?# u8 c
00001000 00000000 00000000 00000000 00001000
; k# g4 T! \. Q" e) Q, ^$ U9 A .... ...) c6 _) y. V/ a* h+ H6 W, q
127 01111111 00000000 00000000 00000000 01111111
3 Y& g' i! l! ^: d3 t 补码运算: Y" h& T; D8 W
-1 1111. }* J/ Q1 G, q& L
-1 1111- z) _* l4 A$ x" A
* : `( A7 O+ I6 ?. W6 |6 M, J
----------
1 L% w* _0 Y ~) a# l% h# L3 I2 f' ` 1111
- g; y$ }! e, M& g- f+ { 11113 O3 T8 }7 T) ]- M0 X( U) S( ?
1111
+ X' v n5 }' B* R- j1 V1 h8 e 1111
$ }. h+ |0 a! { 10101013 l+ p+ q' ]; h$ Q1 p# e9 q
-----------! c* q+ Q0 {( h$ \* Q
0001
( `8 @5 W7 b9 m" M
6 }4 ^& n$ ]- O, k9 N w( d- e 4) A Java 内部只有二进制补码
% o. s5 Y( v6 o5 D* t B Java 内部采用补码运算, 自动发送上溢出和下溢出: }) W. d: I4 x# t
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
# m4 H, ]3 R( u. O3 ~ D 补码的负数 最高位是 1, 也称作符号位: L. Z( ~- k2 T1 @* `, o. o
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据7 `; q' ]. M" \6 }: I- ?5 G' p, D
16进制' V G, R; [, {# |0 M; Z
逢16进17 L" J$ z" Q% W) ]$ \
基数: 16" [* k0 D7 K1 @( O) v* v
权: 16^n, 256 16 1 ( }$ L0 \3 Y( f9 J, M
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
; J$ P- Y% F. Y, a' u 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
7 O; A1 A0 o+ {& ^0 `8 A , d" g! w: M) d. f6 \& i
41(16) = 4*16 + 1*1
0 C; Q" G. V# F8 [$ K* o = 65(10)
8 ], Y0 j& c3 u3 v# e) U = 0100 0001(2)
) n% @' e6 c i: { Z. J 8421 8421- h( C) c* c9 x R
4 1 (16)
# R, u$ u# ]2 y/ a( }0 y `( _( E. @# @5 X7 ~& s- w! E
128 64 32 16 8 4 2 1 $ ?, Y) F8 Q) E2 B- d$ D' d! y, L
0 1 0 0 0 0 0 1+ k+ c: V s a! K
练习:转换以下十进制为二进制 192(10) 137(10) 145(10) O7 D$ o$ _. b. _) c1 j3 C* Q
192(10) = 1100 0000 (2)
/ y* r# Y3 L1 |. ?1 j c 0 (16)
7 [8 a$ l9 y" i: n% f -8(10) = fffffff8(16)' z5 Q l' h4 ^9 F
进制总结:
, D( P% F+ o4 ^* S* U9 K; K8 x6 h 计算机内存只有 二进制补码/ P" I: H* Y7 J3 j4 I6 A, ]
默认输出, 按照人习惯输出10机制结果
1 W i) f& F, ]( x. O, l+ M# _ 16进制是, 二进制的简写, 16进制本质就是2进制
3 q& K; I% s2 r4 Z3 h% H 16进制存在的价值: 方便书写2进制!; A3 z7 ^7 @( i
0 P6 Q% ^1 W% N2 ~- i
3. Java 数据类型: 分为引用类型和基本数据类型
4 E T3 ^9 }; G) a. y 1) 基本数据类型: 8种) _6 w3 a: b6 O8 y% A j3 B
byte, short, int, long
4 J. C3 [# d. d# q: J float, double 3 ^% F! j1 H' |+ k8 v7 s
char8 W7 \1 x% _% C/ q
boolean! G$ `$ ^' V& P& x: x
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数! E0 O7 `$ o0 f
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
0 Z ]+ H) e# }. k short 16位有符号数 0x7fff 32767 0x8000 -32768, k( R7 r( P: |- U, Y/ Y) p) x, m6 h
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G
' f9 U' ^1 E" }$ Z2 E$ r2 t+ J long 64位 ....3 p4 `7 q& y6 q. D) D
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给- R9 K. l7 N2 p% l
小类型直接赋值.
1 U4 A8 C% j- I% t 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算" t: k u$ J; ~
java 底层byte,short 按照32位计算. P1 `( r7 {+ A' ~
6 D: f4 Q0 Q) q0 w5 E long 类型的字面量使用"L","l" 后缀
" I! r0 q! N1 u& T
; C# `6 }2 r1 J/ b5 F" W$ u! E ^% [ 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)* U, W8 a+ b! N: y
浮点数原理: 10进制浮点数(科学计数法)原理+ J7 k! C/ f" J8 k. I) w4 z
2356189. = 2.356189 * 10^61 n3 y/ S+ r B( U" w
概念: 尾数: 2.356189 $ W; U3 B) v4 N+ { n M& j( z9 e
指数: 6! M4 r4 u7 h- F
基数: 105 x7 j1 y1 B0 K% |# v
pi = 3.14
1 O4 c( X% t' A }4 [. ^8 s 3.1415926535897932384626433
. n) i0 l. Z7 M; s! U5 c4 l( p
* b9 j' z- u& ?$ ]8 S3 D) O
7 @ S$ k0 g2 r- O; q 二进制浮点数:
, U" Q4 T8 [5 t8 z* o* Q 101001010101. = 1.01001010101 * 2^1011
( B8 K* v u4 i 概念: 尾数: 1.01001010101: L3 u: i# b3 q
指数: 1011
# J e8 Z, f4 ~! C 基数: 23 e4 l8 b* f- X0 r3 R
$ R4 b3 I7 p: K- d float: 32位 其中: 1位符号位, 8位指数, 23位尾数
! p9 M2 i4 u1 C. q& }7 R& z$ `+ w! S( Y8 E& o$ Q
精度: 23 位
* u' R0 h3 B# V; X: I$ w+ Z int max = 01111111 11111111 11111111 11111111
5 ? e6 n+ {8 j& I- N4 l% p" c& w float f = 1.111111 11111111 11111111 1 * 2^00011110
7 E) a3 |- N/ g: U) M. P7 y3 O( l
3 w/ i" W5 B% S double: 64位 其中: 1位符号位, 11位指数, 52位尾数
7 w9 ~$ Z, [8 ^+ s ]# c h/ p& C6 @/ h+ U
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float' o; g8 a) A$ [- O/ D) [+ A
4 ^- ]: r, J$ k 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
* Q+ o; ?/ S7 v. ~ 数值是一个字符的unicode编码值. 7 Y! F5 Z! c8 c- j9 j
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩/ n B& ]9 |8 P, G
阿拉伯, 希伯来, ..... 8万+ 字符
4 Q% r0 Y. k9 l* j; V3 y) E 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.* S3 e( a9 d- ^; Y
ASCII: 0~128
% A3 L) Q, G0 I0 A/ ` Java char 的范围 0~65535 不能表示全部unicode 但是可以表示+ ^ z# Y2 ~3 N+ c9 ]
unicode只能够最常用的部分
4 R+ K: n+ P! A% p8 q4 r; p: F' M* o( m4 o' G, v
*最小值:0, 最大值:65535 = 2^16-1
* A" `% Z u w0 W7 S+ K6 J *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
0 q% r# G) ~3 l2 N2 l7 e# J 字面量也是整数常量! 52 48
: i, q8 M- |4 l1 ?$ J2 T8 Y3 \ 特殊字符采用转义字符表示: a6 L. S) m0 R; W( T& Z3 W
如: '\n' '\t' '\\' '\b' '\r'
' t; Y- m3 Y# C6 ?2 y2 N '\'' '\"' '\u4e2d'
1 _8 H5 P% a! U# c& J* c6 {
7 u: ]* M( e/ z char c = '\\';6 H7 s2 y6 ~% f9 `$ f
$ x% ~$ ?8 f. |- [2 X2 p2 W
'X' - 'A' = N1 A) o/ C3 N0 J6 A u: v3 d: m
'x' - 'a' = N1 f+ Q3 W& j1 K3 k# h7 X
X = 'c' - 'a' + 'A'7 w( ^$ X! T% q+ r! s
1 t& Y2 {# g% d/ @7 V$ E, n. H# R
5) boolean 布尔类型 表达: 真(true)/假(false)
$ q q* g2 H$ |; Z+ s' v 建议使用长变量名定义变量
5 I0 @! ]6 g5 x1 {# g* i/ ? boolean started = true;; R" i7 Q% v; q& d
boolean isMan = true;8 L' j& f7 W& V( O4 G0 {
isMan = false;2 f2 x* ]* O* c& ~) c) M
boolean used = true;//二手的6 r5 I/ t0 W2 U; }/ z8 K4 C
if(used){' T3 k& V. E2 b6 I6 c2 ~
System.out.println("打八折");
, e7 K- R2 G" K {2 r6 V3 J }1 W5 v: c+ o8 N# Y- [( Y2 F' U( L9 e
不建议 定义没有意义的变量; Z. d" `. }/ Z
boolean u = true;//u = you) [# P, r% y% f6 {
boolean flag = false;
) o0 v" W: e, d1 B: A! Z7 y9 P c0 Y3 @! V7 X
if(flag){
- ], e# N4 `8 v) k N, }% I' g System.out.println("打八折");
2 V [5 i, Q5 R% e } . }) C9 {& }% v% Y) H
# S$ r! T( h4 O# y/ r4. 数据类型转换 * P/ \' W$ v' g- `. m
char ->
?- b: ?: R; _* _, d byte -> short -> int -> long -> float -> double
$ g ~- q0 ?% j: n0 M
: K' Y: c' U) \! O: r( e. w, | 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
1 R) k0 e6 F, p- I 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
$ G1 R6 B$ k: b8 w# `# `5 c- t 注意, 整数到浮点数转换会损失精确度
) x6 F4 V' A2 Q+ Y! c6 R 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理: Q% B$ \; } C7 m
3 d( s1 O+ p3 J6 T int i = -1;
4 H' _. h# [4 X1 Q( M# | long l = i;
}+ B% f( R$ u9 d/ s c
* F. n9 |8 B6 w9 `$ W: U 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行5 Q; V* F/ v) U, X( [$ H2 N
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围0 ]4 J% @+ x, K, I
int i = 128+256;// 00000000 00000000 00000001 10000000 0 `8 s( B5 C6 O/ \6 w
byte b = (byte)i;//-128
$ h, Y8 O; Z+ X3 M$ v/ o( O7 W; @; J4 k% ~0 I7 [" \+ E
long l=0xf80000000L;
; {* |2 r6 }. n4 M/ J! N int c = (int)l;//负数
5 k& K' K6 C% q( u9 ?2 S; }8 b4 \- \ A- x( o, ~
l = 8;
; ?" m( i b8 n( K- S! h; J- \ int d = (int)l;
0 Z; Y' ~) Q$ Q9 Y: f) n" Q' h
5 g+ t" o% @" m8 R/ ~: _ float pi = (float)3.1415926535;//损失精度
. u- Q2 y; A" p+ v+ a8 ~8 S/ k) J2 E$ e# T
char c = '0';
2 Q* k2 |$ ]( M& _% | char x = (char)(c+2);
" i1 q h2 A/ u
/ y5 G; Q4 p( ~0 ~9 n4 Z |
|