该用户从未签到
|
1. java 变量4 s, l2 F( D$ o
1) 变量就是自然语言中的代词
2 ^+ Z! O8 z1 f" H$ _+ { Person he; int age = 15; ) K: i# Z% u8 l* w5 \
//age= 00000000 00000000 00000000 00001111: {7 l# I3 P+ y; S7 v' C0 M x$ E( F
System.out.println(age);//15
: P1 J0 }& A. h7 V7 c. \ 2) Java 中的变量, Java是强类型语言,
- S$ p8 x3 G0 \; F2 K0 c* u A 变量必须声明,并且初始化以后使用 int i=0;
3 D) N0 J8 D9 K B 变量必须有明确的类型9 w0 v) Y! w1 b- c9 B6 j+ W. |
C 变量不能重复定义
- o+ K7 T1 \# R6 N" n3 r 3) 变量的作用域- F( J1 a# B# l1 ^ p! A* B+ s
a 在声明的地方开始,到块结束为止
* S- P- |8 h# x. m b 离开变量的作用域结束,变量将回收。
# m# k9 m) S2 s `$ ~ E, I
O1 O" G+ z6 V# l4 k& |' H, I/ T2. 进制转换基础
* h6 I/ J" \3 R" h6 v1 A2 U1 b0 ` 1) 十进制
( k' f7 M9 C& C: u/ ~5 E6 t 逢10进1
8 k+ s* U" v& z 基数: 10! ~* }, Z) U9 z; L* B
权: 10^n, 10000 1000 100 10 1
) l& K' D1 g1 C, H9 A2 _; W 23678(10) = 2*10000+3*1000+6*100+7*10+8*1
7 R3 A4 |5 @) [ = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
8 m- G7 o' }- w" Y4 _: u = 236795 g% ?2 z+ F: e, W' M, o
3 l% U& r( V9 }$ |) i, J+ i+ T W: K3 ?! \
2) 二进制
. o- Q8 K$ R) c* j; l7 i& G8 | 逢2进1" K. k8 z2 o& w+ l" t
基数: 2
8 |8 a" n: b' Y# a0 U) f% v7 M 权: 2^n, 128 64 32 16 8 4 2 1
9 A2 [: Z6 x# r6 o* i4 |$ @ 01000001(2) = 1*64 + 1*1
& o1 B" |) R9 R6 Y = 65(10)/ Y1 i% Q1 T I& D s$ |
3) 补码基础
4 Y" B6 P: e n! ]2 b -128 10000000 11111111 11111111 11111111 10000000
7 n" u% w" ]5 g! }10 2进制 ... ...
* M- x7 j' a; H, _3 G7 s% S# I 8421 11110111 11111111 11111111 11111111 111101113 J& Q( B( b8 l+ A/ V% [" K
-8 1000 11111000 11111111 11111111 11111111 11111000 0 O- H1 S% B1 Y
-7 1001 11111001 11111111 11111111 11111111 111110011 W6 ^) P( ]% h, x
-6 1010 11111010 11111111 11111111 11111111 11111010! k' F- u o; B* T, Z/ D
-5 1011 11111011 11111111 11111111 11111111 11111011
3 G7 U: [, J+ B3 E. I5 v-4 1100 11111100 11111111 11111111 11111111 11111100
6 y6 m0 m' U9 p/ b# x2 c5 i, c-3 1101 11111101 11111111 11111111 11111111 11111101
( v1 C' f# ~& p R; R7 V3 ]+ f-2 1110 11111110 11111111 11111111 11111111 11111110! y* j6 E3 D$ j, j4 A* I
-1 1111 11111111 11111111 11111111 11111111 11111111( w' \9 B6 x7 ]$ b
0 0000 00000000 00000000 00000000 00000000 00000000
. G$ |1 V0 d4 L6 T 1 0001 00000001 00000000 00000000 00000000 00000001' E/ |! q9 I9 H7 f* k; ]( {/ r* O
2 0010 00000010 00000000 00000000 00000000 00000010
! g, \ O- C+ B# L% Q( z7 ]1 l 3 0011 00000011 00000000 00000000 00000000 00000011# o! ?6 U& e+ D; c7 s% m
4 0100 00000100 00000000 00000000 00000000 00000100" i& t( Q! {6 Q
5 0101 00000101 00000000 00000000 00000000 00000101
9 c- I$ K1 L! {" R# F# A. t" C 6 0110 00000110 00000000 00000000 00000000 00000110* D8 p' l2 _5 L' a9 l# a2 p
7 0111 00000111 00000000 00000000 00000000 00000111
5 j% T3 ?1 [2 i: X8 C( l$ o 00001000 00000000 00000000 00000000 00001000
4 I* L4 e$ Y9 Q7 b$ T .... ...
+ Q4 W J: e" J3 |! J 127 01111111 00000000 00000000 00000000 01111111. Y* z3 z( A8 N' N1 u+ c3 `: f. [, Y4 F2 x
补码运算: t5 \. \. A0 q2 ~7 x
-1 11117 |' T- }1 V7 T- \' E3 Y: `# K
-1 1111
1 O2 ?1 c7 L' p2 |0 {2 M1 V5 V *
# U c0 U# g* R ---------- 1 X: ~, b* ^6 c! t* z
11117 j, w w* Z$ \# ?$ t3 e
1111
7 v3 F7 m: K* f 11114 E' c0 h/ x V# ?# @! }$ s: d
1111, y; }$ A4 ?; V( ?& t
1010101
3 z x/ E( J- Q! q -----------
% g( ?* x/ Z9 b9 K$ F 0001
, q) @- [8 n) }7 Z+ b
+ g5 O0 {8 H# T5 ]4 H 4) A Java 内部只有二进制补码
/ s( X, c4 Q" d* G0 l. P2 Z5 [ B Java 内部采用补码运算, 自动发送上溢出和下溢出
* A, {8 \, E8 M1 x2 S# R( I C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
* S. J3 N! q6 t# e2 L3 D2 i D 补码的负数 最高位是 1, 也称作符号位
2 a$ L. ~0 \% R+ Y9 o1 x9 l4 C# e 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据/ ~) r8 m! W# z- ^% F" e# x
16进制$ y) q1 G4 d: }3 g0 c. ^/ |3 V0 R& i
逢16进10 ?+ D9 ^3 G! I* E4 [
基数: 16
: ]4 [1 [( B9 c+ s 权: 16^n, 256 16 1
$ ?/ _- `( \$ |. K9 h+ P 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f* u7 e$ A2 A% b& N7 K" u
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15# G& K7 s) |8 i# [9 V. @ L
$ _8 r9 q; Y) E5 o2 e w% |
41(16) = 4*16 + 1*1
+ a4 x/ k& |; ?1 R' n1 W = 65(10)
! v5 g6 G9 P5 {6 }0 i" v = 0100 0001(2)$ q& K+ a9 D% a1 s8 G' c& ?
8421 8421
8 ?7 |; R O+ Z- Z$ H6 c 4 1 (16)
' J: B" `6 n2 U" L0 D! g6 D! f6 I1 ~+ v& c( ] D
128 64 32 16 8 4 2 1 ) T! S; t+ U6 [! e9 D
0 1 0 0 0 0 0 19 j1 y- J m, \
练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
2 \" T5 T7 k& D* Y w; d9 T* R 192(10) = 1100 0000 (2)0 U1 e$ z+ z3 Q+ [) ^3 r5 N
c 0 (16)
* E! x# [! S$ z: C+ H -8(10) = fffffff8(16)
2 H) p) W* l7 r) O6 P 进制总结:
9 |4 ~: W+ V0 t) z 计算机内存只有 二进制补码
1 @7 ^$ B: \6 ^5 ]' a5 G4 B# v 默认输出, 按照人习惯输出10机制结果% a, {, p- w+ U8 k8 C2 {* R
16进制是, 二进制的简写, 16进制本质就是2进制
' z; T, Z, P" ] y 16进制存在的价值: 方便书写2进制!# J3 \9 x6 ]% O# r- v
5 q; c1 n# t% q& }4 l3. Java 数据类型: 分为引用类型和基本数据类型
% Z( i5 h4 k# S3 o G 1) 基本数据类型: 8种
) z8 G8 I) z+ B' B4 d7 p1 a byte, short, int, long. ]3 [5 [ w6 O; |5 b
float, double - t" X$ V" o @4 W
char; Z' z" @4 r# o5 O/ N, P4 @5 Q
boolean7 q& R- R! p: E3 o+ Y+ [
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
1 S' S' n2 ~$ @ byte 8位补码 最大值 0x7f 127 最小值 0x80 -128 S5 Q* m1 Z; e# v ?0 V. j
short 16位有符号数 0x7fff 32767 0x8000 -32768
& Z3 f$ ]' M5 o/ x, S int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G " N/ Q2 ~' `8 h7 r) Q: p1 I& t
long 64位 ....
F0 B9 V% ~" c+ T 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给0 k. G( C( S ]9 ^, U
小类型直接赋值.
+ W, d9 q2 }3 U" `1 d( I0 E4 X, Z 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
' b2 d' u- }7 Z3 w7 t0 ]) u/ a java 底层byte,short 按照32位计算
& I- i9 [) K a; E: g3 \) I
" p9 }9 {% {* E l long 类型的字面量使用"L","l" 后缀
" z7 B5 S# L& O! E1 G% E; ^8 ?( q; |5 A! _+ Z2 c# {
3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
3 c" ]$ g! ^3 t8 p9 O1 ~3 o( u 浮点数原理: 10进制浮点数(科学计数法)原理, f" u4 s8 I9 K1 K( p& U: R: c
2356189. = 2.356189 * 10^6
/ k+ B) B+ p) [2 B/ ]7 F0 p" @ 概念: 尾数: 2.356189
4 ^9 X" T7 c8 R m8 v% ]5 S: H 指数: 65 N* @( o9 i1 H) e% E @
基数: 10
. I( e3 d; { | pi = 3.14
9 l6 ~+ h& y, c# g% c3 u 3.1415926535897932384626433* S6 C9 N7 U9 F. K7 C& C1 j
* p+ p" P$ S d7 C/ @
) C6 \/ C# c* h* C. T& m% e- w# m 二进制浮点数:
0 u. T* m$ C9 h" M: [- _, i3 \! A$ I 101001010101. = 1.01001010101 * 2^1011
" ^5 j2 h7 N1 U8 H* j0 X 概念: 尾数: 1.01001010101: ~% m# v+ f$ t, v, U
指数: 1011/ f7 ^( [& |5 t- w0 L
基数: 2; q% k% N2 ]6 Y4 {' D* M q. w
- ]6 \, U7 H; m1 L7 f: F, @ float: 32位 其中: 1位符号位, 8位指数, 23位尾数
$ m3 z& E" t& w% t& \& A7 G) v! e! d: v s2 @. |5 g
精度: 23 位! M# n8 O3 S. R0 D. M& M: g1 B
int max = 01111111 11111111 11111111 111111119 j' j/ Q( g0 {" B5 T1 S6 K
float f = 1.111111 11111111 11111111 1 * 2^00011110% D* p% X+ R6 R5 x5 y6 l' ?
+ g+ Z0 k3 i1 k, W, r double: 64位 其中: 1位符号位, 11位指数, 52位尾数 P/ R/ c, s: U+ C
3 C, |( @7 \$ d8 S
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float4 g- j! ?4 o1 J
1 B/ R* l8 Y$ G) e, ~ r
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
' e* U9 Y* u( {9 W; m 数值是一个字符的unicode编码值.
7 Q9 J7 g5 U- i! Z3 [" g' S8 G unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩, X. \% r" A+ W. Z0 C2 E
阿拉伯, 希伯来, ..... 8万+ 字符
/ L$ h6 T" ^5 T# b3 J 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.% g: f+ v* I+ p" N
ASCII: 0~128$ p: U* @: ?- l
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
" j6 d% V' n( z4 g7 X6 ]5 s unicode只能够最常用的部分
1 V: l0 o( m; {; [: ~7 q, A, R7 D9 X/ o) a
*最小值:0, 最大值:65535 = 2^16-12 C x6 C% |+ Z
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
8 k. N- Q- L1 a# g9 ?7 b" C! z0 C9 G 字面量也是整数常量! 52 48 - h W0 b6 X/ W" `5 `
特殊字符采用转义字符表示: Z4 j( T0 l+ @/ ~: M5 t8 k/ a
如: '\n' '\t' '\\' '\b' '\r'
3 p f/ Y! O% Q0 y3 Z: u '\'' '\"' '\u4e2d' ( c/ i4 M( K$ K+ `+ p7 E& t
. N' s, t) _" m0 e char c = '\\';0 b2 |/ t3 ?2 ?/ N9 M/ q
9 G* x! N3 o5 ?6 B R 'X' - 'A' = N
3 T; T) m6 Z! u. [4 |: N$ t! j2 F 'x' - 'a' = N* v, ]) o2 A) V1 v3 e/ o# l, h
X = 'c' - 'a' + 'A' u- n8 c8 V7 o0 L8 Y! F
) X* P3 R) `+ I: o) V
5) boolean 布尔类型 表达: 真(true)/假(false)8 R' q1 @. `% C! P/ u& _
建议使用长变量名定义变量3 A5 ~) @3 f1 ~( [
boolean started = true;3 N+ u3 K" @5 O" G7 \- d
boolean isMan = true;
/ Q Q) f' K v2 ^* E7 y: Q isMan = false;( G! E" _! x8 _
boolean used = true;//二手的
5 o( v& @, G9 ]3 n: |& m# c( R" r if(used){7 `% h) }9 H2 `
System.out.println("打八折"); 5 J; k: y( ^8 C* H7 H( ?+ F* I
}$ d5 h# ?- g% x P. s% T0 v
不建议 定义没有意义的变量
+ {6 n" U, n. T. } boolean u = true;//u = you8 |8 @* w( @% \* g- P# g! v8 I
boolean flag = false;- {# o5 f$ y5 A6 s4 ]1 I9 v' p
- d$ c- j% j" v# K9 u if(flag){
; q- Z/ V/ u4 P( V, J System.out.println("打八折"); 5 A! Y, e, Z- W3 x/ v
}
" ^ k* {5 W: S e
|) M7 l7 }5 i6 _+ y$ Y4. 数据类型转换
# X) q4 \& a9 R4 D$ W* I* o* c0 g char ->
$ r6 i4 x* s5 ]* ]8 Y* { byte -> short -> int -> long -> float -> double
* l* t% y6 }2 E, c' K6 m' g1 f
1 [+ g+ A. Q& l6 l( j 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成0 r5 o& x) |, N5 G
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变2 s, r! S0 L1 O4 }$ m6 [8 w
注意, 整数到浮点数转换会损失精确度
- M2 E- x* ^/ W& _ 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理* D4 A6 t$ [% |0 O) t) H7 n
" g" M" i9 W0 u- K) W1 W" P- q
int i = -1;
/ K* x# u& p. _0 T2 @: X long l = i;, k2 h M% D3 C
$ k# M+ p$ O7 m) v& i 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行# j: i3 e" {* X1 G/ G
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
1 o; {7 x( c' j/ W* ^; b int i = 128+256;// 00000000 00000000 00000001 10000000
/ C$ x/ {, z! j; T5 x7 j byte b = (byte)i;//-128
8 D+ p/ {. J7 [, o0 g
" g; u4 M4 I& S9 A2 ~$ u6 \2 K! F3 A long l=0xf80000000L;; ?$ c6 v" {2 B; H+ u
int c = (int)l;//负数: r5 a& ^" J8 E2 M9 b
X, m. c( B% E% W5 }
l = 8;
" `! g( F* b. `2 H int d = (int)l;
+ f, H' v* k) X2 R0 r1 p. \ E4 K, e6 O
! [3 e" Y2 h# D2 }2 h6 j# c float pi = (float)3.1415926535;//损失精度
4 L+ {* k2 E- S) Y; v1 [2 ^8 M( g
, h( B2 [: o/ W3 }7 } char c = '0';" R/ M% b1 w# a% `
char x = (char)(c+2);6 Z0 ]* Q1 g9 b2 G1 ~& s0 q% \6 o
4 f; Z u& ~4 b7 \# ] |
|