public class Eunji {
public static void main(String args[]) {
System.out.println("5 + 2 = " + 3 + 4); // 문자열 + 숫자
System.out.println("5 + 2 = " + 3.1 + 4); // 문자열 + 숫자
System.out.println("5 + 2 = " + (3 + 4)); // 문자열 + 숫자
System.out.println(5 + 2 + " = 3 + 4"); // 숫자 + 문자열
}
}
// 출력
// 5 + 2 = 34
// 5 + 2 = 3.14
// 5 + 2 = 7
// 7 = 3 + 4
(1) 개념
(2) 구조
for (제어변수: 배열) {
문장;
}
public class Eunji {
public static void main(String args[]) {
String[] name = {"Choi", "Eun", "Ji"}; // String형 배열 선언
for (String nm: name) {
System.out.println(nm);
}
}
}
// 출력:
// Choi
// Eun
// Ji
(1) 사용자 정의 함수 (메서드)
자료형 함수명(자료형 변수명, ..) {
명령어;
return 반환값;
}
public class Eunji {
static char fn(int num) {
if (num%2 == 0)
return 'Y';
else:
return 'N';
}
public static void main(String[] args) {
char a = fn(5);
System.out.println(a);
}
}
// 출력:
// N
(2) static 메서드클래스가 메모리에 올라갈 때
자동적으로 생성되는 메서드.
인스턴스를 생성하지 않아도 호출 가능.
- 인스턴스: 클래스로부터 만들어진 객체
class Eunji {
static void print() {
System.out.println("static method");
}
public class EunjiMain {
public static void main(String[] args) {
Eunji.print();
// Eunji alice와 같은 변수 선언 없이,
// "클래스명.메서드명" 형태로 호출.
}
}
}
//
// main 메서드가 포함된 클래스를 기준으로 자바 클래스 이름과 파일이름은 같아야 함.
// EunjiMain 안에 main이 있으므로,
// EunjiMain.java 파일에 코드를 넣어서 실행해야함.
(1) 개념
(2) 클래스 접근 제어자
종류 | 설명 |
---|---|
public | 외부의 모든 클래스에서 접근이 가능한 접근 제어자. |
protected | - 동일 패키지 내부에 있는 클래스, 하위 클래스에서 접근 가능. |
- 자기 자신과 상속받은 하위 클래스 둘 다 접근 가능. | |
default | - 접근 제어자를 명시하지 않은 경우. |
(3) 클래스 정의
정보은닉
.public class 클래스명 {
private 반환할_변수명;
public 반환_자료명 메서드명 (자료형 변수명, ...) {
명령어;
return 반환값;
}
}
(4) 클래스 변수 생성
new
키워드로 생성해줘야함.클래스명 변수명 = new 클래스명(파라미터);
변수명.메서드명();
// ex)
Person eunji = new Person();
eunji.birth = "07-28";
(5) 클래스 this
현재 객체
를 가리키는 키워드.public class Person {
private int a;
public void setA(int a) {
this.a = a;
// 그냥 a라고 한다면 파라미터로 받은 a일수도, Person 내의 변수 a일 수도 있음.
// 프로그램 내에 같은 이름이 존재할 경우, 가장 가까이 있는 변수를 지칭하게 됨.
// 즉, 그냥 a라고 하면 매개변수 a를 의미하게 됨.
// 따라서, 클래스 내의 private 변수 a를 지칭하기 위해 this를 사용.
}
public int getA() {
return a;
}
public static void main(String[] args) {
Person eunji = new Person(); // eunji라는 변수에 Person 클래스 생성.
eunji.setA(5);
System.out.println(eunji.getA());
}
}
// 출력: 5
(6) 생성자(Constructor)
public 클래스명() {}
이라는 아무 일도 하지 않는 생성자가 있는 것처럼 동작.
구분 | 코드 |
---|---|
생성자 정의 | public class 클래스명 { |
public 클래스명(매개변수) {
명령어;
}
} |(7) 소멸자 (Destructor) - finalize 메서드
구분 | 코드 |
---|---|
소멸자 정의 | public class 클래스명 { |
public void finalize (매개변수) {
명령어;
}
} |public class Eunji {
public Eunji() {
System.out.println("A");
}
public Eunji(int a) {
System.out.println("B: " + a);
}
public void finalize() {
System.out.println("C");
}
public void fn() {
System.out.println("D");
}
public static void main(String[] args) {
Eunji e1 = new Eunji(); // Eunji() 생성자 호출
Eunji e2 = new Eunji(5); // Eunji(int a) 생성자 호출
e1.fn();
e1.finalize();
}
}
// 출력
// A
// B: 5
// D
// C
(1) 클래스 상속이란?
부모 클래스의 생성자를 실행한 후
, 자식 클래스의 생성자 실행.(2) 클래스 상속 문법
class 부모_클래스명 {
}
class 자식_클래스명 extends 부모_클래스명 {
}
class A {
public void fnA() {
System.out.println("A");
}
}
class B extends A {
public void fnB() {
System.out.println("B");
}
}
public class Eunji {
public static void main(String args[]) {
B b = new B();
b.fnA(); // B에 fnA()가 없으므로, 부모 클래스인 A 클래스의 메서드인 fnA() 실행.
b.fnB();
}
}
// 출력:
// A
// B
(3) 오버로딩 (Overloading)
동일 이름
의 메서드를 매개변수만 다르게
하여 여러 개 정의할 수 있는 기능.class A {
public void fn() {
System.out.println("A");
}
public void fn(int i) {
System.out.println(i);
}
public void fn(double d) {
System.out.println(d);
}
public int fn(int a, int b) {
return a + b;
}
}
public class Eunji {
public static void main(String args[]) {
A a = new A(); // A의 생성자 A()를 호출해야하지만, 없으므로 클래스 생성 시 아무일도 일어나지 X.
a.fn();
a.fn(7);
a.fn(10.0);
System.out.println(a.fn(2, 3));
}
}
// 출력:
// A
// 7
// 10.0
// 5
(4) 오버라이딩 (Overriding)
class 부모_클래스명 {
public 반환_자료명 메서드명(자료형 변수명) {
명령문;
}
}
class 자식_클래스명 extends 부모_클래스명 {
public 반환_자료명 메서드명 (자료형 변수명) {
// 부모 클래스의 메서드와 반환_자료명, 메서드명, 매개변수 자료형, 매개변수 변수명 동일해야 함.
명령문;
}
}
class A {
public void fn() {
System.out.println("A");
}
}
class B extends A {
public void fn() {
System.out.println("B");
}
}
public class Eunji {
public static void main(String args[]) {
A a = new B(); // B 클래스를 a라는 변수로 생성.
// B클래스를 a 변수에 생성하므로, B의 생성자 B()와 A의 생성자 A()를 호출해야 하지만
// 둘 다 없으므로 실행 X.
a.fn();
}
}
// 출력:
// B
class Parent {
public Parent() {
System.out.println("A");
}
public void fn() {
System.out.println("B");
}
}
class Child extends Parent {
public Child() {
System.out.println("C");
}
public void fn() {
System.out.println("D");
}
}
public class Eunji {
public static void main(String args[]) {
Child c = new Child(); // Child의 부모클래스 부터 방문하여 생성자 호출.
c.fn();
}
}
// 출력:
// A
// C
// D
(5) 부모 클래스 접근
super
키워드를 이용하여 상위 클래스의 변수나 메서드에 접근 가능.super.메서드명();
class A {
public void fn() {
System.out.println("A");
}
}
class B extends A {
public void fn() {
super.fn(); // 부모 클래스의 fn() 호출.
System.out.println("B");
}
public class Eunji {
public static void main(String args[]) {
A a = new B();
a.fn(); // B클래스 내의 fn() 호출.
}
}
// 출력:
// A
// B