<2> 자바프로그램의 이해와 실행의 원리
1. 자바프로그램의 실행구조와 자바 가상머신.
일반적인 프로그램의 실행구조 : 하드웨어 - Operating system - Program
-각 단계는 상호간의 통신을 하며 실행이 이루어 진다.
-프로그램이 운영체제와 직접적인 통신을 하기 때문에 어떠한 운영체제에서 만들어진 프로그램은 다른 운영체제에서 실행되지 못한다.
(기능의 완성방법이 다르다. 그래픽, 키보드, 마우스 관련 기능들)
자바에서의 프로그램 실행구조 : 하드웨어 - Operating system -(운영체제에따라 달라짐)- Java Virtual Machine -(항상같음)- Java Program
- 자바 프로그램을 운영체제에 관계없이 사용할 수 있다.
- 따라서 같은 소스코드를 Java Virtual Machine 만 다르게 하면 여러 운영체제에서 사용할 수 있다
"Java Program은 운영체제에 독립접 & Java Virtual Machine 은 운영체제에 독립적"
2. 자바컴파일러와 자바 바이트 코드
1) 컴파일러 (javac.exe)
: 소스코드로 이루어진 소스파일(.java) (사람이 이해할 수 있는 파일) - 자바 바이트 파일(.class) (자바가상머신이 이해할수 있는 코드)
2) 자바런처 (java.exe)
:자바 바이트 파일을 자바 가상머신이 실행할 수 있도록 전달하고 인도해 주는 매개체.
* 가상머신을 매체로 하는만큼 속도는 타 언어들보다 느리지만 큰 문제가 되진 않는다
<3>
1. java의 기본적인 형식 : class - 메소드 - 여러가지 실행들
2. System.out.println :
1) 기본형
정수 , 실수, "문자열"+정수 , 실수+"문자열", "문자열"+"문자열", 연산 이 출력 가능하다.
* "" 안에 있으면 문자열로 취급된다.
* +는 이전에 출력된 내용과 다음 내용을 이어서 출력한다
2) "문자열" + 쌍따옴표 없는 문자열이 출력 가능할까?
-> 에러. 문자열은 무조건 "" 를 붙여야 한다.
3) 연산과 문자열을 + 기호를 이용하여 이어서 출력할 수 있을까?
-> 가능. 연산 결과+문자열내용 이 출력된다(/*~*/는 주석으로 complie에 참여하지 않는다)
* 연산이 뒤로 간다면 어떻게 될까?
-> 연산이 뒤로 간다면 연산 결과가 아닌 3과 5가 각자 출력된다
소스코드를 덧셈연산이 왼쪽부터 이루어져서 이러한 출력이 일어난다.
연산이 앞에 오는 경우 2+5 (=7) + "문자열" ---> 7문자열 이 되고
연산이 뒤에 오는 경우 "문자열" + 2 (=문자열2) + 5 --->문자열25이 된다. (*Q2와 관련)
3. 퀴즈
Q1. compile 했을때 생겨나는 class file 이름을 바꾸는 법 :
소스파일 내에서 입력하는 class 이름을 바꿔주면 된다.
Q2.
System.out.println("2+5="+2+5);
System.out.println("2+5="+(2+5); 를 입력하고 결과를 관찰하자
"2+5=" +2+5는 2+5=25 로 출력되었고 "2+5="+(2+5)는 2+5=7으로 출력되었다. 이는 괄호가 수학에서의 의미와 유사하게 다른 것보다 우선적으로 연산이 되기 때문이다.
괄호가 없는 경우: "2+5=" + 2 -> 2+5=2 + 5 의 순서로 읽혀서 2+5=25 출력
괄호가 있는 경우: (2+5) (=7) -> "2+5=" + 7 순서로 읽혀서 문자열7 출력
Q3 여러가지 방법으로 12 출력하기
(정수) 12
(정수) 1 + (문자열)"2"
(문자열)"" + (정수)1 + (정수)2
(문자열) "12"
(연산) 5+7
(문자열)"1" + (정수)2
(문자열)"1" + (문자열)"2"
<4> 컴파일의 대상에서 제외되는 주석
1. 블록단위 주석 /* ~ */
한줄도 가능하다.
2. 행단위 주석 //
=> 출력되는 내용은 System.out.println 기본형과 BlockComment.java와 LineComment.java 모두 다 같다.
3. 퀴즈
에서 정상적으로 주석처리된 부분을 찾아내고, 처리되지 않은 부분은 또 어디인지 찾아보자.
-소스파일을 compile 했을 때 :
-> 18번째 줄 (*/)의 */에서 오류.
-맨 아래의 문단을 삭제하고 compile 했을 때
-> 정상적으로 주석처리된 부분이 정상처리되어 compile 된다.
정상적으로 추석처리된 부분 :
1) /* one은 1*/ : 괄호안에서 한줄 블럭주석처리 가능
2)/*
System.out.println(2);
//System.out.println("2");
*/
: 블럭주석 안에 행주석처리 가능
정상처리 되지 않은 부분 :
1. /*
System.out.println(3);
/*System.out.println("3");*/
*/
이유 : 같은 글자 모양으로 처리한 것들이 한 쌍인데, compile 할 때 /* 와 가장 처음 만나는 */ 가 한쌍으로 읽히므로 마지막 남은 */이 쌍이 없는것으로 판단이 되어 오류가 난다.
결론 : 블럭주석처리 안에 블럭주석 처리는 불가능하다.
2) /* Two는 2 */
실행했을 때 출력이 되는것을 보아 쌍따옴표 안의 주석은 주석처리가 안된다는 것을 알 수 있다.
'언어 > JAVA' 카테고리의 다른 글
chapter4. 연산자(Operator) (2) (0) | 2017.04.12 |
---|---|
chpter4. 연산자(Operator) (0) | 2017.04.07 |
chapter3. 상수와 형변환(Type Casting) (1) | 2017.04.06 |
chapter2. 변수와 자료형 (0) | 2017.04.05 |
chapter1. java의 시작(1) (0) | 2017.04.04 |