该用户从未签到
|
1. java 变量& _8 N% `/ p3 r- K+ d
1) 变量就是自然语言中的代词
! O' k9 Z; `: K7 ~ Person he; int age = 15; ) Q' S0 ]. F: _8 @ |& {( C
//age= 00000000 00000000 00000000 00001111: W, V# H4 X9 }5 Y8 @. E$ i: L
System.out.println(age);//15, J# [. A* @# S, S9 C9 P
2) Java 中的变量, Java是强类型语言,
8 R3 u: ~5 i2 {4 L; g A 变量必须声明,并且初始化以后使用 int i=0;
8 o$ D6 \5 G( h B 变量必须有明确的类型8 e; E* H6 n$ _$ V
C 变量不能重复定义- }) F* Q, [ Z8 c4 Q; U
3) 变量的作用域
/ B4 `! o+ D' [0 c% u/ j" p6 l a 在声明的地方开始,到块结束为止
: G( c$ t8 F P! u/ e b 离开变量的作用域结束,变量将回收。, L. \1 m& @ O
, t" X7 l+ b3 `
2. 进制转换基础
' u% k# D% C7 F( C4 F: E, k 1) 十进制
7 c4 C/ R9 A" o; e }& E9 Q 逢10进1$ O4 p0 W" v+ Y
基数: 10' \9 ]. e6 O" g% n) P, e
权: 10^n, 10000 1000 100 10 1
8 i) H8 T& v5 Z( ]3 H( ^; i% H 23678(10) = 2*10000+3*1000+6*100+7*10+8*1
" N0 r; x) C" N! V = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
3 [# e5 d+ U; |( t4 A' { = 23679' A7 }! ~1 n3 f. k
' p% s5 Q% B- H) v! s2 M! n6 m8 f" L 2) 二进制
1 h* ~" s/ ]" N8 ~0 l 逢2进1/ q- T. e5 \3 z ]
基数: 2
) S, g( d# ^4 Y1 V6 O. E 权: 2^n, 128 64 32 16 8 4 2 1
: b2 P5 j& i9 \ 01000001(2) = 1*64 + 1*1
2 x- n0 {7 Z+ T6 h7 p. H = 65(10): T' {& [# H2 Q1 X
3) 补码基础3 _0 G9 l3 l; A+ w6 ~. Z
-128 10000000 11111111 11111111 11111111 10000000 \% {# d5 p s/ a6 M
10 2进制 ... .../ D. c1 O9 m! F$ O8 c5 h
8421 11110111 11111111 11111111 11111111 11110111/ O- J# J; Y* m: a/ R5 }, O
-8 1000 11111000 11111111 11111111 11111111 11111000 3 a0 {3 {' V+ f* Y2 D+ r
-7 1001 11111001 11111111 11111111 11111111 111110012 \/ d; V2 j/ q. Y! F
-6 1010 11111010 11111111 11111111 11111111 11111010! _* ]0 z& M7 l( \! z8 U& q
-5 1011 11111011 11111111 11111111 11111111 11111011
% _3 y! v0 U: U1 T-4 1100 11111100 11111111 11111111 11111111 11111100
) Q* Z- Y6 M8 a. L-3 1101 11111101 11111111 11111111 11111111 111111015 T+ i- Q$ f: n/ y. l& s
-2 1110 11111110 11111111 11111111 11111111 11111110' `+ d2 |& X2 S7 q
-1 1111 11111111 11111111 11111111 11111111 11111111
* H5 A* w8 v6 ?, i8 L 0 0000 00000000 00000000 00000000 00000000 00000000
! d6 Z% V( m, Z 1 0001 00000001 00000000 00000000 00000000 00000001: q5 Z# @8 \8 f$ E: Q% s8 U2 B5 ?
2 0010 00000010 00000000 00000000 00000000 00000010
& Y0 o; D: P( G5 T 3 0011 00000011 00000000 00000000 00000000 000000110 O' q; t" H- n3 V: X9 n# H
4 0100 00000100 00000000 00000000 00000000 00000100" Q$ V% O$ W U- q0 e" T
5 0101 00000101 00000000 00000000 00000000 000001014 X4 S1 W4 l$ c7 E% S$ C( i0 K
6 0110 00000110 00000000 00000000 00000000 00000110
& i# l) s. s3 n: `1 a& E 7 0111 00000111 00000000 00000000 00000000 00000111
6 R* G5 S) m2 N7 x. W6 o m 00001000 00000000 00000000 00000000 00001000
% |1 ]8 W, Z2 S! V! N- U .... ...
2 A4 K. _/ M# e, o( g 127 01111111 00000000 00000000 00000000 01111111
5 @" X. Q3 E- H! |: L# I6 _ 补码运算:* w' W* E% n; N& q( B- t
-1 1111
1 y% v- Y: T; ^' Q -1 1111
" t" F F- N# } X *
. ~: C2 S- c9 E/ K5 T ----------
6 p6 {& t! l/ V8 J' k 1111; i; b1 ^* F `9 J3 g
11114 f: u S, n! w4 `; ~# L
1111% w% H( [* m N8 t/ V
11115 g) x: X4 w# R
10101016 P/ O2 \+ v$ O
-----------8 X6 q0 O: U7 p9 m* e
0001* L+ Q5 J H1 M1 g
( M' I2 Y! w0 X) w, m/ y" @ 4) A Java 内部只有二进制补码, d' n) |) G6 W" } V
B Java 内部采用补码运算, 自动发送上溢出和下溢出/ d# K6 i4 s- ?" Y
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
4 N9 u. R# h/ [ D 补码的负数 最高位是 1, 也称作符号位. s5 w% @) G) ]% i
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
; W( t- T0 N- A4 E8 x! ] 16进制( D) _; C9 W, N' u1 u6 D1 x# q: E9 [& t
逢16进14 N, L$ g; [" ^- \$ U1 p
基数: 16
1 O# k2 |, {. _7 W% O Y1 h 权: 16^n, 256 16 1
% k4 y* d7 C3 H 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
9 \0 M* B" t* k- k# N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15& T d3 s& w6 S& O" f
# \- Q. o( m+ u8 A2 F
41(16) = 4*16 + 1*1
3 T* g9 r& v. n8 X, z) Y1 o = 65(10)
' V( M! w* A; g; ]7 V4 d = 0100 0001(2)
1 P! W* s4 O* A 8421 8421
) F7 I( t0 f. y" l 4 1 (16)
# ?/ u. p9 ]0 y3 [: l6 ?" _6 l' Q* A: ~0 o
128 64 32 16 8 4 2 1 2 M. f9 ?0 t' V. t" z. X
0 1 0 0 0 0 0 18 M! w: t" g4 p/ m- t' e
练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
& Q% g7 S2 p+ [, U) O. S D9 l0 w 192(10) = 1100 0000 (2) R2 b" r1 J" j: N) @7 X
c 0 (16)
+ r- l" ?+ C4 Z1 ^& c, y2 N: L9 _ -8(10) = fffffff8(16)
; n: d0 f9 L; P: M D& r 进制总结:
. c6 ?$ S& ~5 _- I3 m! F/ h* N- E, \ 计算机内存只有 二进制补码7 p* ^% c5 K; J5 y' p
默认输出, 按照人习惯输出10机制结果' ]& X& O! ?# r( I; K3 ~
16进制是, 二进制的简写, 16进制本质就是2进制+ v% O/ ^3 l) G" O$ y
16进制存在的价值: 方便书写2进制!9 x1 j+ J: `% D0 R+ V5 p
4 F& o( {( G1 F* ^* l4 y
3. Java 数据类型: 分为引用类型和基本数据类型6 y6 h v4 }6 s Z* |* l- O
1) 基本数据类型: 8种4 q' ? {% C Q: K* i% n
byte, short, int, long
1 H, S8 n) O2 p, P float, double 3 S! p# L% m1 V* \* y
char
" M- A+ e. M* ?+ R( Z/ H9 } boolean
7 u( I! o6 d( y' o 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
) b5 n# v9 `* q, H byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
1 U9 O. _* G9 i( c short 16位有符号数 0x7fff 32767 0x8000 -32768; B' C. o- ` P( F& _$ i0 o
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G - e, w4 e# P% ^. X7 n9 v* n+ D
long 64位 ....
0 ^3 }2 Q8 k2 q( z- O+ s! J 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给2 S/ ?+ g2 S1 W' i
小类型直接赋值.* x3 E) J5 i' f$ e0 E6 t. @7 y
使用整数类型(byte, short, int) 要注意取值范围, 超范围运算7 e0 r: b7 ~9 T0 t3 x1 J. ]
java 底层byte,short 按照32位计算- s1 i% F0 k' b1 _( c4 ]/ e! ]
& Z0 k) z |- O1 u! ]! K% V6 W long 类型的字面量使用"L","l" 后缀$ f. b1 M6 @! m$ n" L! p
7 R) r9 a( K a% c ^- {" {7 O% b
3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
3 V& l" ^5 m% x9 _2 H 浮点数原理: 10进制浮点数(科学计数法)原理
+ @) h3 T: R3 m9 Z) ~1 ? 2356189. = 2.356189 * 10^6* c& Z' N$ {3 E1 R1 W1 F. P+ f
概念: 尾数: 2.356189
6 W; }, L \' O+ z1 _6 E! [) } 指数: 6. I% W6 ]1 N' [4 G% A0 h
基数: 10$ r8 Q" j7 c& D: _% ~ C1 L
pi = 3.146 _+ T: n( Z' O# Q, ~+ ]( ]
3.14159265358979323846264339 ]8 J3 V! y9 b1 u: L
, P, Y. X. E9 O9 V1 [( C& H
; O- a1 @6 M7 Z" Y$ S$ S 二进制浮点数:3 B" i8 j$ u; ^4 @# |
101001010101. = 1.01001010101 * 2^1011
- S9 L/ @; M+ |; Q 概念: 尾数: 1.01001010101- y+ i1 P4 U. k8 t+ f$ e$ l
指数: 1011" v; V3 W( q. Q; y. v6 _1 h9 c" t
基数: 2, S& L4 T5 x7 t: H( w# ^1 \
. T. {( b I c& E+ P5 \ float: 32位 其中: 1位符号位, 8位指数, 23位尾数! f' Y' U- ^8 J6 r- G2 {% v
6 P- z) b3 w( E7 O! P* k) R
精度: 23 位6 `! ?- Z* p0 X, `
int max = 01111111 11111111 11111111 11111111
6 [6 A) m8 X* K float f = 1.111111 11111111 11111111 1 * 2^00011110
1 F# u8 Y4 b2 C2 X, g
' N) X, J1 p4 ~ O. K3 f6 ^ double: 64位 其中: 1位符号位, 11位指数, 52位尾数
/ K& S* Q& H$ c; \( ?% z: Q/ t" E; S/ _. o8 o# R
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
4 B; \6 I" X' w8 v; X" L- ^: s) R, P+ a! g5 u
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
& p2 W* n3 s: B5 @0 e+ |( ?- p9 g 数值是一个字符的unicode编码值.
; ?, |4 E4 p, z0 i9 O unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩. K3 y/ _5 Y H6 E5 h
阿拉伯, 希伯来, ..... 8万+ 字符' k% y( ]" K1 L `# j9 C, I+ O
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
' k3 Q( g" }$ K0 M/ \4 { ASCII: 0~128
7 |0 P' U" K6 f8 Q* K8 l l- {' ] Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
! B6 T% ^3 y/ i; ^: f( f" V unicode只能够最常用的部分
0 s U0 W/ e% H- K3 q
, A) a+ w) Z% U" |3 V3 h *最小值:0, 最大值:65535 = 2^16-1
% y$ ]& p, I# n+ q& `: R/ v3 ` *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4/ o) w, J+ T5 e4 E/ h
字面量也是整数常量! 52 48
" ?4 z& p; I5 o% p2 P7 g/ `- H" q* H 特殊字符采用转义字符表示:
! O# z: n' U# e" g4 i# l3 j 如: '\n' '\t' '\\' '\b' '\r'
! R V' J. |, j2 P5 J0 Q. y '\'' '\"' '\u4e2d'
; P7 B9 p u+ |: J- `8 L
8 h3 K8 M @1 W! k6 @! O/ V- T# \ char c = '\\';
: A# J& @7 l+ O# `, @) y2 y2 p b
$ [% G* L7 `8 ]4 |* ?1 e5 \1 q 'X' - 'A' = N
9 k" E. y. q9 ^0 w9 L: T U$ O 'x' - 'a' = N2 J' j2 R c* B( z+ L2 w
X = 'c' - 'a' + 'A'
/ M# \. U' |1 G4 z1 D( S+ `- E' B$ X. x3 y) Y# u
5) boolean 布尔类型 表达: 真(true)/假(false)
% ?( R U( ]+ x( ]3 p& W0 Q 建议使用长变量名定义变量 J% t. U7 F9 ?$ K$ h- X2 H
boolean started = true;
! s o1 ?+ z: u' d" G boolean isMan = true;
/ m+ D; W6 }! o% {, x# _ isMan = false;
9 Q$ I. I9 G0 i: Z a, q boolean used = true;//二手的
- ~& z8 Z: ^8 L+ e5 m! k if(used){
/ e4 n7 Y1 K/ F6 l9 [. H9 n* w System.out.println("打八折"); 2 E' n! |" q+ f: X Z2 x) u
}- u8 V S6 s7 N: B, b, t. v
不建议 定义没有意义的变量
" x! @8 j8 N- p- M2 H( u boolean u = true;//u = you
, e% Q! F3 P! Y boolean flag = false;$ ]! r* y5 J* O% D
% E3 y9 k* k8 {& M if(flag){
6 X' b- P1 Q) b9 |! l& @8 l& C System.out.println("打八折");
1 P1 a& o% |3 L' k } + F3 A2 r5 c6 C- V/ J
' L& E4 ~8 u# e9 y% E3 l
4. 数据类型转换 ; K: L9 y& w0 A$ W$ V& W
char ->- k0 r. `4 @+ [0 p* @* S
byte -> short -> int -> long -> float -> double
$ F9 a. U) b! m H
) D. M+ V+ U2 i S7 \ 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成3 n8 x3 S8 T0 b: [+ z _
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
6 R1 P5 s) }% I3 P# A 注意, 整数到浮点数转换会损失精确度
, {8 R( b0 P6 ]; u' I) K 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理+ d1 h2 w) K v; T A% o
% w S9 [- h8 j
int i = -1;
& ?7 z! Q, z; n0 F long l = i;
: L5 Y2 M* G7 z8 b- l7 A
8 q. C! B! G4 V, V1 l! T; p 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行7 P& b" F/ o4 f# k/ i2 ?3 o& Q# k
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围- p' M) i! O6 p0 u8 c
int i = 128+256;// 00000000 00000000 00000001 10000000 ' I' O' ]0 g7 P2 P
byte b = (byte)i;//-128
% C8 L# c7 ]# A \7 ^1 }( V8 M& u
6 o- F$ \3 A% L/ {! l! s long l=0xf80000000L;
2 U/ T: c' Q6 [ int c = (int)l;//负数
; k5 Y9 M2 L2 @
+ z; H) c; S9 j2 s l = 8;
3 t# O& J! ]( x* A& g int d = (int)l;
; t5 z; h/ F ]6 H- C: R) `, ]+ W
) D9 h( p. }- Z, Y) b$ y# v7 O float pi = (float)3.1415926535;//损失精度
^( Z# [6 h Q# k* b5 z- ~3 t4 R5 Y9 c
char c = '0';
2 f6 V2 |( k* }$ n+ {+ O char x = (char)(c+2);
$ l" R$ [; M6 Q# v
" i& a9 `* O/ l |
|