D:\java>notepad Ex02.java
D:\java>set path=C:\Program Files\Java\jdk1.8.0_271\bin;%PATH%
D:\java>javac Ex02.java
( = javac.exe Ex02.java와 같다)
D:\java>java Ex02
Hello World!
D:\java>java.exe Ex02
Hello World!
D:\java>javac -d target Ex05.java
소스파일과 클래스파일 분리하기 위해 target이란 폴더 만들었음. target 폴더에 컴파일하라는 뜻이다.
class Ex01{
public static void main(String[] args){
// 한글 안될때는 컴파일시 옵션추가
//ex) javac -encoding utf-8 Ex03.java
System.out.println("Hello World!");
System.out.println("한글깨짐");
System.out.println(1234); // 100을 콘솔에 출력해달라
System.out.println(1+2+3+4+5);
System.out.print("출력만해라");
}
}
배치파일 : 경로를 맨날 입력하기 귀찮으니까 경로설정이 된 배치파일을 하나 만들었음.
path.bat의 내용
@echo off
set path=C:\Program Files\Java\jdk1.8.0_271\bin;%PATH%
echo "set path...ok"
-->cmd 실행 후 path.bat 입력하면 파일 안에 써둔 경로로 설정이 된다.
javac -version 명령어로 경로가 제대로 세팅 되었는지 확인한다.
자료형
: 메모리를 얼만큼 자를 것이냐, 원하는 형태로 잘라서 읽을 수 있는 범위
실수는 모두(정수, 소수점아래 모두) 근사값, 정확한 값은 아니다. 그러나 일반적인 상황에선 문제가 없다.
근사값을 사용하기때문에 표현범위가 넓다.
자바는 유니코드를 사용. 컴퓨터에서는 문자도 숫자이다. 이 데이터를 어떻게 화면에 띄워줄 것이냐 = 폰트.
문자열 = 문자의 집합. 안에 elements가 하나도 없어도 집합인 것.
but 문자는 그렇지 않다. 반드시 하나의 문자가 들어와야 한다. (없으면 출력할때 오류)
2^16만큼 표현가능. (음수 양수없으니까 빼고 뭐하는거 없음)
정수의 표현체계(문자를 숫자로 표현한다는 말)를 그대로 쓰기 때문에 char는 정수형에 포함이된다.
'역슬래쉬\u AC00'= 유니코드에 해당하는 AC00 (개행, 엔터, tab도 하나의 문자이다.)
class Ex05 {
public static void main(String[] args){
System.out.println("문자열");
System.out.println('각');
System.out.println('\uac01'); //문자 '각' 출력
System.out.println('\uac01'-'\uac00'); // 1이 출력됨
System.out.println('각'-'가');
// 마찬가지로 1이 나온다.
System.out.println('1'+'0');
//97이 출력 : 0 문자에 해당하는 숫자 + 1 문자에 해당하는 숫자.
System.out.println(1+0); // 1이 출력됨
System.out.println("1"+"0"); //10이 출력됨.
}
}
자바에서 boolean은 0,1값을 줄 수없고 무조건 true, false로 값을 줘야한다.
-Long 타입으로 상수를 쓸 때 - 숫자 + L
(기본(int)보다 클 경우에만 쓴다.)
System.out.println(214748368L);
byte와 short는 잘 쓰지 않는다. 그렇기 때문에 변수에 대입 시 s나 b를 붙이지 않아도 byte, short로 인식한다.(편의를 위한 예외) + byte 변수가 있고 거기에 128을 대입한다면, 128은 byte의 범위를 벗어났으므로 자동으로 int로 인식하여 오류가 발생한다.
byte su3;
su3 = 127;
System.out.println(su3+1); //int형이 되어 128이 출력된다.
// su3=(byte)(su3+1);로 바꿔 출력하면 byte로 나온다.
// 하지만 범위를 넘어섰기에 값은 -128이 된다.
// su3++; 로 바꿔 출력해도 마찬가지로 -128.
byte su3, su4;
su3 = 127;
su4 = 1;
System.out.println(su3+su4);
// 128이 출력된다. int로 바꿔 출력하기 때문에.
// why? byte를 모르는 자바는 int로 바꿔서 연산을 해버림.
byte su3;
su3 = 127;
su3 = su3+1;
System.out.println(su3);
// int를 바이트로 바꿀 수 없다는 오류가 뜬다.
// su3+1에서 이미 int가 되었는데, byte 변수에 대입하라고 하니까 오류.
byte su5 = su3 + su4;
System.out.println(su5);
// 연산된 int를 byte에 대입하는 것 - > 오류
메모리 사이즈를 줄이고 싶다면 자료형을 float으로 쓴다. 더블형에 float 실수를 대입할 시 f를 붙이지 않으면 값을 기본 double형으로 인식하기때문에 오류가 발생.
// 컴파일 에러 - double을 float으로 바꿀 수 없다는 에러가 뜬다.
float var2 = 3.14;
float var3 = 3.14f; //그러므로 f를 붙여줌
//혹은 f로 처리하지 않고 값 앞에 (float)를 붙여서 형 변환을 할 수도 있다.
float su6 =(float) 3.14;
float aFloat = (float)12.123456789234567890;
public static void main(String[] args){
int su;
// 1,2,3을 복사해서 쓰는 셈이다. 이미 1,2,3이 메모리에 이미 있었다는 뜻.
su=1;
System.out.println(su);
su=2;
System.out.println(su);
su=3;
System.out.println(su);
// 이 경우는 상수가 1 하나만 존재하여 갖다 쓰는 것이다.
su=su+1;
System.out.println(su);
su=su+1;
System.out.println(su);
}
자바는 포인터가 없기 때문에 메모리에 직접 접근할 일이 없다. 그러므로 비트연산을 할 이유가 없다.
형변환 casting
: 컴퓨터가 자동으로 변환 (값에 영향을 주지 않을 때. 즉, 표현의 범위에 영향을 주지 않을 때)
byte - short - int - long - float - double 의 순서.
실수는 근사값이니까 표현의 범위가 더 넓다.
: 프로그래머가 요청
char과 short가 똑같이 16비트 공간을 차지한다 하더라도, 자료의 표현범위는 둘이 다르기 때문에(short가 더 큼)
형변환시 강제로 변환해줘야한다.
short s = 1;
char b = (char) s;
public static void main(String[] args){
char ch1;
ch1='A';
int su7=ch1;
System.out.println(ch1); //A출력
System.out.println(su7); //65 출력
char ch2=65;
System.out.println(ch2); // 캐릭터 형이기 때문에 A출력
// 숫자 65를 캐릭터형으로 형변환했기 때문에 A출력
System.out.println((char)65);
System.out.println(1); // 1출력. 숫자 1.
System.out.println((int)'1'); // 49 출력. 문자형 1이 49니까.
System.out.print((char)10); // 개행은 10번이므로 개행이 출력된다.
System.out.println('B'-'A');
// 캐릭터에서 연산은 없으므로 int로 자동형변환되어 1이 출력된다.
}
}
개행 : System.out.print('\u000a'); ----윈도우에서 먹지 않음.