该用户从未签到
|
1. java 变量
* }' i2 r& v1 R' \& J 1) 变量就是自然语言中的代词
$ `# T+ C0 y+ @$ G0 w& x7 ?/ H. _ Person he; int age = 15;
3 X0 g( t# u; X4 x( t //age= 00000000 00000000 00000000 00001111
0 p5 j4 Z1 M. P1 X$ m* i System.out.println(age);//15
2 W6 ?/ A6 a5 x' r7 ]9 ~2 p. n% R& k 2) Java 中的变量, Java是强类型语言,5 ]& h8 L p2 y9 q8 Q% f! H$ ]! u Q& _
A 变量必须声明,并且初始化以后使用 int i=0;5 \8 T- Y4 I% ]% Q9 L% S$ X# m0 f
B 变量必须有明确的类型# N! M. }* X, @* s8 R$ _& `1 p
C 变量不能重复定义
; h: F, D+ d$ J( H 3) 变量的作用域
- Y$ B2 D9 r" p7 L3 G# C7 J# F( H a 在声明的地方开始,到块结束为止2 X X& B: }- J. L8 o# g
b 离开变量的作用域结束,变量将回收。
& h6 `& }! J! T* a6 z2 u) V+ M) _3 Q2 Q2 e& o- l+ W Q
2. 进制转换基础
; S. H* B- }' \0 Q7 l, c 1) 十进制 : @5 ~1 ^% d2 S( b T" l- Z
逢10进1' S( R2 p. O1 b" @
基数: 10, o% H y3 d7 Z: F3 ?9 [3 Y% V3 N6 h
权: 10^n, 10000 1000 100 10 1! y" j9 Z" I7 j8 S
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 2 f9 l& O5 F* u; s( k
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 $ A# g* F% y# w9 |5 V3 m1 J5 a
= 236792 V& Z7 s# |6 Z+ |$ S7 U
7 i. j9 D8 I X 2) 二进制
( m# `$ ?; c% A( }1 X1 [ 逢2进1
7 J, i5 @8 i! j7 h 基数: 2- k. k y' B% ]# x3 r
权: 2^n, 128 64 32 16 8 4 2 1 * w" q$ ]+ t2 H B$ R8 `0 e
01000001(2) = 1*64 + 1*1
! G) m$ P( _; n = 65(10)
2 ?9 F$ p+ Y, Z) H 3) 补码基础7 j3 v0 W u1 h2 p( ?
-128 10000000 11111111 11111111 11111111 10000000$ o9 Q8 O+ E& N3 `0 s5 {
10 2进制 ... ...1 {7 P1 j! a. B6 H
8421 11110111 11111111 11111111 11111111 11110111
: o' `, O! d: u: W-8 1000 11111000 11111111 11111111 11111111 11111000 " L6 r: A0 `5 N" f5 H- a2 Z9 ~0 }
-7 1001 11111001 11111111 11111111 11111111 111110012 G9 Y" H6 K) b
-6 1010 11111010 11111111 11111111 11111111 11111010
$ l; |3 [' h9 z. d4 @-5 1011 11111011 11111111 11111111 11111111 11111011: Z5 M( A. S8 g3 M/ W" L: J
-4 1100 11111100 11111111 11111111 11111111 11111100
0 k. h' l5 q5 d-3 1101 11111101 11111111 11111111 11111111 11111101, z1 x0 S# J7 G" D2 y5 G! Q. a2 K
-2 1110 11111110 11111111 11111111 11111111 11111110
) x* P8 Z& d+ Q V& y-1 1111 11111111 11111111 11111111 11111111 11111111
- k2 a4 l" G. ]4 P+ B 0 0000 00000000 00000000 00000000 00000000 00000000% Z) |: F1 c2 i; S7 B, A7 {
1 0001 00000001 00000000 00000000 00000000 000000014 W u: `/ L. ?
2 0010 00000010 00000000 00000000 00000000 00000010, u! R! o/ z! G. P% j
3 0011 00000011 00000000 00000000 00000000 00000011- `9 g2 K/ e0 e+ U) C! ?
4 0100 00000100 00000000 00000000 00000000 00000100+ {7 _- ~1 G$ W' j- y4 U
5 0101 00000101 00000000 00000000 00000000 00000101
. a/ g5 [% d2 w0 g% }6 q7 T2 f% ` 6 0110 00000110 00000000 00000000 00000000 00000110! X1 v$ [6 r7 }( u8 c, H: C' x
7 0111 00000111 00000000 00000000 00000000 00000111 a! p" O/ d9 X2 R l
00001000 00000000 00000000 00000000 00001000$ \1 a1 `# Q& W! l' d4 p
.... ...
' v7 O2 d" @$ }& Q7 G; I 127 01111111 00000000 00000000 00000000 011111112 z/ g i7 B! U" t1 w0 q
补码运算:; x& f3 g5 I% {; D8 |- S
-1 1111" }8 v% o G6 {! ?
-1 1111
% s3 R4 @; k4 {$ w * 5 h& X( g, m$ _8 r& B5 ]
---------- / N9 ], A! a }( ]0 g& G
1111
: W* I0 b3 U" E% P4 O 1111: C& A/ O+ H! x9 O
11113 u" \7 Q' L0 v5 P: H2 O6 z+ \5 W2 [7 {" [
11119 B$ w# [: W# Q( W, b2 k1 w% X
1010101
8 s+ f6 a2 W& {0 V* k) { -----------
' N1 i+ L5 G. D( B7 q6 M 0001
! l. ]0 ~2 T0 O2 Q9 A$ M* X7 j: O. r9 e8 a" j) _ ~, [( r
4) A Java 内部只有二进制补码+ T# n0 n+ }+ f# H4 E
B Java 内部采用补码运算, 自动发送上溢出和下溢出
8 i2 M9 i, J* Q7 `2 c0 c C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
0 d0 r+ g+ N! g9 A8 O D 补码的负数 最高位是 1, 也称作符号位
- A: b' P3 G3 O* S 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据7 I1 J6 r5 a/ [
16进制
9 N' y8 m' `6 K/ n* R' r 逢16进13 ?$ d6 @3 G1 @
基数: 16, J% ~& b$ \6 V* `5 q
权: 16^n, 256 16 1 $ n, u+ E, R+ | a: U- E8 X* {# J
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f4 c5 X2 l4 s1 J
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15( N( D, {2 Q: m- V2 ?2 P* o# J. p/ q
; ]- Z! q" q% a6 a8 T( w
41(16) = 4*16 + 1*1
5 V6 R4 \ e$ a = 65(10)
4 p1 z& q/ {6 x6 c- r+ x, Z = 0100 0001(2)
/ c7 @7 e4 a) S( S( x8 z6 o 8421 8421
' \0 M0 \3 m9 a% L% c 4 1 (16)3 T9 R- ?" p5 w7 _
1 X; @8 g% ^" `( n9 }% F7 E 128 64 32 16 8 4 2 1 & W6 y5 L9 [6 Z7 Z3 ^
0 1 0 0 0 0 0 1
' x( d7 y3 t7 o6 _; `& E3 Q- R 练习:转换以下十进制为二进制 192(10) 137(10) 145(10) 0 ^ N0 B. ?" v
192(10) = 1100 0000 (2)
9 w' x e) \9 o* W# H8 U5 i c 0 (16)
) R. c* K, ~7 `+ S+ V -8(10) = fffffff8(16)
# u3 r2 U; w+ S0 v 进制总结:
0 g b$ M6 Z* O( t 计算机内存只有 二进制补码2 C0 X" m! y5 y
默认输出, 按照人习惯输出10机制结果+ M- M+ X9 F1 S; D
16进制是, 二进制的简写, 16进制本质就是2进制 c; m6 ?6 ?% ?$ @' k9 s# l: G
16进制存在的价值: 方便书写2进制!0 e9 u9 d) ^2 L( i9 ~$ e0 k. C! y
8 E. a; \ w Q! e% j
3. Java 数据类型: 分为引用类型和基本数据类型! J/ b. X3 [. w9 K+ C
1) 基本数据类型: 8种% L+ e. O8 k- L$ I6 s5 h+ U$ G) ^
byte, short, int, long7 V4 X4 }) ]/ ? p! O( Z
float, double
; B& n- Y6 }' h8 F) \7 H, \ char. \/ M/ y+ Y% H) G. ~
boolean
. F) Z9 r/ H# c9 q5 _$ R 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数2 U- u+ @ N. F! @; W
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
6 q) r& Y! D; O- m" j% I short 16位有符号数 0x7fff 32767 0x8000 -32768% j% i E5 W/ R6 ~4 W) m' P
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G " y; v- ?, [0 n4 `1 ?
long 64位 ....
1 n+ b+ x7 a+ J% U* ~ 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
# w: X& r8 |: A* G4 n1 D( r3 V 小类型直接赋值.
( ?$ `8 r5 ` w 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
& `% B. n, g% P6 G# A% X6 c java 底层byte,short 按照32位计算4 ~# F% [9 K! m+ \) z A5 V
6 K3 ?. j" @3 r' W3 v# f
long 类型的字面量使用"L","l" 后缀
% p9 q# X5 p4 g+ H; m! s5 X' @5 w, Y6 ~# Y" ]) B
3) 浮点数, 小数 (不必掌握 浮点数的存储方式)* q' Y2 `1 E5 v% R: x: T
浮点数原理: 10进制浮点数(科学计数法)原理4 T* I2 c, S6 u" Y& q2 L
2356189. = 2.356189 * 10^6. t- P# v3 {/ N9 q2 J
概念: 尾数: 2.356189 4 N# h# Q( E W& e
指数: 6
( `& M- H) Q' H' Y, G 基数: 10
: Y3 N' L# C8 u2 I pi = 3.14
$ Q; d' R- M' h! v) \8 Y' U 3.14159265358979323846264336 X: y& M& ?5 d9 X
/ C9 Y4 ?$ u8 ~7 t2 o
: t! H+ b. R7 |* F1 K
二进制浮点数:
- G7 ]& |0 }( m# Y 101001010101. = 1.01001010101 * 2^1011
. \- r% U( V. s6 n7 t: b 概念: 尾数: 1.01001010101% p2 `5 m, L: k
指数: 1011
/ y! v4 P7 A! d7 |/ f r 基数: 2( L+ w$ f9 i5 p1 \8 A: S
$ k- k6 g! G5 Q% T5 E float: 32位 其中: 1位符号位, 8位指数, 23位尾数. B% b4 ^( s: h
; ?' @9 f2 p; ^4 F 精度: 23 位; }* b5 Y% P; o
int max = 01111111 11111111 11111111 11111111
1 b9 S _$ w6 t3 N! i8 m float f = 1.111111 11111111 11111111 1 * 2^00011110
: [0 F* j0 [+ W% I/ X, F% I1 k
# u& F9 N1 r" _, q+ |9 ^ double: 64位 其中: 1位符号位, 11位指数, 52位尾数
& W+ ~9 r6 `1 ]7 V. G/ p1 ^. D! B l9 s* b
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float8 E$ ~9 }5 m# J; b* z# E3 e( u$ l
3 x2 R7 u. @0 c% |) I/ B 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数. M* R2 ^! j6 w. H
数值是一个字符的unicode编码值. A. Q4 f5 l9 G, i u. p
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
+ U$ [$ L& P) P; q 阿拉伯, 希伯来, ..... 8万+ 字符
3 s0 l' P! A. _% f N 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
6 F( J5 i8 G/ t/ M2 [ ASCII: 0~128
" w" x7 D3 v3 ?8 g Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
7 k# B2 E- i9 c unicode只能够最常用的部分
4 h$ H3 O! @: u& M$ l2 N3 c( m) p
*最小值:0, 最大值:65535 = 2^16-1
* b/ u. {) X+ Q, k# S$ d- P *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
( x0 }! u5 [2 p/ B z8 h- g, P 字面量也是整数常量! 52 48 , L8 d: i& O7 ^# N3 _
特殊字符采用转义字符表示:2 |* c: P8 ^( \( w7 K7 o
如: '\n' '\t' '\\' '\b' '\r' 9 q" F# ?. Q2 D
'\'' '\"' '\u4e2d'
1 d$ X1 g k* w8 l$ ]
& z- A9 N0 A" {4 x char c = '\\';
7 M" w q5 ~: X; k2 ?* l
" i% B1 `7 B0 J6 [ 'X' - 'A' = N
9 [' V2 U6 Q( g m: B. u 'x' - 'a' = N2 n0 B6 `3 [- |% @# L, y4 d
X = 'c' - 'a' + 'A'9 R# z0 ~0 L( `( E8 D
9 H6 [# A' @; [, N; G: D4 q4 ?
5) boolean 布尔类型 表达: 真(true)/假(false)7 M' l! n! t7 o f
建议使用长变量名定义变量
3 C/ Y5 Z) r s& t" X1 D8 J( y boolean started = true;+ ?5 z Z0 M, g, q0 O; ~
boolean isMan = true;7 u2 w' j* ~. I% ]1 r
isMan = false;+ Y! t5 {. J, E4 t% ~
boolean used = true;//二手的4 I7 m% @1 X0 [2 n' S
if(used){
; r! ^% i5 a# x/ K6 M+ Y7 | System.out.println("打八折"); 4 R% Y2 s% z% |0 l" y
}1 t! R8 W9 \5 [) |7 y
不建议 定义没有意义的变量
& v+ r3 v7 J% O0 B( t boolean u = true;//u = you3 ^5 _$ F; _( K
boolean flag = false;. S, w5 ?% c, d* `
0 q1 M& ? k6 t. f9 C! K4 q if(flag){
; p* b \9 i* A( V) }/ U5 }' m System.out.println("打八折"); 0 a/ Z" ~5 C1 x! _+ u8 D* i: u9 g7 d9 |! C
}
$ V9 ]4 K" n4 k+ j3 |2 E/ ~; e
5 B: s: e$ E3 Z& A' k4. 数据类型转换
! ]# B% ?4 |# R% v char ->& {. J* U4 p2 c' {2 q
byte -> short -> int -> long -> float -> double
5 K6 |& Y1 E2 S; X8 O1 a# W- k3 U1 ^& }
1) 自动类型转换,正方向,小类型到大类型的转换会自动完成. v% Y) T; A- _3 U' b# Q
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变! i Q! O, V Y8 M8 V1 |" f
注意, 整数到浮点数转换会损失精确度
" M2 ]! X- a5 f! q$ N6 e+ [" ` 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
0 K7 ^( z6 |% ~5 {" n( r2 G% A' G/ s, u3 o' j# W
int i = -1;
# y2 F3 i5 f5 m f, X" U! o long l = i;
2 J/ |3 o ~7 d! ^ @# _, h0 p; r. M% ^4 M1 N1 ~! S$ ~* |, A8 @# F
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行0 T! |% |( Q% S8 c
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
2 z4 R8 o2 C& A& R# ?! s9 `! t int i = 128+256;// 00000000 00000000 00000001 10000000
6 h. [1 f1 X& t+ R& j7 f byte b = (byte)i;//-128
; _4 U$ E! j; J; X2 V* _( V* r3 l- w- P* Z1 \( d5 _/ a3 m
long l=0xf80000000L;, j8 e# A1 @) }( S+ j
int c = (int)l;//负数& Y6 a, ]" n& x0 N: y- j
( B. t3 u: \( z5 x. j l = 8;
( J, i: D" A! e! e+ i1 y int d = (int)l;% W) A8 Y# T1 Z w+ {/ e
: i' U# j! J$ f float pi = (float)3.1415926535;//损失精度9 F0 I0 `2 a- }6 W6 r0 n) N
5 |% A( A% P0 t; n/ ~0 ?0 b( o
char c = '0';5 k! N7 Y& F* U" I/ P
char x = (char)(c+2);
/ X0 Z: j& f, G% m% `* N; W; A! V; J
|
|