该用户从未签到
|
1. java 变量) t3 t/ N0 Y6 A0 Y1 B! s
1) 变量就是自然语言中的代词4 Z% m3 B) u+ F, P" M# l2 B
Person he; int age = 15; 4 d" r7 a+ G" d+ v
//age= 00000000 00000000 00000000 00001111
% f/ m4 K. i- a' O9 o3 j System.out.println(age);//15
6 q) i# U& ~5 D% | 2) Java 中的变量, Java是强类型语言,
8 R# J" D* ]* X+ J9 N$ e) z: F A 变量必须声明,并且初始化以后使用 int i=0;
3 I6 _3 \& r, |1 E3 F. c% ]4 v B 变量必须有明确的类型
% Z& H7 d8 I+ Z' w- _; j C 变量不能重复定义- B/ Z- J# x/ B3 f3 ? g$ Z# S
3) 变量的作用域
+ X" J, i, W. e( w5 n( M a 在声明的地方开始,到块结束为止, M# _+ y, N9 y
b 离开变量的作用域结束,变量将回收。3 @* r$ t+ v v! J( X- R/ o
" b0 \" D. o# D9 B2. 进制转换基础, I4 D) Z% u2 O( z( x) ]
1) 十进制 5 S, {: j; C& x `4 I5 T
逢10进14 k9 _! l+ _$ c
基数: 10" }6 S) r& Y* I& B
权: 10^n, 10000 1000 100 10 1& f2 j/ a" W7 H" J3 v: M
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 2 ^) S' D0 V, d" ^: V$ X
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
' e/ f, O) C3 B = 236796 Q$ t2 [0 M" {; I# M+ ?3 M
& G. @( t) K% Y7 Z+ c( t, E
2) 二进制
! D+ A! g1 { _1 s/ [( ]+ j* m) n6 u 逢2进1
6 L( F1 u( C% E 基数: 2
W4 F9 i- M1 J' A3 a4 D 权: 2^n, 128 64 32 16 8 4 2 1 % a& J( y0 F, F' `5 S# n% r
01000001(2) = 1*64 + 1*1
) p, m& m1 B" x( M = 65(10)
0 z( _5 @( P- i7 z 3) 补码基础
2 S/ u7 |! {, m -128 10000000 11111111 11111111 11111111 10000000
- a3 P+ @+ s0 g8 `10 2进制 ... ...
+ S9 H: v8 D9 R# a 8421 11110111 11111111 11111111 11111111 111101117 Z1 R! v+ j7 l1 a: t
-8 1000 11111000 11111111 11111111 11111111 11111000
5 |% R; G9 W1 [-7 1001 11111001 11111111 11111111 11111111 11111001
9 ^) c) B6 F4 a6 i* X8 l-6 1010 11111010 11111111 11111111 11111111 111110107 O- T5 W% O5 D. C# D& [& q
-5 1011 11111011 11111111 11111111 11111111 11111011. N! ^; E% V; P! ^! G
-4 1100 11111100 11111111 11111111 11111111 11111100
5 j4 C C' v! E1 Z! s/ S3 ?-3 1101 11111101 11111111 11111111 11111111 11111101+ A) U' R7 v3 `7 `
-2 1110 11111110 11111111 11111111 11111111 11111110
/ }7 `8 F3 u+ U. M3 L-1 1111 11111111 11111111 11111111 11111111 11111111: a; X _' G% H. h
0 0000 00000000 00000000 00000000 00000000 00000000
$ y" q* s7 m( h0 j9 j X/ V9 x 1 0001 00000001 00000000 00000000 00000000 000000014 w+ P0 C. ]( J$ ~! V+ q! m! B4 I
2 0010 00000010 00000000 00000000 00000000 00000010
* M! Z% F5 O7 D4 S. A 3 0011 00000011 00000000 00000000 00000000 00000011
6 i3 ^5 k! y6 p2 W 4 0100 00000100 00000000 00000000 00000000 00000100& q6 n0 L8 ^+ z& d
5 0101 00000101 00000000 00000000 00000000 00000101
% R( Q: `7 d! W2 n 6 0110 00000110 00000000 00000000 00000000 000001105 }4 h: Z- t0 t# M% y3 M2 z
7 0111 00000111 00000000 00000000 00000000 00000111 # t3 s/ l x* i. Y& J3 ^# b2 G
00001000 00000000 00000000 00000000 00001000
" D' v' Y7 Y: S5 b( Y- H .... ...
& G/ f. L! S. y% e7 o ]/ B; B 127 01111111 00000000 00000000 00000000 011111112 E1 l5 S( M4 N, l( K
补码运算:8 y$ [+ w+ m4 `! m
-1 11117 [9 D! A! l2 _# d
-1 1111) `& k# w# `/ v6 b' M1 R$ d% C2 V
* " E+ X5 w( O7 `' y
----------
% x& X) `$ h; y3 E, l% p! R 1111
8 m+ M7 _1 U' c 1111
. U3 d8 B/ x' N9 S6 L 1111- b8 y% @+ }" R! y6 o: z
1111' V7 H: b; X3 O% \! N4 ]8 W5 j! [( u; k4 Q
1010101 W! H0 h4 S2 l
-----------1 {/ C+ Q0 n# F" l( x9 g$ X& V: h
0001
7 j+ O+ v7 L5 A! e M f3 J' `/ ^ d( W
4) A Java 内部只有二进制补码' q) r- O% {0 r; f
B Java 内部采用补码运算, 自动发送上溢出和下溢出2 o/ ]# @4 o, O+ j
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
6 b! C* V" Z: f' p' ~& T0 J1 V D 补码的负数 最高位是 1, 也称作符号位
5 B4 _* \/ l; i8 V" I4 P) n: @! _ 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
6 \' f0 U8 g( w 16进制
- B9 O# f, \: s- A3 ^2 a5 u 逢16进17 S8 \! }7 D I8 m6 J
基数: 168 E# E, H0 I( G
权: 16^n, 256 16 1
$ P) v7 | G' P( m 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
1 J: g. W' n; ?+ o 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 157 O! j6 ]' n2 }2 T0 |
8 m# ~% `; X' r& F% J+ \, Y 41(16) = 4*16 + 1*1
( g- T9 p/ v5 P; ^ = 65(10)
' q+ F) b \! l) T a = 0100 0001(2)
0 m O: T5 a- r7 z 8421 8421
9 B: ^. V/ R, w2 M- \ 4 1 (16)
5 q7 F" O$ O% o: p' m. m: N, L1 j* ~4 }) t1 g
128 64 32 16 8 4 2 1
* V; }( H+ |3 `2 N+ ` 0 1 0 0 0 0 0 17 q1 b1 }- N; h: F' R- O% }* h
练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
# s" U8 M- b5 ` 192(10) = 1100 0000 (2)* ]7 S' K. j% W7 n
c 0 (16)/ [ C& S" m. [$ \
-8(10) = fffffff8(16)
7 F( G# J, p6 y" | 进制总结:
* n8 Z6 C( v( N j0 j 计算机内存只有 二进制补码
$ K4 K0 O5 l( g+ f5 z 默认输出, 按照人习惯输出10机制结果
" ?& J* Q9 {) j+ F 16进制是, 二进制的简写, 16进制本质就是2进制$ ^- D. `( Y7 |9 D7 ^9 z* A
16进制存在的价值: 方便书写2进制!
& o3 K; O* w- J. W/ P$ ]- [
' G0 J. q* L- A3 v) n+ H3. Java 数据类型: 分为引用类型和基本数据类型* W( d4 F4 x% `3 I; [ A
1) 基本数据类型: 8种* L6 `2 w# K3 F" @- |* z2 M. G
byte, short, int, long
# O+ ]- M+ N" _( _9 `3 P! [ float, double
% Z$ K& ?& i7 {! w& x! b) N5 D( Y char: x- u$ P& j9 W! S# Q# B) N P7 f
boolean. x5 a6 h: D2 x+ L
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
7 }2 t- Z3 u; I$ a8 q byte 8位补码 最大值 0x7f 127 最小值 0x80 -1288 A' ]/ _3 s. P! J* Q, x4 D
short 16位有符号数 0x7fff 32767 0x8000 -32768& t4 p" y& n; n5 ]; q w) x8 Z
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G : V q3 L% }$ n M( K; n8 Z3 f
long 64位 ....# i- ?) ?( v% ^2 A, P& N
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给5 U% G4 B, j0 @$ X, s" U: Q
小类型直接赋值.
, O+ d4 o0 E( l: x9 [: s$ a 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
$ w+ c# I; R0 E java 底层byte,short 按照32位计算, C q2 B- T9 p; r! G& n3 t
6 R( S! R- S) s long 类型的字面量使用"L","l" 后缀
5 n. E2 f0 r, w( ~. G- ]0 k! N$ l
( d' K; e3 C1 a" z 3) 浮点数, 小数 (不必掌握 浮点数的存储方式); l* {7 ]$ j1 w) r9 @
浮点数原理: 10进制浮点数(科学计数法)原理, M6 r% Y3 Y: e+ }5 T7 |8 U
2356189. = 2.356189 * 10^6
8 C5 L, l3 I2 f 概念: 尾数: 2.356189
1 W E: n" I1 z. ^ 指数: 6, L( t' V& H, y& ~
基数: 10- w+ ]1 P1 S) O9 k
pi = 3.14
7 L" ^2 o% t6 L8 F/ e 3.14159265358979323846264333 c) f! R1 J- E8 ]/ c' d' |2 T% u
$ g+ U" V) ?, p* C5 T( K$ j% P- `# U3 B% y7 j* P/ |9 _8 _- e
二进制浮点数:
; J3 A" b! D! G6 ^" ]7 G 101001010101. = 1.01001010101 * 2^1011* q7 _$ f; u l n: D
概念: 尾数: 1.01001010101' `) ?1 `7 v+ e3 M1 \2 B. Z4 u2 u
指数: 10110 j& f6 J8 _/ Y
基数: 25 T& g4 V3 P" }0 a$ y
5 t2 J! b; b8 B. g& A+ s* A' x
float: 32位 其中: 1位符号位, 8位指数, 23位尾数3 `' W0 O! r. H I U- U; s
4 p& T. |% d/ b. k" Z4 i
精度: 23 位, ^+ N8 I- r+ f7 b3 {
int max = 01111111 11111111 11111111 11111111& m! O+ V# J s: n# h" x. Z1 \: W2 P
float f = 1.111111 11111111 11111111 1 * 2^00011110; V9 g* _% M+ f8 ~; u1 o
+ M8 A# a2 [3 D double: 64位 其中: 1位符号位, 11位指数, 52位尾数0 m2 m# u; Q+ B' m& a' h8 r
" \* z1 v; Z Y
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
" O8 \% `0 S/ w4 F6 T4 x$ i* B2 Y, `% t( B: P3 s" c
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数/ q9 l) N7 T7 q1 \0 c; f7 I1 d! C2 q* e
数值是一个字符的unicode编码值. 7 E/ F: @5 p7 K X7 ^# W6 [
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩& \+ ~! e8 M, E& H# h9 [
阿拉伯, 希伯来, ..... 8万+ 字符
1 Z% r [$ ]; f o 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
" U2 Y" I+ N. L e/ R ASCII: 0~128& \# G% J' @& H2 o/ b
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
' L$ u" R3 K: ^) {# i. t. b unicode只能够最常用的部分
0 P& A8 r+ {+ |3 u6 L6 A4 N* m3 D, I6 H9 K$ m0 c1 h
*最小值:0, 最大值:65535 = 2^16-1" Z8 K9 y& T* {* p
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
" R7 t, Y+ F7 Q9 P, P, e 字面量也是整数常量! 52 48 6 d$ Q# {" T* w9 f6 n
特殊字符采用转义字符表示:
3 ?1 F0 M [1 {4 b9 W 如: '\n' '\t' '\\' '\b' '\r'
! G) a! A) S0 N0 v! X; H) d5 V '\'' '\"' '\u4e2d'
7 h* i; S+ m5 V& u& p1 U5 E- W/ J+ n9 K0 p
char c = '\\';
' E! o: c; w+ ~; o& c
a) ^4 h2 B3 ~) b. E4 T! H# i 'X' - 'A' = N- A7 V t$ |: w5 R3 r2 Y
'x' - 'a' = N6 y: p- e6 X3 K6 i
X = 'c' - 'a' + 'A'
1 c+ @; z/ _9 H5 [" [( h) K" `
5) boolean 布尔类型 表达: 真(true)/假(false), w8 Z; n; ^- H4 k* |. i! y
建议使用长变量名定义变量
" V7 q3 e6 n- Z% a2 t% N boolean started = true;9 z, |4 L6 N4 a( {
boolean isMan = true;
6 O) V' b' o$ z. y7 V isMan = false;; Z* b U( v8 ?7 N' i' o, G
boolean used = true;//二手的) `& t0 I! k! S
if(used){
6 _/ u9 h* n& y System.out.println("打八折"); 1 c% R4 M/ B/ K' d, U
}
9 o: j4 U- }6 S6 y" S, m4 j" A 不建议 定义没有意义的变量
3 X1 x- E7 ^4 E% q3 O; @7 `4 E$ G% u boolean u = true;//u = you' h* E5 g0 r4 R @# Q3 f; _
boolean flag = false;6 \- m( j) O- _# X
2 K& M- Y0 Q$ U9 d, e if(flag){8 Q5 x& k8 J' w
System.out.println("打八折"); - f3 ?9 m+ R* h! x6 e
} - P# A7 V+ s, l& n7 e
3 ?; j7 g" m2 ?( D0 Z2 i% u; i4. 数据类型转换 6 r' R! B- t" w9 j, j4 D
char ->
. u0 W- e7 [9 ?* } byte -> short -> int -> long -> float -> double# |! {& R" r8 S2 s# `- J9 ?) f8 k
( ^* t6 A, u1 L* V( K 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成" M6 d# K6 W( _, Y1 A
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
$ i" Z$ N) h* N- R% j 注意, 整数到浮点数转换会损失精确度
4 X9 f. W: d( I; f, K1 l. w 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理$ o- s3 W- x* X/ K
5 K9 `7 G$ q% @7 R. s# r5 _: U
int i = -1;' m; @% x+ {, ^) r& \0 v7 i; t
long l = i;5 d. I0 [! N4 ?$ L7 H( K
2 V% `2 o9 \7 ?7 s$ X
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行
* v5 T* u/ I" C8 ? 的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
. }, D9 l' d+ j! ]0 q/ e int i = 128+256;// 00000000 00000000 00000001 10000000 / g- E; ?" i t
byte b = (byte)i;//-128: l% Q4 U# p8 B% s6 z( z
: G) D6 A! c3 I; b
long l=0xf80000000L;) D4 v, y# T; d* k# c4 n' ^
int c = (int)l;//负数
) R6 f; z$ Z1 [% v% y4 X
' ]% }3 B+ \" c" B7 P. Y l = 8;- B' x4 n) W5 r
int d = (int)l;
; {+ C) A! y' E4 C" Q
7 N7 @5 t# N$ F( j% R+ y float pi = (float)3.1415926535;//损失精度6 A. P, u: w" }0 C: S5 R% I
: c5 J( |& Y1 M6 r$ X char c = '0';" ?; n& {* Q2 k
char x = (char)(c+2);
& u8 V3 t* j7 r8 u' K% _: b9 c) ]' E' K5 `; n* S
|
|