该用户从未签到
1. java 变量# V' S4 K* F+ e. z% b9 I% P
1) 变量就是自然语言中的代词: E/ I5 G: w) T/ `% p H9 @! f
Person he; int age = 15;
9 d' e( Z: q5 s //age= 00000000 00000000 00000000 00001111
: T' J& m# @2 Z* o# ? System.out.println(age);//152 |* G7 X- O% ?8 U' i
2) Java 中的变量, Java是强类型语言,0 f8 a5 j* R! F2 V
A 变量必须声明,并且初始化以后使用 int i=0;
; A. T- t) f2 W: s( R3 X; s# O8 s# d B 变量必须有明确的类型9 R- Q/ \2 T6 i7 Z) C
C 变量不能重复定义 r* `/ ]/ P. K; H- F; V8 d
3) 变量的作用域
6 Y4 |/ q2 j7 o: a ^9 B3 y a 在声明的地方开始,到块结束为止
- Q6 Q: J. j6 O. C" i b 离开变量的作用域结束,变量将回收。
[4 d6 ~5 @% {- ]3 s* [" P% k9 N
3 f( d$ W" R- Q 2. 进制转换基础
; u( M( ?# m9 O 1) 十进制
1 |( a' f5 Y4 K$ f0 |! _: Q 逢10进1
/ @ v" V" r* ?$ U" _2 r0 Q/ V 基数: 10; C% m, t+ M) F) h! V
权: 10^n, 10000 1000 100 10 1! E2 z) S0 K* E
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 + W0 P2 t# d8 u8 ~
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
& B; i* r, p- N' w+ C( E) ?/ |& {# H = 236795 I' w5 M% S& t, y3 d
% E1 e T# x2 l) w2 G+ _5 a5 h
2) 二进制
b, c ]: T0 S. D 逢2进1$ ]/ S6 ^- H1 v; K" {) |+ D0 w
基数: 2
) y1 H. H8 H5 \8 e S" r 权: 2^n, 128 64 32 16 8 4 2 1 * d/ m; ]* f6 d( u- w2 Q1 e4 Y3 D
01000001(2) = 1*64 + 1*1# r# g2 U/ C( ?+ S6 I+ ^# G+ t/ s
= 65(10)9 ?! [: {8 f9 E( b/ Z( R: r
3) 补码基础" V" N8 b* \4 x7 h4 V
-128 10000000 11111111 11111111 11111111 10000000
. H, a0 L6 y0 r8 l3 m0 h8 m$ U 10 2进制 ... ...
9 @" ^1 l& q a; s- V" D" S 8421 11110111 11111111 11111111 11111111 11110111% Q0 C' s0 D9 _9 F3 j* r0 K% w6 F
-8 1000 11111000 11111111 11111111 11111111 11111000 7 x3 A$ y5 T3 E" A6 I
-7 1001 11111001 11111111 11111111 11111111 11111001/ I+ }. |6 s0 x, A0 P
-6 1010 11111010 11111111 11111111 11111111 11111010
% M) X2 e. r+ K1 J% } -5 1011 11111011 11111111 11111111 11111111 11111011
8 F5 i; G( O. l8 i6 W' ^% e -4 1100 11111100 11111111 11111111 11111111 111111008 ~3 t0 d; d4 g# A, |: Z1 X5 y7 [5 M
-3 1101 11111101 11111111 11111111 11111111 11111101
4 o9 y8 W* T5 x" T8 K$ {" T, B* g, W -2 1110 11111110 11111111 11111111 11111111 111111108 ?5 m% V; N7 Y! _2 x
-1 1111 11111111 11111111 11111111 11111111 111111110 t8 H" \$ ^: G4 Z4 \ D- E
0 0000 00000000 00000000 00000000 00000000 00000000
1 f" ?: ?6 i3 r8 d 1 0001 00000001 00000000 00000000 00000000 00000001
5 T. s+ ]8 r* M, P& ^: O- s 2 0010 00000010 00000000 00000000 00000000 00000010
- T. O4 U2 {$ d8 [+ _1 o 3 0011 00000011 00000000 00000000 00000000 00000011
* ^ l2 N% B/ L- `8 R4 d3 f5 C. y6 t 4 0100 00000100 00000000 00000000 00000000 00000100% ~3 i9 z1 ^1 g4 B# R& i+ `
5 0101 00000101 00000000 00000000 00000000 00000101
0 m; U! y5 p$ J 6 0110 00000110 00000000 00000000 00000000 00000110
9 O" B% N) c9 F( f& Q 7 0111 00000111 00000000 00000000 00000000 00000111 - B/ ]* H! L3 c+ S' A1 G8 Q
00001000 00000000 00000000 00000000 00001000/ r. `- X/ O$ R* a) }8 j
.... .... C% O1 [ C# D/ C1 S R
127 01111111 00000000 00000000 00000000 01111111
; p( f, o6 D, X- z$ v 补码运算:
' @6 p5 e$ N* L -1 11110 q/ G4 `* t$ A) h; n" x
-1 11116 e# I# v. b1 r+ a3 n
* + W" k7 n3 S" w6 F) u2 {
----------
+ }, j/ _$ H; |9 k# D: L 1111
+ s% j5 E- P* q( D8 F 1111' e' I% g1 g. D# v t
1111! E3 V @3 V8 ?& K
1111+ p. ^( T8 a/ A0 @& {: ^
10101012 V* J. d- Q- M* [& ]) r' J0 c
-----------
. {2 l# a* k6 Q0 l 0001
4 C0 r4 V/ j/ X2 o( T2 z 6 `! s- R7 l! h, ~3 w
4) A Java 内部只有二进制补码
+ k* w$ x" }) H/ `/ R B Java 内部采用补码运算, 自动发送上溢出和下溢出
3 `! G: m% u* o. F' m C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
# [7 P6 e( K! I6 s2 o D 补码的负数 最高位是 1, 也称作符号位
/ b9 V" S# q- _* p" j# _ 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
1 o0 y7 W0 r( S) V5 Z, o% l" ~ 16进制
; P7 W0 P% [: V. V/ N$ o 逢16进1
9 A, G: R( f4 Y$ X* O8 v 基数: 16
7 w- t; ~& A$ l% g9 W1 ^ 权: 16^n, 256 16 1 % c, P1 p- w; A0 G: O2 a
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f; @: x) }# u1 [5 Z) L2 a
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15+ j; h8 c& d# A
+ U3 S4 Q7 k- d n, D$ t
41(16) = 4*16 + 1*1
7 x4 Q- p$ o' T- ]% l2 g = 65(10)
- v% R: I! l* n" D' A5 i = 0100 0001(2)
8 U' d1 Y4 m9 \9 V& ?2 | 8421 8421- h# f+ U x3 \+ k0 O3 ^
4 1 (16)
' z& N0 X2 _( M; e+ T+ j: x 4 i- E3 _) x# T; s" J1 _
128 64 32 16 8 4 2 1 8 w% V+ T7 |5 ]+ h" y5 {" Y# |
0 1 0 0 0 0 0 1( X w# J1 K6 q! Y3 A8 F3 _
练习:转换以下十进制为二进制 192(10) 137(10) 145(10) 3 F2 v# [2 {" o! N) l- P
192(10) = 1100 0000 (2)
- q3 O% [5 C+ r c 0 (16)% l$ x/ c% F; I( y* H1 l. _
-8(10) = fffffff8(16)4 z1 o ~, F& H; o
进制总结:: V1 @/ Q5 r" K2 e& e( Q; O0 L' j
计算机内存只有 二进制补码
" s+ l% j# t9 z8 q& P 默认输出, 按照人习惯输出10机制结果
) h! Z0 a( J7 }6 a, d1 s- @; S: N 16进制是, 二进制的简写, 16进制本质就是2进制& M. G+ q. l0 u7 w
16进制存在的价值: 方便书写2进制!
4 B' B, C( S( } 2 f: {" h" _! `# ]2 G# g/ C* ~
3. Java 数据类型: 分为引用类型和基本数据类型6 l4 B& \& H, J7 z/ Y
1) 基本数据类型: 8种
+ m. Y7 \! ?8 f1 U3 S0 E byte, short, int, long
- [2 M# s7 g! a; f( e! E- w float, double
7 k' O T" m# U/ N) ? char
9 K; U; n: k) s- Q' \ boolean I1 X/ T' j- z- R- B: E8 N
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数) B6 `, C. k/ g4 K! v5 x! t
byte 8位补码 最大值 0x7f 127 最小值 0x80 -1280 b, q0 {! F9 y6 t5 X. X
short 16位有符号数 0x7fff 32767 0x8000 -32768
) l9 ?- i: U+ v# `2 o3 I int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G 0 b; e( {' B$ A6 B
long 64位 ....
% i9 @! g9 O* _3 z1 K" f. h 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给$ R4 J; Z1 s: Y- ^3 f
小类型直接赋值.6 F: [& [" }' U& h- T0 D! J
使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
x2 }' x/ B" ~' A6 b- \$ R java 底层byte,short 按照32位计算# N* p0 M5 t7 U9 B
$ O4 ^7 N/ ~% Y# r
long 类型的字面量使用"L","l" 后缀3 n8 B# j% r8 V
7 E7 L2 y! K% k( n5 L: g' e 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
3 _* P3 a+ y" t- t$ ]2 w! C+ d: u 浮点数原理: 10进制浮点数(科学计数法)原理
2 k7 r5 T- V" P+ O! l, a6 C0 ~* W 2356189. = 2.356189 * 10^6. v7 d2 Q0 Q9 a$ `) \7 H
概念: 尾数: 2.356189 " w) z/ b$ ?1 I% i
指数: 67 O! F0 q1 @2 m! d: r. U C
基数: 10
0 h6 M( g/ G3 n7 C& m; g8 t pi = 3.14
; H( C& ^) ~( A 3.1415926535897932384626433) Q8 ^! v) W$ ]1 u# C$ ^
. s9 U) _% q8 E+ Y6 o" e
* p9 h( V( ]- r8 r2 o- Y4 ?! }
二进制浮点数:
! a% [. G4 T0 w' I6 W; ]2 a% O 101001010101. = 1.01001010101 * 2^1011
: b, c: Q8 k3 H8 J- A 概念: 尾数: 1.01001010101
5 L+ l: Z& r" ` 指数: 10117 L+ ?. Q* G$ `9 o* Q# c0 L# v
基数: 2
C# {2 }+ p$ m" b5 ? / v/ X8 V1 s5 o' I
float: 32位 其中: 1位符号位, 8位指数, 23位尾数; o9 `3 d. s0 U* K( v0 B ^6 P
p" g% u' _ y: O: t2 u3 F 精度: 23 位* R/ T+ w- ?" A& u- w0 O0 e9 a% U, h
int max = 01111111 11111111 11111111 11111111$ n" [/ A" s; V9 I- j( p$ E+ f
float f = 1.111111 11111111 11111111 1 * 2^00011110
& F( M# s! E7 U! C# h& h
& \+ [, R: I6 J' D' I7 S/ p double: 64位 其中: 1位符号位, 11位指数, 52位尾数8 c, u7 a3 i9 K, Y& V
# j q' }8 t3 t
浮点数的字面量: 默认是double, D d 后缀是double, f F 是float" i6 U! y" @ n; Y- P
; }7 q$ u; w/ s* N0 e& k( d6 u' }) F& p 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数/ k8 }* P/ ?/ m8 S9 |& t
数值是一个字符的unicode编码值. , M+ R4 h) ~& z5 ]
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
& _( P) |! b0 d- H9 k 阿拉伯, 希伯来, ..... 8万+ 字符" x& ?5 F% v4 Z5 k# q* J3 U" P
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.9 q" K$ E2 A- E. Z9 W) Q5 p
ASCII: 0~128
. A" l, {1 M! E4 z; s% O0 v Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
. y9 i8 q- S2 \: m3 @# \ unicode只能够最常用的部分
9 }- |9 Q ~+ F+ {" ?
1 b( i, H1 ^7 E9 X$ U# A *最小值:0, 最大值:65535 = 2^16-1+ I+ u- i8 f& @: Z1 }# N; X
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
2 J% r2 G* H, z7 ^- A) @& P* e+ r7 ^ 字面量也是整数常量! 52 48
" n$ a9 D9 L$ L 特殊字符采用转义字符表示:
4 I, I; z! b3 A1 X7 U% r# z 如: '\n' '\t' '\\' '\b' '\r' - Y* D8 \ X1 ]6 w- P# i1 F. b) b! b
'\'' '\"' '\u4e2d'
/ K8 U& k' x5 `3 g+ v
4 s5 }+ u3 N9 W7 t char c = '\\';5 y' p, ]: A4 `" q6 h3 |
. ~+ U/ Y+ H1 j, D }% W 'X' - 'A' = N/ T+ o3 c. @+ m) ~/ t
'x' - 'a' = N( x3 }# ]" H" G' I, P7 }1 H$ N
X = 'c' - 'a' + 'A'
+ N' q2 M% n+ I6 [ b1 @1 {$ ~
! Y5 ~" _" o" H1 Q4 @7 w, ^ 5) boolean 布尔类型 表达: 真(true)/假(false)
! l; O i m8 O) Y, ^4 ]- H 建议使用长变量名定义变量
* |0 M* }' e$ ]. b" S1 u boolean started = true;# Z- X v0 J- `+ w+ A3 P
boolean isMan = true;
9 E6 e8 ?9 Q; _7 M$ C) | isMan = false;
$ c+ q0 g& q2 A: R( @ boolean used = true;//二手的
6 _1 N% i2 h9 D9 Q0 S; v, G: f3 T- i if(used){ w0 b- B+ z/ y
System.out.println("打八折");
# E/ z. @6 C& P0 S. V1 j4 P }
2 a8 _& m2 b- Y8 v2 J9 X 不建议 定义没有意义的变量
4 ?0 S/ \: A+ U5 k- u+ @% J boolean u = true;//u = you- v8 S8 ?( h* g) F; X1 Q8 n: Z* e) p
boolean flag = false;
8 y2 m- F( w% J* X7 K
# F: {1 |7 J' @ \! w, T if(flag){
x+ f& u2 u2 c4 v1 P System.out.println("打八折");
, [, m# X! }8 D/ l }
) k! m$ }( c. X$ ~/ F
0 L2 }+ A$ K5 l* k" ]5 l 4. 数据类型转换 7 \" V: I' Q9 \9 k6 p) ~
char ->
9 ~7 \0 _+ g) }8 o, E- P, R byte -> short -> int -> long -> float -> double
0 a2 K. j- V$ y0 l
0 L& }0 f, M' j+ p9 c5 D% D- a 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
1 t% Z/ M7 s5 R/ U. N. r& [4 g 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变: d/ i" e& \: q) c% U
注意, 整数到浮点数转换会损失精确度
" r: O0 m' g) P! p 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
9 u$ J0 ^1 Z1 z, e& t6 o ! h# q) h/ D w- \
int i = -1;
) A4 y0 V) C6 p6 p+ B long l = i;
0 X) X9 e+ L8 J & Z0 z7 E) { c
2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行
% l t# X; b( a: v9 Y 的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围: B7 I- k( R* ]" p# m" C
int i = 128+256;// 00000000 00000000 00000001 10000000
4 Y3 j2 r) w( v5 t4 P3 w byte b = (byte)i;//-1283 X2 V; f+ M \+ @7 ~; N& |
2 I D/ |6 [7 Y+ s5 t! E3 T* ? long l=0xf80000000L;2 F1 {; O( U& m6 Z1 s1 i5 O
int c = (int)l;//负数
' D4 Y( B. A j; r2 u9 c ?: ` ~
% B! L2 M; l" v l = 8;0 n' q/ t" N) J+ v; a1 o* j! m
int d = (int)l;, i! r/ W! [ M& J Q5 l
) h& M7 x$ }: {% }4 m) p) K) z
float pi = (float)3.1415926535;//损失精度
e8 n' Z& T7 b M, i" Z8 E6 G8 B* Z
( @8 e4 e: y7 _" n char c = '0';
& j( H, U" a4 e k0 d. _ char x = (char)(c+2);
2 ~* z/ I/ q5 W% O 7 n2 |7 i5 G+ ?! e3 V9 y
科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关2、本站所有主题由该帖子作者发表,该帖子作者与科帮网 享有帖子相关版权3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网 的同意4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意7、科帮网 管理员和版主有权不事先通知发贴者而删除本文
JAVA爱好者①群:
JAVA爱好者②群:
JAVA爱好者③ :