a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 105|回复: 0

[基础知识] 论全世界所有程序员都会犯的错误3

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
 下面是我用javap来反组译程序1的示范: # H0 s% S, B0 e5 p% A' a! `4 d5 Z
C:>javap -c -classpath . Singleton
9 V# x: Z% ]4 v& h
, e1 J5 q  H6 J/ nCompiled from MyMain.java % U. ]0 ^8 t2 H9 f; O: p8 ?
class Singleton extends java.lang.Object3 L5 M9 B; z# K4 `" S2 b
{
' M4 T1 D% E$ \public static int counter1; ) R$ k+ j/ P; u- ~2 _
public static int counter2;   c- P. `4 g1 h' T5 C! c$ O- f
public static Singleton getInstance(); / h; i7 k5 S9 |/ x' N$ d: o
static {};
/ q9 }5 U; p+ x} & N' l, \. [# e4 @  M+ o

- R- Q, V, i% i& ~+ }5 RMethod Singleton() , x4 f, P  M9 Q' U3 q
0 aload_0
) Y+ t& l0 M# i: W* b0 I+ s  g1 invokespecial % i, d  p# l% C, o$ j. C9 m
#1  
- V) ]7 r  w! N. ]* b2 }1 d4 getstatic + d, b+ j2 u) ~) ^: O5 W
#2  
- h5 D% X9 W: J9 h7 Z/ [7 iconst_1
1 ?" K9 Z; A4 H2 r: D9 U" v1 c& Q8 iadd ; r* {2 J# {( n# |0 [4 |* o
9 putstatic   w# D/ ^5 {1 k' d8 _7 y8 ^; [
#2  . ]9 B3 ^  q$ t( H
12 getstatic
# N: }  U5 P: M% E#3  
; T5 l& |! n/ n* C( k. N3 M15 iconst_1
( X/ @, H4 f7 R7 ~  {/ [16 iadd
3 m* p! m+ T. V; k17 putstatic2 c# m2 M# `+ H; [
#3  # j, k8 S. j3 K* T/ n3 Y
20 return
5 a* o# p" |1 o1 J% D. }( h
; e" n6 X7 {2 a# {! E  MMethod Singleton getInstance()
- l1 r% r2 `" V$ {$ k% _0 getstatic
+ w' h; t: O4 R#4  
* a6 T- B" n. \+ g# w3 areturn 4 y) o1 z$ f! F+ o
7 A" u' a: j9 H
Method static {}
* Q0 k' ?" v# H( e3 X3 b0 new
% x) M- q4 H; ^9 k" T9 l+ a4 l#5  : V+ S4 V; K5 L$ ]6 Q+ P2 k7 B5 x
3 dup % ]/ `  _3 r+ g, O5 L% t0 ]
4 invokespecial
  \) g$ b; |$ ~6 z. g6 x  W! a0 s8 |#6  
; T" @$ }5 H- P! e7 putstatic
, s/ r0 ~( d5 n& }/ Z# o$ u#4  $ }- F4 I3 ]/ F# A& O* y
10 iconst_0
' {: v" W- T: o11 putstatic   m& }1 f; h8 F; Z% H
#3  
% a2 b- d& W* M3 S14 return$ u6 b; A* G/ t: b6 s3 Z8 a( A
7 z7 h8 ]  b9 l* W8 v4 I
  其实Java的syntactic sugar并不算多,C#的syntactic sugar才真的是无所不在,也因此C#的初学者更容易犯了“全世界所有程序员都会犯的错误”。 ; c2 |9 ~3 }: {3 e4 @$ C

% S& F2 ~+ q6 ]" i' S  许多C#的书都会一边介绍C#语法,一边介绍编译之后MSIL(.NET的中间语言,类似Java的Bytecode)的结果,然而Java的书却鲜少这么做。
  d+ X. K0 \9 J) b; ?+ j8 p# H! N* O' U
  虽说是“全世界所有程序员都会犯的错误”,但是这不代表你犯了此错误之后,仍可以“抬头挺胸、理直气壮”。只要有心,其实这一类的错误仍是可以避免的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 17:51 , Processed in 0.195557 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表