该用户从未签到
|
1. java 变量- q; {9 k* y( `# G
1) 变量就是自然语言中的代词% y& z0 W# r1 m. O0 K j, D
Person he; int age = 15; # B$ u/ T F( q- [- V# R
//age= 00000000 00000000 00000000 00001111
; m2 {7 _6 a2 \" A& Q! t6 C1 \& U( g System.out.println(age);//15
% R9 S% k6 h4 W0 l) T3 a 2) Java 中的变量, Java是强类型语言,* W# J% M5 l3 P% U+ C0 |% ^
A 变量必须声明,并且初始化以后使用 int i=0;( f- i5 H( h5 }: H( g8 l
B 变量必须有明确的类型7 k. f6 a/ u- E2 Y2 u
C 变量不能重复定义! s* U7 r8 m. q' B2 s) o
3) 变量的作用域8 t5 v% l+ D8 I
a 在声明的地方开始,到块结束为止
6 l$ t/ v$ K& f: K2 N$ R+ t* v b 离开变量的作用域结束,变量将回收。
$ @, J, z6 o n/ j' z/ G4 q( j# K+ R" U2 T4 L8 y
2. 进制转换基础
% F! v: O* f3 K/ ]: ^5 } 1) 十进制
3 D( I9 u" V( L4 [+ P: v 逢10进1
! c! X3 C6 _. i7 [6 J* W) J0 J4 [ 基数: 10
4 B7 R6 L7 Z4 y/ k$ x 权: 10^n, 10000 1000 100 10 1# A$ j9 h( X8 D. c9 S+ l) q% V
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 + V# F9 L1 @ T+ e/ C" q) B
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 / h: a# W8 H: r a6 M$ l4 K
= 23679
: n4 x: n$ I9 ]) ~
5 Y5 B' Y3 P! }6 b+ q' g 2) 二进制( g2 U8 o6 D7 M+ E1 ]* O
逢2进1
+ t( ]" v$ e+ p: _5 e' t 基数: 2, W9 A! p' m/ L7 v, R# V1 o* }! D
权: 2^n, 128 64 32 16 8 4 2 1
0 s" W1 w% [, \9 x) }2 j- N( A 01000001(2) = 1*64 + 1*1: r! Y" g, ~& e6 P! d4 L9 }5 }2 d
= 65(10)
8 l4 i. ]" | V& K) Z+ z, B 3) 补码基础. r" I; E0 E7 L$ @6 Q6 a
-128 10000000 11111111 11111111 11111111 10000000' ?( |8 ~. R; A# K
10 2进制 ... ...
L" d7 d3 f3 G* G$ D" W 8421 11110111 11111111 11111111 11111111 11110111, t1 n+ o7 M8 A4 `4 H( q
-8 1000 11111000 11111111 11111111 11111111 11111000 - I1 K% H4 X5 e. P7 D% G
-7 1001 11111001 11111111 11111111 11111111 11111001
: m( {0 L. v0 J1 P-6 1010 11111010 11111111 11111111 11111111 11111010
1 S% F+ k1 R \-5 1011 11111011 11111111 11111111 11111111 11111011+ h" \- h4 T9 L/ |, W5 o5 g/ b
-4 1100 11111100 11111111 11111111 11111111 111111006 M4 I) X" E: t, O9 h. D
-3 1101 11111101 11111111 11111111 11111111 11111101
7 b% w0 W! z) p/ p1 [-2 1110 11111110 11111111 11111111 11111111 11111110
# ^8 D! `3 L2 E-1 1111 11111111 11111111 11111111 11111111 111111110 b$ E3 P5 @2 E# ?% N& l. u
0 0000 00000000 00000000 00000000 00000000 00000000
4 j# j4 h. v, z/ S' q 1 0001 00000001 00000000 00000000 00000000 000000014 v4 k5 Q: h! J" v* z) b
2 0010 00000010 00000000 00000000 00000000 00000010
7 C8 ^- s% d2 k 3 0011 00000011 00000000 00000000 00000000 00000011
; a) K% B0 z h& W M+ O7 A: N 4 0100 00000100 00000000 00000000 00000000 00000100
0 s1 H3 ^" x g5 \5 c0 { J3 T 5 0101 00000101 00000000 00000000 00000000 00000101
: V9 i& p/ y: L% z 6 0110 00000110 00000000 00000000 00000000 000001106 f# J9 @# s9 f# Y7 D8 L
7 0111 00000111 00000000 00000000 00000000 00000111 * H4 y8 \4 l7 K7 h7 o
00001000 00000000 00000000 00000000 00001000' K3 }6 l. }$ h) M) y& q* a
.... ...; k. D" A, L+ k& Q! j# E
127 01111111 00000000 00000000 00000000 01111111: ?2 a1 X$ t$ p3 b, e, z3 R' n
补码运算:
" t4 P& V3 @/ t- p' X1 P -1 1111) h# w: O. J8 y6 a1 I. |9 i
-1 1111
; [0 `8 v2 W( Y! C f* s7 s *
/ K, k- i" H( x) @ ----------
2 R4 Y/ K# A! X) d$ r N% b 1111
* P+ A0 b" y3 n$ C2 Y 1111- r* ^% p1 y" a4 w2 B
1111
2 Z- I8 B6 ?( K1 D! A% T: N 1111) Z# n( G% R: T. J
10101012 r/ ^. U# R5 C) z
-----------# Q+ S+ w% [9 j" s% {2 v' |
0001
& ?* G7 v S# {% w9 I1 Z
: |. i& G& I0 w/ A5 W% |, E 4) A Java 内部只有二进制补码$ Z" M$ ~6 ?1 n5 n/ U6 ^& X
B Java 内部采用补码运算, 自动发送上溢出和下溢出
/ r/ ]; F& `2 K% l' }0 f x C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出. w. @1 n! G9 p/ ~8 k. V4 Z
D 补码的负数 最高位是 1, 也称作符号位" e, o7 y0 n7 N; L# t
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
" i3 S* g1 _& Y" n$ a( I3 i0 ^1 j 16进制7 n- C* i0 c7 z& C, }
逢16进1! q* m! [, G5 m
基数: 165 r0 V6 l" L. ^' i* f. u- d* ]1 @
权: 16^n, 256 16 1
: _8 h' H6 C/ g1 i 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f5 S! o0 r0 w( N3 v7 T1 t( Y- E+ j
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
" f1 m& M8 }5 @ 2 g' V7 y j5 C& J& J; U( }
41(16) = 4*16 + 1*17 }* E+ y) J" ?+ r
= 65(10)' f+ a l+ p2 Q+ S, V
= 0100 0001(2)- K6 C) u7 L0 Z7 h: d! L5 @3 |
8421 8421/ Y0 T8 S; W$ r7 I, x
4 1 (16)
; v' \3 A$ |* i, Z2 R+ u4 F5 c+ [
) r8 l& H% b0 B7 b% L; N 128 64 32 16 8 4 2 1 6 b1 C5 g. {. ?1 u+ Y; g) F
0 1 0 0 0 0 0 1
9 w) w9 O* C7 l0 u; Q+ L! W 练习:转换以下十进制为二进制 192(10) 137(10) 145(10) & T) C) z) K* f. v3 d
192(10) = 1100 0000 (2)8 B0 O' I" ^: X1 [5 w' G% E
c 0 (16)1 D& X& I2 h% ~0 _3 }
-8(10) = fffffff8(16)
/ L, v. B& b; C4 V, C- _; { 进制总结:4 Z, Z; @! t: `
计算机内存只有 二进制补码0 |+ l% ~& e* f: ?; h" d3 c* a
默认输出, 按照人习惯输出10机制结果
% X9 t9 m/ i$ m 16进制是, 二进制的简写, 16进制本质就是2进制# o+ {! k+ b( l t0 Y$ Z- Z
16进制存在的价值: 方便书写2进制!+ p$ L" T; D4 [8 [3 J
+ M/ E2 K* K$ ~; X& Y3. Java 数据类型: 分为引用类型和基本数据类型) E% t: x0 K1 m5 g* Y: t$ G
1) 基本数据类型: 8种. w. C& }! ^. b4 J
byte, short, int, long
' j( s; c" }( W& {8 k$ R float, double
7 | V- Y I: M1 K: i char
! N, f8 n6 g3 p% Y# e V6 G% O; C boolean2 \! C7 j$ m3 H7 @6 a
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
1 u4 G& {# c4 f; r byte 8位补码 最大值 0x7f 127 最小值 0x80 -1286 l. o6 J$ r4 _2 _) r
short 16位有符号数 0x7fff 32767 0x8000 -327687 J r E; a0 I! k! U3 `$ H0 P1 M; Z
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G
% m! ^5 P; s; \: ~ long 64位 ....
L1 c# y: ?7 P U$ F# ]% c, c 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
" ?6 y2 j: G1 y) Q2 z 小类型直接赋值.
6 }1 {9 w$ ]: T+ J" e; Z% b. ` 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算- g/ m; J1 i4 }8 J7 H4 b
java 底层byte,short 按照32位计算. i* ?) B7 J7 ^# J/ o) W, i
: B% H" W+ N$ \% ^2 [2 i( u long 类型的字面量使用"L","l" 后缀
7 t* M( C0 B$ ]9 O- r
+ ?& T! G! a! ^9 L% p% n" W 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
+ d6 L6 Z3 b: |7 s& K7 b. y 浮点数原理: 10进制浮点数(科学计数法)原理
: F' d* h9 I; K 2356189. = 2.356189 * 10^6# \2 [5 z1 k" d! @- H
概念: 尾数: 2.356189
/ V1 G1 o S# H T- a# ~7 U6 m 指数: 6
- P5 P+ ]7 T; V7 H, F( S 基数: 10
6 g" T7 G8 V" g' m+ x pi = 3.142 Y6 } @1 c8 z3 {: B, ^
3.14159265358979323846264338 K1 A' U3 _% h& K, _5 f' C
3 O# G- D) [0 z. h1 P- H
* x" F7 i6 y5 i. r/ j6 x 二进制浮点数:) r# q# {) ^. D/ ~
101001010101. = 1.01001010101 * 2^1011$ J* O* W+ P0 ^' w
概念: 尾数: 1.010010101016 f7 X$ Z1 z- A9 T4 [
指数: 1011' [* P+ d! N* h& e" r1 B
基数: 23 j! q' \$ w6 J9 w7 u- `1 ^
. w7 |3 [, d" f6 f9 X
float: 32位 其中: 1位符号位, 8位指数, 23位尾数
+ }' F v# O- X0 U6 F1 ?' m: z: t" l+ [8 { k
精度: 23 位
7 p1 y4 Z- K U/ G$ O' B int max = 01111111 11111111 11111111 11111111
; G! j6 w/ n# c& m* R; w: w float f = 1.111111 11111111 11111111 1 * 2^00011110
2 O2 c) W- G4 i( u2 t$ y8 q) W, o" v% y9 ?9 [% v# t; }' s; X
double: 64位 其中: 1位符号位, 11位指数, 52位尾数
; u# u: ?; L) X; U1 N6 |3 t. w, k* q/ K+ j- `" O2 A% N+ h, _) v3 s
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float& T6 O1 w c K' c' e
' X) v$ T$ \% P
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数, i2 p! H5 L- O/ k: c
数值是一个字符的unicode编码值. $ s6 c. L, u: |+ Z
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
1 a( T7 b* e+ U3 g' A4 j 阿拉伯, 希伯来, ..... 8万+ 字符& H, G3 e q4 U: q
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的., J% e& D! Z' w7 m* o1 t6 W$ B c
ASCII: 0~128
& a$ ]7 ]# f0 o1 {' }$ ^ Java char 的范围 0~65535 不能表示全部unicode 但是可以表示' ]! f; ~" a7 Z) y$ A
unicode只能够最常用的部分
- Z+ e/ N6 S5 Y% M7 o& ]! d/ w( z* V0 B( d' F0 p
*最小值:0, 最大值:65535 = 2^16-1 N$ Q$ [3 T" l3 R8 v7 l4 }$ g
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4; q/ a0 h- q/ s4 l7 O+ T$ ~/ `0 F
字面量也是整数常量! 52 48
. `' v" X( O; I H5 h: w) ^. { 特殊字符采用转义字符表示:+ d" u& v: l% J; u, c
如: '\n' '\t' '\\' '\b' '\r' 9 N+ W- n3 k* Z% t# m5 B
'\'' '\"' '\u4e2d' 9 t+ T! w8 E3 [' R7 O5 L
' r8 [/ F: T% F% Q9 a char c = '\\';
: ~5 a, w6 |; i4 V T
! ?. c( N6 }4 z' J( m/ l2 H 'X' - 'A' = N6 `; x8 O* d# G+ }/ h+ Q' l3 a( H Q7 F
'x' - 'a' = N1 M+ \! k+ Z! T' ?* h
X = 'c' - 'a' + 'A'
! _, a. T" n1 Q/ H1 n9 B
) |) C Z: b- K/ ~ 5) boolean 布尔类型 表达: 真(true)/假(false)
9 C2 n+ o$ Y* y! {2 R2 O$ k 建议使用长变量名定义变量 n+ w% D8 j# [3 z1 g! m
boolean started = true;& w4 W7 {$ l( R! R0 j, F
boolean isMan = true;" U, Y; N& y V7 G1 J0 `
isMan = false;
' D$ F( r" _2 E' ^2 ~ boolean used = true;//二手的9 A( `3 v& H3 V$ d; S3 s$ d0 Q
if(used){4 ]* F: s2 P5 k6 V: @5 E+ C3 k' z
System.out.println("打八折"); : c* ^0 v! I: ]6 w; ~
}; w, b* B7 B) T2 I' Y5 m
不建议 定义没有意义的变量5 s% T. M3 z/ l+ r$ ]" u* h+ ]/ g
boolean u = true;//u = you2 b: L, A3 |- j2 G
boolean flag = false;
1 ^: F" v# n- e0 k2 b+ X7 M8 d( A7 p: }' N. Q: O
if(flag){
' p; y$ @+ ]8 b, s$ M4 s System.out.println("打八折");
" Q* W8 o+ N. k& q1 u! a }
, n& j, _, l: F4 I! d' u( j( A4 p2 D6 z8 p; f
4. 数据类型转换 / u: g' V1 @) [
char ->
. D1 g9 V* S2 Q% s byte -> short -> int -> long -> float -> double) d, g+ v" e8 p
2 j' R0 _" H/ J0 S) x 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成1 c& L2 O) ~) @& Q1 G" z6 ^4 @
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
1 E, s/ j3 R+ O! J7 k 注意, 整数到浮点数转换会损失精确度/ V: P" O6 i$ _" c; J1 g
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
2 U& d! m) {( `1 ~3 ?; B$ b
! W; K9 b q E) s int i = -1;
! V, e: M3 S: W1 p$ m( x/ D9 f N7 V8 c* V long l = i;
8 [9 `, R3 r5 Z4 e# X, `& P* d
. V5 V0 D. E0 s1 c: Z4 R! T+ n- e 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行" g6 S- D: H+ W2 n
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
' D3 e" A! G3 C3 e& [) ? int i = 128+256;// 00000000 00000000 00000001 10000000 ) o2 u! n5 c f t
byte b = (byte)i;//-128
6 Z2 B. N/ ?4 }7 t; |; }$ f$ E9 h- P; n. f+ l$ T9 b+ n3 s
long l=0xf80000000L;
- d: e1 R8 E7 D9 `( r" K* h$ b- a int c = (int)l;//负数
; D4 U( \% E/ ]2 C; Z9 N) W6 ~/ K
l = 8;
3 j8 r+ z1 r& _ int d = (int)l;; A$ N @' |' u/ s
* a% Q& P/ e9 y. ~
float pi = (float)3.1415926535;//损失精度
" U0 ?9 Q' t d k$ h! ]3 f3 \+ Z7 ]9 {9 D+ ~+ M1 D
char c = '0';8 x: r% Y5 o3 l2 }3 t( S
char x = (char)(c+2);
?5 [( q" ^: o/ g
5 b2 z X7 K8 j2 `, j6 K2 x8 L |
|