该用户从未签到
|
1. java 变量3 N( L) Q5 |: @8 J1 o, o, d
1) 变量就是自然语言中的代词+ E! l8 Q7 x- W! y6 }* B- ~1 f4 @; d
Person he; int age = 15; / r% z2 b# K6 M0 F
//age= 00000000 00000000 00000000 00001111
8 x- A) |! J' W. N: I$ N1 h8 k System.out.println(age);//15. v- s8 y! o5 H. S2 H$ S2 l
2) Java 中的变量, Java是强类型语言,
& u- g, _ H% I& P A 变量必须声明,并且初始化以后使用 int i=0;9 [" u1 f# _3 `# x8 q a
B 变量必须有明确的类型
+ {+ F$ O# O8 |6 e9 G C 变量不能重复定义
5 U& m% n8 t: q# t, o 3) 变量的作用域
7 {/ T6 W3 P: c1 C5 H a 在声明的地方开始,到块结束为止
8 t8 h h5 W6 U$ Z b 离开变量的作用域结束,变量将回收。' ]8 [8 [% e8 ?, B( ~1 U
6 x* n# F4 V. I- s( r
2. 进制转换基础
1 U+ K. a2 e4 c, o, K) G 1) 十进制
- G7 |0 ]) b4 L+ c8 c: I 逢10进1
2 _( l2 W# M' {1 l' O' K" d 基数: 109 h- H+ B4 D3 y/ r" u
权: 10^n, 10000 1000 100 10 1
9 D9 j w: G. v$ j 23678(10) = 2*10000+3*1000+6*100+7*10+8*1
: E! L3 W% U6 ^/ W, g, a* k = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 ! `( D3 ]7 }$ Y/ f
= 236794 m7 h4 \. M' e/ S8 D: x, j" U
6 y( x# V0 J- V5 h5 E' u
2) 二进制
+ @' ?% d# ?7 Q) Z! m 逢2进13 E+ _6 i' D2 I* m9 g% G
基数: 2
; M1 D. Z% U7 M6 W' l& Y7 o 权: 2^n, 128 64 32 16 8 4 2 1 $ u/ C/ Y4 z7 p- s! ?/ p
01000001(2) = 1*64 + 1*19 F o. W+ F2 y1 ?
= 65(10)3 o9 L0 l4 @6 Z0 p6 U. k/ `
3) 补码基础
# [- ]+ A: I/ \" F" P -128 10000000 11111111 11111111 11111111 10000000! n) ]: @; c: j- i
10 2进制 ... ..., k% F& \/ a4 q! L
8421 11110111 11111111 11111111 11111111 11110111
7 Q/ d/ T) W' y; Z2 j-8 1000 11111000 11111111 11111111 11111111 11111000
- F4 m7 H9 I# ^& `3 C" F-7 1001 11111001 11111111 11111111 11111111 11111001
! R; K0 D" w& w( M) Q-6 1010 11111010 11111111 11111111 11111111 11111010 r Q7 W; y7 B5 o. _
-5 1011 11111011 11111111 11111111 11111111 111110116 Z4 v2 X' r0 G$ V* ^% i
-4 1100 11111100 11111111 11111111 11111111 11111100
7 _3 B2 b; C7 [* t-3 1101 11111101 11111111 11111111 11111111 11111101
4 v2 j7 e$ G% T% A) D-2 1110 11111110 11111111 11111111 11111111 111111109 n+ p# M# g, f
-1 1111 11111111 11111111 11111111 11111111 11111111
1 P; k3 e, ^5 v; d7 g* G0 o 0 0000 00000000 00000000 00000000 00000000 00000000
4 j. T ?! h, I 1 0001 00000001 00000000 00000000 00000000 000000014 {0 `5 E9 F) _
2 0010 00000010 00000000 00000000 00000000 000000104 z' ^) C) i" I o9 J
3 0011 00000011 00000000 00000000 00000000 00000011" l+ C" F/ b0 [ |( B8 x6 l
4 0100 00000100 00000000 00000000 00000000 00000100
4 _% q4 [6 M! t: s4 Y4 U( L 5 0101 00000101 00000000 00000000 00000000 00000101/ o3 i" `- X7 x( ?- X2 U) H' o
6 0110 00000110 00000000 00000000 00000000 00000110
- x' {, N# W) R+ _4 P7 Q 7 0111 00000111 00000000 00000000 00000000 00000111
; j) ]8 s5 ~: n; c; h 00001000 00000000 00000000 00000000 00001000" R8 v* `) B y+ W: @# }( d
.... ...
4 D1 A: s/ e$ X/ V5 n6 C8 R 127 01111111 00000000 00000000 00000000 01111111
. a: c5 k; F) p' ~ 补码运算:: l: y; T) S' S
-1 11118 Q- c G+ Q! {8 p& e
-1 1111! c, j6 g. ?) a" M& U5 U
*
0 k! Q9 U/ s- J3 C( N, O ---------- / J) G! n5 X4 R
1111
1 G2 r. j4 I- Q6 O 1111
# |9 E7 R2 r k- W. _ 1111: k+ N& C, U. }; h1 n: x- e: n2 ~
1111+ s( v7 ? B+ a; b6 C4 z% x4 O
1010101
- G1 D' \% |2 y, A -----------) U. n+ a5 h1 y2 o& t/ `
0001
5 z: Q+ p% M7 z: H9 O7 Z7 r* L6 E7 g$ u: S A( y5 z) ^
4) A Java 内部只有二进制补码
+ H; Q6 B2 L% }) [6 p' X B Java 内部采用补码运算, 自动发送上溢出和下溢出1 h- V5 r/ A0 l& T0 b$ h4 t% t
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出0 R" ?6 `( G- D
D 补码的负数 最高位是 1, 也称作符号位
/ O- [/ Q3 X8 \+ z 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据$ m+ `7 [$ A. a7 \ Q
16进制
}9 h# ~- T- s7 [ 逢16进1" H W* k# D7 @
基数: 16( ] y/ t, t' \8 M- C; _: K
权: 16^n, 256 16 1 # a/ O# Q9 `7 o, G
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
# x& ~2 j- _2 {. F8 M3 r 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
; \4 i8 P; h5 M ( h( M, P3 K) w" z1 X% }' b; d( U e
41(16) = 4*16 + 1*1" G- `1 K) |- }
= 65(10)2 u" [1 n1 f6 |9 ~6 _/ [
= 0100 0001(2)
% U2 F8 j# L, I1 ^) c 8421 8421( b+ i! y5 j. G( F/ j; X+ l% w
4 1 (16). U* L/ v0 q8 G* d
8 d# Y8 L5 O* D A( n% I 128 64 32 16 8 4 2 1
& w( p8 n0 Q7 J 0 1 0 0 0 0 0 1- B1 z% @/ _; a; C8 r
练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
% A6 L. C5 ~: c8 R7 A 192(10) = 1100 0000 (2)1 x' R5 z P |$ c6 L0 ~
c 0 (16)
/ O) s5 S% B+ t9 @) }+ B: L/ U -8(10) = fffffff8(16)1 `( `" `7 }. |
进制总结:# C9 {2 S1 D8 Z, ^& h9 l* H
计算机内存只有 二进制补码
@. }! P4 X v0 r 默认输出, 按照人习惯输出10机制结果
; ^; M1 N; c. _& } 16进制是, 二进制的简写, 16进制本质就是2进制3 E& f8 J% G1 Q8 m1 e% p
16进制存在的价值: 方便书写2进制!5 R/ y+ h' u0 m! g
1 n( }* C% t& M+ Y# }
3. Java 数据类型: 分为引用类型和基本数据类型
; M* G( |" |. C5 z 1) 基本数据类型: 8种
1 F+ E0 _, w8 M+ }9 g1 f) [ byte, short, int, long7 I- j. B' m7 Y' Z
float, double 0 d1 {9 X' l3 p" {2 j
char `- o7 \+ H' D2 i# h9 A$ c
boolean
T$ }6 J/ y, @1 Q1 S9 ^ 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
, C' e( F2 u5 D, \; w* z/ C' M: G byte 8位补码 最大值 0x7f 127 最小值 0x80 -128. |/ Z( _" {8 _" R \- H
short 16位有符号数 0x7fff 32767 0x8000 -32768. A0 U% N! d. y5 F
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G $ s0 g0 p+ u. L; E
long 64位 ....
6 X9 n+ F! v5 Q4 @4 i4 n9 B2 W 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给9 I5 [6 P+ N9 e5 z; G p6 ?
小类型直接赋值.
, `2 ~1 Y# D8 A 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算, y! p5 C# \0 E* \7 }3 O
java 底层byte,short 按照32位计算
6 N. v+ N8 q# c7 k; D" C6 h* L9 z* I) ~1 s% V7 \- s
long 类型的字面量使用"L","l" 后缀
2 C7 s1 R5 S" J5 k7 Q/ g. N% c9 M6 g
3) 浮点数, 小数 (不必掌握 浮点数的存储方式)- W4 H2 n" s! _+ u
浮点数原理: 10进制浮点数(科学计数法)原理
& m9 G u7 `) e0 v( X, _3 E 2356189. = 2.356189 * 10^64 q0 ^* M: k) h8 G
概念: 尾数: 2.356189
+ C# V; i* _( c 指数: 6
# ]: v N b1 m8 P* w 基数: 104 ]$ f! Y$ m6 \1 G/ f. |( D
pi = 3.14' K& i) v' z. m+ i E: K
3.1415926535897932384626433# F2 U' V* [/ |. r9 p5 V
- p: L1 M; M) H4 ^& c
9 ?6 Q, u2 {: J0 w5 o 二进制浮点数:- Z* b4 ~ q) l3 v- X2 N$ a0 o
101001010101. = 1.01001010101 * 2^10111 m! G7 U5 d$ X6 X/ W" t
概念: 尾数: 1.01001010101
; S( c0 Y0 O1 `4 Y 指数: 1011/ L. ~3 K+ v0 K/ Y; t
基数: 2
5 P5 M. t. _ Z. ^
: b* V0 w& p. ]3 R' _5 p2 @ float: 32位 其中: 1位符号位, 8位指数, 23位尾数/ b) s# ]4 g4 T: Z. N- u8 R* u
: J0 F7 }4 \6 D( ~ 精度: 23 位' V q. h/ l5 V8 T# o Q5 e
int max = 01111111 11111111 11111111 111111114 ]: X; X2 g h2 g# F! E
float f = 1.111111 11111111 11111111 1 * 2^00011110
& i% A+ N2 Y$ z( @' x' N% t$ A. @8 U4 Q6 O+ l' h
double: 64位 其中: 1位符号位, 11位指数, 52位尾数
J, Q! m; P! G
9 B4 q; e1 O# y- Z# {9 N 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float& \# g# X i! O! R4 S1 m4 G
8 `; ~+ m* a4 z% r7 L& [
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数. M/ n: G, u9 n/ T: y( n' N4 w6 z
数值是一个字符的unicode编码值.
0 }+ m0 y% v, }7 t unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
! l; l/ \1 L3 j, L+ A# `/ M( A 阿拉伯, 希伯来, ..... 8万+ 字符
& J& m [2 L- S* j& d" ^& c 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
6 {$ M( V7 G4 v0 X' K) z ASCII: 0~1288 r/ P2 p S$ V1 N% [6 r) ]# a( g5 S
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示5 f5 b2 ]9 O7 X# p- i1 n" w
unicode只能够最常用的部分7 H" K- k( }% Q3 f
9 E' T0 n4 T2 e
*最小值:0, 最大值:65535 = 2^16-1
# t& H m k7 ?) _4 g% Q* M *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->44 t- ], M* `6 z9 U r- M+ P3 r. n! r
字面量也是整数常量! 52 48 . j& R/ U- `* t3 A! ~+ d2 B% l
特殊字符采用转义字符表示:0 V- J( S. ?5 T
如: '\n' '\t' '\\' '\b' '\r' # l- B1 t2 \% ?9 i& O
'\'' '\"' '\u4e2d'
- m0 f1 p$ I& a) W% H. q, |: ^0 @ R: E# L" M' W
char c = '\\';
# L7 k7 q& w9 c# g* C% E
% Z# p1 S% O/ W0 e$ B 'X' - 'A' = N- M* Y+ p, L1 o1 X
'x' - 'a' = N
1 d; v6 \2 _( M7 l P X = 'c' - 'a' + 'A'9 B+ R( V% N0 q, ^# A% |* c: l
9 r4 H" q" m/ m/ D1 n( [7 G3 Y5 | 5) boolean 布尔类型 表达: 真(true)/假(false)
* {. P+ T, {6 p, g) [) X/ g* p3 S& y+ ] 建议使用长变量名定义变量8 k. p3 G3 l* G
boolean started = true;
* p* e+ ]- I. I. |" w( s boolean isMan = true;
, D6 S5 q3 X& {3 o: w6 a) l' b isMan = false;9 b& _. U$ }; Q$ x& f
boolean used = true;//二手的
: Q& p# }" Q/ v0 I if(used){) ]- f2 z3 }6 `) N1 f5 f
System.out.println("打八折"); L K1 V5 ^! @
}" S' h* z% X6 u1 B. l3 W4 A, ]
不建议 定义没有意义的变量
) M* V0 E+ y6 C! ` boolean u = true;//u = you6 [. k* w9 `$ k6 D) q# X- h8 ]
boolean flag = false;" q* d" e, S0 P5 n! G7 t4 k6 z3 C
3 T: R7 |7 N% F2 b3 o
if(flag){$ X. U/ H1 C1 i( _' U' m6 V
System.out.println("打八折");
$ W7 w' V A' u$ U0 e } - F* X% D) T" P; v0 Q' m
6 `, @3 m: U0 Q+ u, ]# G% B6 G1 O
4. 数据类型转换 " c" X* Z) ~# P P5 c9 u
char ->
; V6 K# s2 u$ T8 \ byte -> short -> int -> long -> float -> double9 m$ l. e; N! M3 V
2 H, ^# `$ ]' b. Z5 y- O" Y 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成8 h1 g: L; i, A
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变- ]9 q" g! ~5 i1 S( c
注意, 整数到浮点数转换会损失精确度
4 x4 I1 X1 I, [* M0 S8 ~ 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理6 Z: Y: i. U, E+ @
% m$ U) C) d4 C- m int i = -1; h# @! F, q% _& P6 |
long l = i;
3 [, M* B, B9 Y; Q7 Y# D3 _* A6 I. e; v+ r# |6 e4 R* U
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行3 P! ~( r1 _* q( g& }& I
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围- b6 H9 m: D1 B
int i = 128+256;// 00000000 00000000 00000001 10000000
6 j' Y$ }2 A( D4 y) b' J# a byte b = (byte)i;//-128
; S6 S" M" M6 S4 V1 {3 e4 ^1 \* B/ e* x' {+ ?1 a: \6 w4 `4 n: p* m# K
long l=0xf80000000L;
3 J) B" r! H# W+ c int c = (int)l;//负数
2 e4 H0 {# H& H/ w! T% z
% ~% W8 e' _5 N) j; M, D. Q l = 8;
: E1 W- e2 J. U1 Y1 [ int d = (int)l;
" P" a0 B; m) }+ b3 J( Q6 v. u9 {6 d' Y! {
float pi = (float)3.1415926535;//损失精度
2 R* L& {' o& P
- C* u ?# B3 M char c = '0';
8 }6 Y; _- O* U) \5 l1 ~: S* ~6 N3 P char x = (char)(c+2);
4 t& a% ?2 y# g" a/ ^5 }. z+ z2 Q) \( j
|
|