<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

+ Recent posts