IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'자바'에 해당하는 글(1)
2009.10.05   [java] java Hello World 6


[java] java Hello World
JDK를 설치 하고, 처음으로 간단하게 작성해본 code

Test.java
public class Test {
    public static void main(String[] ar) {
        System.out.println("hello world");
    }
}


*  Java Code에서 첫 작성한 Class와 File 이름이 같아야 한다는 걸 알았다.


javac Test.java로 Build를 하면 output으로 Test.class가 생성이 되는데
이 파일을 Hex로 열어보면 아래와 같은 값들로 이루어진다.

사용자 삽입 이미지

java class File을 간단하게 분석 해보자
(본인도 처음 java code을 build 해보고 class 파일을 열어봄)

가장먼저 보이는건 Code 상에서 출력하도록 한 hello world가 보인다.
아무래도 *.class 파일은 일정한 File Format이 있는 것 처럼 보인다.
(아시는 분 있으면 간단하게 설명 부탁 드릴께요.!!! Plz)
Source File에 대한 정보로 파일 이름이 보인다.

아래 같은것들은 왠지 Test.java 파일에서 사용하는 class에 대한 경로 같기도 하다
(확인을 위해 jdk가 설치된 폴더를 찾아 보았지만 못 찾겠당 ㅜㅜ
java/lang/Object
java/lang/System out
Ljava/io/printStream;
java/io/PrintStream... println
(Ljava/lang/String;)V



실험 1.
Hex File에서 문자열을 수정해 보았다.
hello world --> Hello World

결과

java Test : Hello World로 Consol에 출력이 된다.



실험 2.
문자열의 길이를 수정하였다.
hello world --> hello world!!!!!

결과

C:\>java Test
Exception in thread "main" java.lang.ClassFormatError: Unknown constant tag 33 i
n class file Test
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Test.  Program will exit.

고찰1 :
이로써 javac로 빌드시에 string에 대해서는  static하게 길이를 계산해두는 것이라고 생각됨
그럼 간단하게 string length를 기록한 부분을 수정해주고? 다시 hex를 하게되면
올바른 결과가 보이지 않을까?

실험 3
위 그림에서 붉은색 네모 부분에 대해서 Edit를 하여 문자열을 눌려 보았다.

ASCII
hello world --> hello worlda

HEX
0B --> OC

결과: 정상적으로 출력이 되었다.
C:\>java Test
hello worlda

* 아하 javac를 통해 build시 문자열의 길이는 java class에 특정 부분에 쓰여지는구나!!!


의문 1 :
그럼 문자열이 두개 일경우에는 어떻게 될까?

가설 :
문자열에 대한 카운팅이 있을까?

결과: 없는 것 같다. ( 시간이 없어서 확인 못 함 )

우선 첫 시간으로 이정도만 확인해봄


참고하고 있는 자료
 * 열혈강의 동영상 강좌
 * 책도 없음 ;;;;; -0-



연구해볼 것
java class file format



BLOG main image
취미생활
 Notice
 Category
분류 전체보기 (191)
매일매일갱생 (83)
서버개발 (1)
임베디드개발 (12)
Programming (80)
Personal Projects (6)
유용한 프로그램 (0)
 TAGS
알고리즘 Error Case debugging English Linux warning C Wince5.0 1seg Dshow 퇴사 서태지 Windows Mobile6.0 음식 출장 티스토리 초대장 ISDB-T Algorithm DirectShow C++ Debug 영어 이메일 Java DVB 군대 미라지폰 DVB-T isdbt 개발자 english email project M480 It VC++ Brazil spam mail 티스토리초대 MP3 벨소리 변경
 Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 Recent Entries
 Recent Comments
 Recent Trackbacks
 Archive
 Link Site
zextor
괴짜 프로그래머의 일상사~@@
Gag & Peace, and more..
Kazakhstan Almaty.......
Min-A
Sadgarret
Steve Yoon's log
가슴 뛰는 삶을 살아라
오스틴 파워
GUI sin
melanie parker_Lady
제레미의 TV 2.0 이야기..
 Visitor Statistics
Total :
Today :
Yesterday :
rss