썬 마이크로시스템즈에서 1995년에 개발한 객체지향 프로그래밍 언어이다.
영문자(대소문자)
,숫자
,언더스코어(_)
,달러($)
로만 구성할 수 있다.자바에서 변수는 타입에 따라 크게 2가지로 분류 가능
정수형 : byte, short, int, long
실수형 : float, double
문자형 : char
논리형 : boolean
int num; //변수의 선언
System.out.println(num); //오류 발생
num = 20; //변수의 초기화
System.out.println(num) // 20
//문법
1. 타입 변수이름[, 변수이름];
2. 타입 변수이름 = 초깃값[, 변수이름 = 초깃값];
//예제
int num1, num2; //같은 타입의 변수를 동시에 선언함
double num3 = 3.14; //선언과 동시에 초기화함
double num4 = 1.23, num5 = 4.56; //같은 타입의 변수를 동시에 선언하면서 초기화함
System
이라는 표준 입출력 클래스를 정의하여 제공하고 있다. 이러한 System
클래스는 java.lang
패키지에 포함되어 제공된다.System
클래스에는 표준 입출력을 위해 다음과 같은 클래스 변수(static variable)가 정의되어 있다.1.System.in
2. System.out
3. System.err
System.out.println(출력할데이터);
//예시
System.out.print(7) //print()메소드는 줄 바꿈을 하지않음
System.out.print(3) // 정수 출력
System.out.print(3.14) // 실수 출력
System.out.print("자바!") // 문자열 출력
System.out.print("문자열끼리" + "연결도 가능");
System.out.print("숫자" + 3 +"과 문자열의 연결도 가능");
//실행결과
73
3.14
자바!
문자열끼리의 연결도 가능
숫자3과 문자열의 연결도 가능
- if 문
- if / else 문
- if / else if / else 문
- switch 문
if(조건식){
조건식의 결과가 참일 때 실행하고자 하는 명령문;
}
if(ch >= 'a' && ch <= 'z'){
System.out.println("해당 문자는 영문 소문자입니다.");
}
//실행결과
해당 문자는 영문 소문자입니다.
if(조건식){
조건식의 결과가 참일 때 실행하고자 하는 명령문;
} else{
조건식의 결과가 거짓일 때 실행하고자 하는 명령문;
}
if (ch >= 'a' && ch <= 'z') {
System.out.println("해당 문자는 영문 소문자입니다.");
} else {
System.out.println("해당 문자는 영문 소문자가 아닙니다.");
}
//실행결과
해당 문자는 영문 소문자가 아닙니다.
if (조건식1) {
조건식1의 결과가 참일 때 실행하고자 하는 명령문;
} else if (조건식2) {
조건식2의 결과가 참일 때 실행하고자 하는 명령문;
} else {
조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;
}
//예제
if (ch >= 'a' && ch <= 'z') {
System.out.println("해당 문자는 영문 소문자입니다.");
} else if (ch >= 'A' && ch <= 'Z') {
System.out.println("해당 문자는 영문 대문자입니다.");
} else {
System.out.println("해당 문자는 영문자가 아닙니다.");
}
//실행결과
해당 문자는 영문 대문자 입니다.
//문법
switch (조건 값) {
case 값1:
조건 값이 값1일 때 실행하고자 하는 명령문;
break;
case 값2:
조건 값이 값2일 때 실행하고자 하는 명령문;
break;
...
default:
조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;
break;
}
- while문
- do/while문
- for문
- Enchaned for 문
//문법
while (조건식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
int i = 0;
//예제
while (i < 5) {
System.out.println("while 문이 " + (i + 1) + "번째 반복 실행중입니다.");
i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
}
System.out.println("while 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
//실행결과
while 문이 1번째 반복 실행중입니다.
while 문이 2번째 반복 실행중입니다.
while 문이 3번째 반복 실행중입니다.
while 문이 4번째 반복 실행중입니다.
while 문이 5번째 반복 실행중입니다.
while 문이 종료된 후 변수 i의 값은 5입니다.
//문법
do {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
} while (조건식);
//예제
int i = 1, j = 1;
while (i < 1) {
System.out.println("while 문이 " + i + "번째 반복 실행중입니다.");
i++;
}
System.out.println("while 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
do {
System.out.println("do / while 문이 " + i + "번째 반복 실행중입니다.");
j++;
} while (j < 1);
System.out.println("do / while 문이 종료된 후 변수 j의 값은 " + j + "입니다.");
//실행결과
while 문이 종료된 후 변수 i의 값은 1입니다.
do / while 문이 1번째 반복 실행중입니다.
do / while 문이 종료된 후 변수 j의 값은 2입니다.
//문법
for (초기식; 조건식; 증감식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
//예제
for (i = 0; i < 5; i++) {
System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
}
System.out.println("for 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
//결과
for 문이 1번째 반복 실행중입니다.
for 문이 2번째 반복 실행중입니다.
for 문이 3번째 반복 실행중입니다.
for 문이 4번째 반복 실행중입니다.
for 문이 5번째 반복 실행중입니다.
for 문이 종료된 후 변수 i의 값은 5입니다.
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부
}
//예제
class Car {
private int currentSpeed;
private int accelerationTime;
...
① public void accelerate(int speed, int second) { // 선언부
// 구현부
System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
}
...
}
.
)를 사용하여 호출가능//문법
1. 객체참조변수이름.메소드이름(); // 매개변수가 없는 메소드의 호출
2. 객체참조변수이름.메소드이름(인수1, 인수2, ...); // 매개변수가 있는 메소드의 호출
//예제
Car myCar = new Car(); // 객체를 생성함.
myCar.accelerate(60, 3); // myCar 인스턴스의 accelerate() 메소드를 호출함.
//예제 전문
class Car {
private int currentSpeed;
private int accelerationTime;
public void accelerate(int speed, int second) {
System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
}
}
public class Method01 {
public static void main(String[] args) {
Car myCar = new Car(); // 객체 생성
myCar.accelerate(60, 3); // 메소드 호출
}
}
메소드 오버로딩이란 같은 이름의 메소드를 중복하여 정의하는 것을 의미한다.
하지만 매개변수의 개수나 타입을 다르게 지정해준다면 하나의 이름으로 여러개의 메소드를 작성할 수 있다.
즉, 메소드 오버로딩은 서로 다른 시그니처를 갖는 여러 메소드를 같은 이름으로 정의하는 것이라고 할 수 있다.
메소드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나이다.
대표적인 메소드 오버로딩의 예로는 println()
이 있다.
1. void display(int num1) // 전달받은 num1을 그대로 출력함.
2. void display(int num1, int num2) // 전달받은 두 정수의 곱을 출력함.
3. void display(int num1, double num2) // 전달받은 정수와 실수의 합을 출력함.
이제 사용자가 display()
메소드를 호출하면, 컴파일러는 자동으로 같은 시그니처를 가지는 메소드를 찾아 호출한다.
1. display(10); // 1번 display() 메소드 호출 -> 10
2. display(10, 20); // 2번 display() 메소드 호출 -> 200
3. display(10, 3.14); // 3번 display() 메소드 호출 -> 13.14
4. display(10, 'a'); // 2번과 3번 모두 호출 가능