该用户从未签到
|
1. java 变量
2 |1 Q8 r: s# \! u2 ^ 1) 变量就是自然语言中的代词1 I' b+ W) V$ u' |& g, L
Person he; int age = 15; 0 t; z3 N- d" O* o2 [
//age= 00000000 00000000 00000000 00001111; j& V' V' z8 [1 L) a* a
System.out.println(age);//15
& T% A) g& Q1 y5 f% _ 2) Java 中的变量, Java是强类型语言,
9 T" e8 u9 W0 X0 I5 l( S$ y A 变量必须声明,并且初始化以后使用 int i=0;
) Y0 v9 |8 K2 W- e7 Z& Z1 r9 f. S B 变量必须有明确的类型
" a3 g7 @( g. W" k$ U C 变量不能重复定义0 z$ N: u/ s- _4 G
3) 变量的作用域
* |0 g% f' U1 w6 B a 在声明的地方开始,到块结束为止
# G2 p8 w J! h0 \2 f b 离开变量的作用域结束,变量将回收。
# i3 f9 Z* X) e0 Y
3 v% a- i( x9 W7 f2. 进制转换基础
% g4 z$ u: l/ f- }, F 1) 十进制 / f: J1 s$ M! q& ?* Q n
逢10进1
~, f& n3 o1 }& _6 B 基数: 10
$ h6 J; ?$ u& ? ?5 D! h! w6 [ 权: 10^n, 10000 1000 100 10 1' ^/ R- a% h: i U1 U! k
23678(10) = 2*10000+3*1000+6*100+7*10+8*1
4 m. U* B; j+ D5 F4 P7 W = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 H7 e! U2 ~9 A2 F2 |7 L
= 23679
+ M( s; z9 ?9 Z6 s0 O: R
5 S2 d6 W' }$ |0 L1 _ 2) 二进制
2 c9 n9 N8 v( }8 I' ~, N: y2 d 逢2进1. n- R6 |& U2 `9 R+ G2 u
基数: 2
( g7 z( A+ w; b4 f 权: 2^n, 128 64 32 16 8 4 2 1 - b U- v% w `; j% }3 z1 ]9 f1 d1 O
01000001(2) = 1*64 + 1*1
' e* ]& U$ `5 F9 @ = 65(10)
8 }- l9 @. h/ x2 V* j8 A6 L 3) 补码基础0 i9 t. m; X- W, Y# I% P
-128 10000000 11111111 11111111 11111111 100000005 D4 X \: C3 o; Q; L# N
10 2进制 ... ..." w: G3 M2 T( ^6 J" E8 e
8421 11110111 11111111 11111111 11111111 11110111
$ C+ h+ c: {" { M-8 1000 11111000 11111111 11111111 11111111 11111000 ; z/ {8 G: g! J% o6 z% R
-7 1001 11111001 11111111 11111111 11111111 11111001
1 Q A: u/ n' q( z# G S-6 1010 11111010 11111111 11111111 11111111 11111010
5 v0 I/ E* q7 w$ O, x1 @-5 1011 11111011 11111111 11111111 11111111 111110115 y. L& E* i) C# s8 ]
-4 1100 11111100 11111111 11111111 11111111 11111100
3 U; d- Y( K) M9 M$ R* C-3 1101 11111101 11111111 11111111 11111111 11111101
: s9 @. N& l) N8 u4 A. `8 c-2 1110 11111110 11111111 11111111 11111111 11111110
! B6 a7 ?3 Q# s1 S5 I& ~7 r-1 1111 11111111 11111111 11111111 11111111 11111111
2 A O) u! V6 T1 e) ?' N' g9 n 0 0000 00000000 00000000 00000000 00000000 00000000$ U5 |5 d: G4 I L. U3 I" Z
1 0001 00000001 00000000 00000000 00000000 00000001
+ z8 `0 e9 }( D" @ 2 0010 00000010 00000000 00000000 00000000 00000010
3 S! |3 a' T$ y 3 0011 00000011 00000000 00000000 00000000 00000011
6 d& b0 g; h" B" \ 4 0100 00000100 00000000 00000000 00000000 00000100; ^2 G: h2 D1 e( \: l1 p% i- A
5 0101 00000101 00000000 00000000 00000000 00000101
) w4 C; y0 [" O 6 0110 00000110 00000000 00000000 00000000 000001102 |/ v0 k3 i- i; g* W7 ~0 G
7 0111 00000111 00000000 00000000 00000000 00000111 ; p/ `1 W; A( a4 i6 w1 p: V* @
00001000 00000000 00000000 00000000 00001000
1 T% d. R j8 `2 T5 }( n# d" g/ R .... ...
' t2 z- O3 u( }; V" O 127 01111111 00000000 00000000 00000000 01111111
" `1 e( \# e; n! o0 B8 I 补码运算:
$ N* I! J( H5 e' }; y+ n7 r2 h -1 1111
7 r8 g! ^! G4 p2 _7 |! a/ s -1 1111! w8 r& h4 D w# @/ O
* + ]. Q/ N7 w4 M
----------
3 V; R# k' P% B* B0 S* w4 Z; E 11119 _# R4 L1 k P2 w. D
1111
" q& Z' k, s* o! x0 K7 B; u 1111" |& `! v+ `8 o" k0 N
1111
8 c+ K( c4 `8 T! W/ t% O 1010101& d* L0 \- B9 H6 I, Z: I) `
-----------
/ X7 s0 M Z! V 0001
. J7 r- z) K5 V5 `* n9 `: N- T$ d8 I2 f, t
4) A Java 内部只有二进制补码" c3 P! Z8 m- j5 B
B Java 内部采用补码运算, 自动发送上溢出和下溢出7 {1 S, n5 s) k9 q3 R
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出7 W/ q" s1 ?0 Z" e* ~
D 补码的负数 最高位是 1, 也称作符号位: `1 D$ m, {# }8 f
5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据7 x# U* i' o* v5 K2 ?; X! q
16进制, M0 d& ~% ~3 T- s. Z: ?
逢16进1
8 X3 t1 m/ B& u7 k3 o4 _% E, G0 g5 ] 基数: 16$ e2 u6 c! g! e+ w$ b7 ~
权: 16^n, 256 16 1 8 { _; a& p) m
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
; f8 Z- ?8 |" ~: H7 T: S# m 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; z5 H% \* j; l( ]' w1 w) Y
! V2 }2 M( C! m- l
41(16) = 4*16 + 1*1
8 ~$ H1 k# b: m" B% T$ s. k% T# d = 65(10)0 s6 U$ X% ?8 _( g& y0 `. x
= 0100 0001(2)8 {: _8 W5 J4 k2 M6 t
8421 8421
' |, J; w! S5 ^7 }7 k0 v 4 1 (16)
" m. J5 P( {4 {1 j& _+ {5 p# i6 y) e/ p! r) W+ f1 v
128 64 32 16 8 4 2 1
7 {3 ?1 e, T4 p; W2 J 0 1 0 0 0 0 0 10 ~& r" P. Q; s) _
练习:转换以下十进制为二进制 192(10) 137(10) 145(10) & Z4 n) Q4 t, _& x! M5 ]( L( s
192(10) = 1100 0000 (2)
0 v2 d1 T, \: k% K3 E! x c 0 (16)
% v d: M* a; `# ~; | -8(10) = fffffff8(16)9 D# J/ `7 j+ k" t) O+ t; B
进制总结:! c3 k+ [) l' M% j1 u4 v
计算机内存只有 二进制补码4 N- I) R1 ~* ?& `
默认输出, 按照人习惯输出10机制结果& B6 L, Y( f' U: @# W1 ]0 v0 U- T
16进制是, 二进制的简写, 16进制本质就是2进制
+ Z/ Z3 a8 y1 [# S1 [1 i 16进制存在的价值: 方便书写2进制!
1 V. f. t1 a2 D7 \2 ^0 p8 O8 a- [& t6 M( o5 Q7 z* D; h
3. Java 数据类型: 分为引用类型和基本数据类型! q7 b3 l2 s7 Q% O% J
1) 基本数据类型: 8种" c1 q/ P& u: ] F4 V3 w7 h! `
byte, short, int, long
% D0 Z( p2 D5 Z* X4 f! B float, double
+ O7 z' H& r% o7 p& j: I char6 }: a1 B- n) x: k4 @( L% B
boolean
9 t1 ^4 `8 J: a( n 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
" m8 E6 C3 l! L( ~ byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
- y( F9 C4 u$ L, D1 Y; J7 Z( Z3 j short 16位有符号数 0x7fff 32767 0x8000 -32768
$ T# a: O8 X4 d) h+ h int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G
% l6 _9 A7 f7 ~/ A long 64位 ....
! `1 Y0 ~& n, H) Q5 r7 ]1 ] 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
4 N2 C! v$ ]$ Q" u 小类型直接赋值.
* f+ h4 e" K6 F" E9 _. }0 z7 p 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算" H8 F+ E9 L% v- |3 x0 E
java 底层byte,short 按照32位计算
3 ^" P/ C, y" x0 N, m4 P8 B2 b9 j U# o4 u8 x m% n
long 类型的字面量使用"L","l" 后缀4 z4 a5 j; Y$ _' c
$ ~. C4 w& Z3 B! u5 R2 k 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
, [1 R0 c) t, a4 P) N 浮点数原理: 10进制浮点数(科学计数法)原理
. L' T9 F6 A+ D- L, f$ s( J 2356189. = 2.356189 * 10^6
/ l% m3 I& Y5 [' N; f' w 概念: 尾数: 2.356189 ( x7 M( a! W* R0 _6 o5 D
指数: 6. ^# S0 l5 }4 B% d
基数: 10
; ^1 `- X9 W1 H pi = 3.14. J& J1 f; P; o+ v) r
3.1415926535897932384626433' v+ F. @: |& b, [
7 b% I" ^' T0 P- O7 v0 h# C' m7 A& G# C3 r4 H8 A+ W4 a* o2 i
二进制浮点数:$ e+ X2 m& R' l, p8 C/ e3 N% O
101001010101. = 1.01001010101 * 2^10117 z- P3 Z5 @. X6 _
概念: 尾数: 1.01001010101
% d% A4 x' k( D+ s6 I- e8 s 指数: 1011
5 M n0 a3 W3 e" |2 X4 a 基数: 2
- x* r0 C: h7 ^! ?) n6 Q* g q; H7 `. d! R9 |+ P$ E
float: 32位 其中: 1位符号位, 8位指数, 23位尾数$ S: S& ~8 I# W+ v
4 M7 k6 t. X' D8 p
精度: 23 位
: p* C3 b# c7 i5 ~. ^! N! p6 s int max = 01111111 11111111 11111111 11111111, o$ n: j. M) }. a4 K
float f = 1.111111 11111111 11111111 1 * 2^000111106 ]( G1 l2 y" R/ z6 \7 z! J: c
' E* J9 M/ x3 Z7 U; H# S% w
double: 64位 其中: 1位符号位, 11位指数, 52位尾数0 e4 z7 M+ m$ P- Q' W& s
5 o! o1 O# }: R' ?4 }1 @' w! |! L1 R 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float5 y# M6 v5 [& ]
8 B" v- |9 ]" Z" X- I9 z4 b: X! S 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数" l* Q( g7 ?3 O3 h8 f
数值是一个字符的unicode编码值. " c; D+ t: @0 y2 f
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩* W* C+ t. d; U8 p* k
阿拉伯, 希伯来, ..... 8万+ 字符
@' x2 v* g" i) W$ F0 V 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
9 K; k! t9 F5 X f ASCII: 0~1283 ~0 @; U7 t. l0 \& n: B$ U
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示% z# B3 n- r) ^8 D8 O) z1 j
unicode只能够最常用的部分& h$ F% o& j" T1 m: {
3 \& f; K; o! ~! `" o
*最小值:0, 最大值:65535 = 2^16-1 {7 ~# O# [# M' q
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4/ N' a+ B! Z, k' p$ a
字面量也是整数常量! 52 48
+ R8 N" ~8 `8 b8 R, Y 特殊字符采用转义字符表示:
Q$ t7 s% L) {% B7 U: ] 如: '\n' '\t' '\\' '\b' '\r'
! f3 U4 E2 `- X+ L( a3 p$ C4 s5 U" Z '\'' '\"' '\u4e2d' r# m0 t. R0 e5 ]. D0 j- \
% [6 P9 k+ e. E* j5 ]0 l, o char c = '\\';
# ^9 u+ l2 [5 W! R
6 @7 b6 p. m1 }( A9 P b 'X' - 'A' = N% l1 _9 i' P$ [; _4 J
'x' - 'a' = N
1 j1 }1 Z0 y! c; l. N4 Q7 [3 p. F( l X = 'c' - 'a' + 'A'
8 D+ I' \# H5 B
* N# _- M' C* g' y: _7 E 5) boolean 布尔类型 表达: 真(true)/假(false)
$ W' u5 Z! @9 I( e0 s 建议使用长变量名定义变量: a$ \/ _. m" n- p. Y* h
boolean started = true;
2 o# N& H1 i$ z: k! j2 a" e boolean isMan = true;
$ o8 m, b6 h$ B1 l isMan = false;! O, i' u9 W# ]2 D# v: f
boolean used = true;//二手的* Y4 y4 W" F( f, J C G( \
if(used){
& t4 i; s; a+ l System.out.println("打八折"); ' s. {; u+ _! g3 @1 v5 ?
}& S! t' e9 I! L( ]0 ^% |; y
不建议 定义没有意义的变量
- l d8 {7 T& s& @ boolean u = true;//u = you
, \; d/ |- G# y8 z9 T boolean flag = false;* Y1 y3 h3 I/ P4 w! _2 b5 u
+ s! ^; U+ D( T: X! y if(flag){
5 k% v) M9 O# v) j3 g System.out.println("打八折"); ) m2 \3 t6 o3 x
} $ T4 r" X: }: d* v2 b0 T0 ^% v1 q9 r
0 x% c( @6 `- ^0 n% [; s+ U: L& S# t1 q, o
4. 数据类型转换 6 ~+ |; c8 Z0 p, v3 @( v! |1 J
char ->* m. }3 ?0 {3 P `: z
byte -> short -> int -> long -> float -> double1 p9 P# Y4 o1 F Y+ l L4 c
* h4 ?" a- o+ V, z* f. }3 E* l ? 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成7 d# @% ?" c% @
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变( W# @9 ~$ A0 i9 }' ]
注意, 整数到浮点数转换会损失精确度0 E& C- n' @; I' p
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理4 a9 s- Z- Y( n |; Z# k4 |
. L5 Q; r* {' n/ v7 R int i = -1;2 T2 P& W+ E- g3 V
long l = i;" l5 ?9 Q* }# l2 {6 _+ S0 p
& R, d- w: V+ T$ N
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行; k. n" H: ~- V' g9 I" J
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
: T& Y. @" t" C. x- S% v( c! k6 j/ H int i = 128+256;// 00000000 00000000 00000001 10000000
: p* m. Z: q+ a! ` byte b = (byte)i;//-128
) a+ u: |( L/ k6 q \, g- l: @. U9 c2 d N5 h" ]4 r
long l=0xf80000000L;
# c3 U* v) k8 g$ }: x int c = (int)l;//负数
, c- Q' z+ z: I) a) C4 L
) m5 q0 K S( M l = 8;
6 \! X5 R+ V1 r1 G+ o int d = (int)l;# B2 D% K3 b0 c8 E
/ ~) ?2 t8 w2 l( y
float pi = (float)3.1415926535;//损失精度& [, F+ D" u% n1 t7 J$ [6 ?
$ m* v* o1 J5 d6 i char c = '0';# A& f F5 q6 Q$ b( O
char x = (char)(c+2);) x- \& E- W0 ~5 D" ?
/ `3 r( n6 p, K1 \& G$ M1 w3 n5 K3 h |
|