该用户从未签到
|
1. java 变量
& n `8 F; K6 k6 P- b$ n8 G. k) ^( p 1) 变量就是自然语言中的代词
: {' S7 f( q3 O' w7 g Person he; int age = 15;
0 Q5 v4 J5 s7 n# {) J4 t7 w/ [ //age= 00000000 00000000 00000000 00001111/ K* l: u. R: X% s
System.out.println(age);//15
" j+ b% |+ K4 p# m3 c) { y3 e 2) Java 中的变量, Java是强类型语言,
3 v' L( i4 p- r% t A 变量必须声明,并且初始化以后使用 int i=0;
* |0 a, u1 ^& V B 变量必须有明确的类型
2 I5 G" {# k" o. Z# O9 k* d4 |5 m7 ~ C 变量不能重复定义
8 A- }/ d9 w V) T" E) y 3) 变量的作用域
( v: S# `8 v& v8 C0 p/ U" G7 o0 _ a 在声明的地方开始,到块结束为止
4 L! _9 W( c S" q b 离开变量的作用域结束,变量将回收。
8 e2 I k4 s" m2 D
/ O. l# Y8 {. E' ~3 n3 U) G3 Z' ^2. 进制转换基础
- o3 ?* _( U5 ? 1) 十进制 / l4 z+ f0 Q; L$ w# y
逢10进1( E) \6 ^0 p% J4 r! `8 a
基数: 10
3 Z7 m: o9 b4 X2 R' m4 A0 h 权: 10^n, 10000 1000 100 10 1+ d) n# J8 p# C+ P
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 5 q) T2 b$ r1 N6 E( t0 Y% A
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
* L6 R: P5 Y+ j+ m+ a = 23679
* V/ F! e- t. @5 d; I0 b
" O0 W. p0 t- S ^0 T 2) 二进制
1 ^2 U5 J/ ^6 `- \/ b 逢2进1# K+ x, x; ?3 F( f/ T/ A- ?
基数: 2
, K# K4 S2 k* Q$ g$ O$ m6 b$ B 权: 2^n, 128 64 32 16 8 4 2 1 5 I7 z/ ]4 o' N7 Y
01000001(2) = 1*64 + 1*1: r3 P3 h0 I* c: ?$ P
= 65(10)4 e, T( \* T9 z
3) 补码基础/ _: {# R) _4 [! j0 Y% F; S
-128 10000000 11111111 11111111 11111111 10000000
2 }7 c/ I2 Y4 R/ ]# c- A7 C10 2进制 ... ...2 ^ A( V# g4 i& I8 j9 r' G$ _9 @
8421 11110111 11111111 11111111 11111111 11110111
/ D+ L. \" I* M! ^5 A3 Y7 S-8 1000 11111000 11111111 11111111 11111111 11111000
7 W, h+ U B, L; ]! Z/ }-7 1001 11111001 11111111 11111111 11111111 111110011 D$ ]/ h/ j2 ?& c+ A$ {0 M
-6 1010 11111010 11111111 11111111 11111111 11111010! @& T% Q9 `$ `9 Z; A8 R
-5 1011 11111011 11111111 11111111 11111111 11111011
8 _% c4 B2 j* _: X/ p-4 1100 11111100 11111111 11111111 11111111 11111100
1 N* O, b5 Q. w/ Y# w; P; G-3 1101 11111101 11111111 11111111 11111111 11111101" U* O1 h# C) z5 U# d L1 f
-2 1110 11111110 11111111 11111111 11111111 11111110
! s: ]3 X! [5 H+ T& r-1 1111 11111111 11111111 11111111 11111111 11111111
$ [" i* s: L" f( y2 ]! R% \1 o 0 0000 00000000 00000000 00000000 00000000 00000000+ F. c. L- _" ~) A9 g3 n) s* G. K2 \
1 0001 00000001 00000000 00000000 00000000 00000001. N2 N4 i5 I5 w5 [& _; y% H+ E
2 0010 00000010 00000000 00000000 00000000 00000010/ D! V- ?% L" g9 {
3 0011 00000011 00000000 00000000 00000000 00000011( m- o! c3 t B# s8 z5 p0 D( Q; @
4 0100 00000100 00000000 00000000 00000000 00000100# e& |" o1 _% x% _0 i) w) d
5 0101 00000101 00000000 00000000 00000000 00000101+ l k S e8 H
6 0110 00000110 00000000 00000000 00000000 00000110
' v! m1 q+ S9 P1 g9 w 7 0111 00000111 00000000 00000000 00000000 00000111
5 n4 C6 }. w! g- z 00001000 00000000 00000000 00000000 00001000
7 k! d6 O: r: m5 |+ K .... ...& p; U5 \4 A; h j/ n
127 01111111 00000000 00000000 00000000 01111111; F( c6 m# ^; w0 R2 a$ p, n s' K% s2 T0 h
补码运算:
, \5 r# e" ]3 [, a -1 1111$ l7 i7 N. ?3 M
-1 1111
6 Y+ H. ?0 D, k( q. ^+ Y * : T5 A8 i; m b" {$ Z
----------
/ k+ {6 z$ Y6 X' t, e9 m( V 1111
, @% \; q) D' z" H0 M+ {1 t 1111
7 r" [3 l6 M1 u/ ^$ ?* O 1111
. {8 U% P4 a( _/ t 11115 j! A. |. p" F$ v$ X* O
1010101
! `: ?" T7 I# G. e. O) ? -----------) u1 P( c& n6 W( [: i/ J
0001' g% X [6 D- _9 z9 j" ?5 ]
# W: @3 a- O6 S
4) A Java 内部只有二进制补码0 ]) T+ V* V' o x0 V6 G3 @
B Java 内部采用补码运算, 自动发送上溢出和下溢出& V8 @, D: l. T0 \7 y! ]. B
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
5 Y# k: O+ c- s, `( i, R0 M D 补码的负数 最高位是 1, 也称作符号位
1 w* B: B$ e7 X( D' _ 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
4 S* J1 P0 k i2 F 16进制# T. o2 k2 _ }, U K
逢16进1
$ J9 p# A4 b. r( g/ Y8 ^) s$ E1 Z 基数: 167 `8 E6 d; J, O
权: 16^n, 256 16 1
6 L% a0 ~* m3 A7 ] 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f! y. x" v8 p I" I8 C; |' q2 Q
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ l8 M* m8 c' \3 B* k
: c' A" ? C/ M& ]' v& W( y6 J1 W0 k 41(16) = 4*16 + 1*1) e- @ L. ]4 t
= 65(10)
# O* U1 m* {1 u) l = 0100 0001(2)
) ?3 W: T: v; }. D4 Q0 ` 8421 84213 {) J* c; {+ Y( H0 J
4 1 (16)
& i+ o2 S% k; G/ K/ L) n
& }+ h/ N1 B M( w 128 64 32 16 8 4 2 1
1 e5 N$ B# J I1 ]8 X0 i) v 0 1 0 0 0 0 0 1
* p: F* x7 w+ y6 R 练习:转换以下十进制为二进制 192(10) 137(10) 145(10) 5 `0 Z% Z6 |6 E/ H6 ]
192(10) = 1100 0000 (2)) }; Q, T% r, O" _6 h8 U# l2 B
c 0 (16): q$ L5 o& i6 |! U! }3 b' ~
-8(10) = fffffff8(16)2 v5 P x# W- Y; d$ R8 Y4 j
进制总结:
! h+ x' |+ D3 Z5 Q5 M Z 计算机内存只有 二进制补码+ m6 Z* z5 A3 ^& R+ P2 r
默认输出, 按照人习惯输出10机制结果4 P, q- S% n! P/ r( \7 ]
16进制是, 二进制的简写, 16进制本质就是2进制 r& f: U9 ^2 w- W5 ]; e7 ?$ |
16进制存在的价值: 方便书写2进制! N; Y( p- n- F, ]# i
& o% }! a) C1 I# H4 |1 Q
3. Java 数据类型: 分为引用类型和基本数据类型
/ e/ X) H4 {9 ?# A+ R- B4 H' y 1) 基本数据类型: 8种
8 h' X. a( {3 t# M: v byte, short, int, long9 ~) m6 t; _' v- X! p D! w: C4 {
float, double 3 b' G& G/ |0 h. c
char
. V4 f u- p* ~5 N# l boolean
8 D4 u1 p& e3 h8 }3 [0 { 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数5 l8 ], H1 P% z; h0 c) _, W7 n
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128 Y$ [) m" O1 W$ S# L% s
short 16位有符号数 0x7fff 32767 0x8000 -32768
' l5 O3 O s- o2 C) D0 I int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G
0 P: m, I5 y2 A& k+ \ long 64位 ....
1 J. f4 ~( z2 X; g5 W0 `( Q 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
+ M" O& @9 X2 @6 | 小类型直接赋值.3 V, l6 x& e: B2 y8 T. X- C. t& `5 S
使用整数类型(byte, short, int) 要注意取值范围, 超范围运算9 J0 M+ P+ D5 ?& b8 H# v9 }
java 底层byte,short 按照32位计算
/ {% x' L# {; a) o$ u" ?3 @
. H7 n5 Z& Q* c* \: D: ~9 L# L long 类型的字面量使用"L","l" 后缀
1 A3 @& p( E* U) G: V( O
1 U. Y q; D8 h1 p) O 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)% Y7 o" G0 Q3 J0 R4 H: z( q
浮点数原理: 10进制浮点数(科学计数法)原理# g8 _! j# E4 S
2356189. = 2.356189 * 10^6
' |5 X# M& Y9 Q 概念: 尾数: 2.356189
4 _' u( Q" `, J" L8 [& c# P 指数: 6* u- m0 P6 u8 B& R+ T7 N! p0 f
基数: 106 y3 t3 s- p7 H2 J0 k' o- k
pi = 3.14: a4 D5 n q8 h
3.1415926535897932384626433
! ~1 g3 w- q* z* m# g; h
/ ]7 e! ?/ j- h, S2 l
- U; k0 T" t/ \ 二进制浮点数:8 i% C3 R2 J `3 C2 c" z
101001010101. = 1.01001010101 * 2^1011% {" g8 c4 v, l4 ~. B' @) k8 r
概念: 尾数: 1.01001010101
/ P2 a4 k5 I! c 指数: 1011
! p' p! S2 m+ j$ T0 t z% m 基数: 2' p' N2 D$ `& X7 m5 ]* f+ X
6 _1 v: `- O. n7 E- b P+ ^ float: 32位 其中: 1位符号位, 8位指数, 23位尾数
' J$ S5 s, ]+ q/ l; ^& i9 T
. c$ J0 G. ^( p! q6 I% m 精度: 23 位
: C) T4 K4 i1 F5 ^0 }$ h0 X int max = 01111111 11111111 11111111 11111111
( N I( a6 U* r float f = 1.111111 11111111 11111111 1 * 2^000111107 Y" L7 K/ h" J0 E6 _) u! [& t
& p) S z f' x1 ~% L' n2 N double: 64位 其中: 1位符号位, 11位指数, 52位尾数
4 E X0 |2 G' a4 ~. S0 m6 Q( b: A& H. _8 k, O" T
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
9 e( l) h# Q6 G* v0 Y& D% Z
: \5 v+ |& v& O2 ^# ~. e 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数& f/ V7 N6 J* q1 r) h% N7 t
数值是一个字符的unicode编码值.
+ @/ ]# u8 f* `) s unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
F& g, e5 C& w. J& a) \& l 阿拉伯, 希伯来, ..... 8万+ 字符
9 S6 i4 q1 j' t" l3 o A 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
1 w7 u- h9 m( Q) O$ C0 c: H: ? ASCII: 0~128
+ h% J8 f8 z4 ~8 N& W Java char 的范围 0~65535 不能表示全部unicode 但是可以表示/ E! h8 p. ?& h- J) }9 p% Q! O
unicode只能够最常用的部分4 Q- u; k0 C& v& ^ T/ t7 \0 i
- ?' d9 S L8 w7 Y- D( T
*最小值:0, 最大值:65535 = 2^16-1: h5 n, S3 c7 ] `
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4' l( }. s D1 n' } D$ ?
字面量也是整数常量! 52 48
( g/ s2 {3 a6 w4 Y$ M 特殊字符采用转义字符表示: P+ b: x% w6 F) I
如: '\n' '\t' '\\' '\b' '\r' ; d% X) ^ h. ]# ]6 v, i
'\'' '\"' '\u4e2d'
7 F# k2 f5 e6 O: O1 {9 m+ x6 P1 [6 o( z, H' c m/ B) e- @
char c = '\\';
/ Y% {. M) q1 V! v$ A6 e: A
7 z; i* t5 ]: e7 w) ` 'X' - 'A' = N+ f' x9 e6 e6 X! w) v( o
'x' - 'a' = N
6 }1 r. ^8 @9 w9 ^5 ]; C X = 'c' - 'a' + 'A'! r7 S: L3 k# m2 G
" d) } N, F4 W0 k. L$ b! r
5) boolean 布尔类型 表达: 真(true)/假(false)0 A+ J# S- S) Y6 {, l0 l. [6 r
建议使用长变量名定义变量( C, k$ {0 Z0 Q$ [1 f
boolean started = true;
- k' T n5 R0 e |% h boolean isMan = true;
) M1 M* E. H( s2 R3 ~- R" X2 V( j isMan = false;
( D; h6 L/ x( v! ~" ] boolean used = true;//二手的
2 Q/ b4 _6 J6 u if(used){
* [; T5 ^; {7 A6 [5 {& p- X5 { System.out.println("打八折");
2 \: x F1 \8 ~6 y }: R$ O# _9 ]3 @4 m
不建议 定义没有意义的变量
6 W7 }6 D$ O0 q; b/ K boolean u = true;//u = you
% {* v T+ [7 G0 ^ boolean flag = false;
t7 Q( F5 p; k9 \% J& b n: M; ]
* C7 _2 f3 F0 o. m( S6 G if(flag){
' _1 N: {- ^4 P' M% P- Q System.out.println("打八折"); 0 F$ v/ }4 e( f! e7 E/ q' ^
} ) d1 a4 A2 y- O& e
1 |; S8 _; ]9 R9 d4. 数据类型转换 % e/ y7 Q& x! F: D! Q
char ->6 {3 Q8 P; z! v0 m0 B: Z
byte -> short -> int -> long -> float -> double- B _ r% B8 R4 D- f4 ^6 p
4 A" k @* _! I7 B# Q+ `5 T 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成# J }# ^( s9 p
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变+ Y/ U1 _$ u7 j
注意, 整数到浮点数转换会损失精确度
3 }( s* P, P& R6 C, }" u8 m5 B 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理+ ]: {* E0 Z4 B' L$ z
( L2 t2 D' N) p( Z3 t int i = -1;, d) X+ m# e9 S6 O( |$ p1 w6 s
long l = i;
7 g: T2 d, o8 k6 C( h
7 F( S. S7 h$ H* @' a9 w# L 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行 s# b/ A6 s; H" S
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
' f9 s: z+ @7 p" A7 b int i = 128+256;// 00000000 00000000 00000001 10000000
1 V- R" Z% E+ C; [5 ?- U5 n" T byte b = (byte)i;//-128 K4 [/ t+ W" L% a& ?3 N" e
& p, F% o: f1 `
long l=0xf80000000L;
3 e- p/ M# z/ R) x int c = (int)l;//负数, T- n% F" H7 }4 f3 ?! @/ G
3 ^7 @) a$ Y/ ^7 ]( l7 f9 L: U n
l = 8;
3 b" u1 v: |, v: q$ ^" t5 j int d = (int)l;$ s" j, H2 k7 n4 J( Y& C
# {2 \. Q9 U1 n( \
float pi = (float)3.1415926535;//损失精度
* L3 [8 l' R4 D; Z, n3 q+ z. K8 S I- t0 C, u8 M
char c = '0';
3 `% o u) A, |+ Z) w3 H. w char x = (char)(c+2);
9 L* z, h& \7 }& b" N7 R, r7 C
* z+ j! L6 A( C$ s! ^% t/ r |
|