이틀동안 휴강~~ 다시 힘내보자
저번시간 복습~ 라이브러리api(재사용 가능)와 실행용 따로
메모리(저장 공간)는 heap(여러 객체만 생성-company,power,각종 메소드들)과 stack(메인. 출력문들,각종클래스,메소드들값을 읽어옴), class(각종 클래스들 1번만 들어옴)로 이루어짐
1) 인스턴스(객체) 변수: 객체가 생성되면 내 객체는 나만 쓰는 값의 개별적인 메모리가 형성됨.
그래서 인스턴스마다 다른 값 저장 가능.
그래서 객체 생성 해야됨!!
2) 클래스 변수(static변수): 공유 변수(같은 클래스에서 객체 생성하면 그 객체들이 같은 변수 값을 공유할 수 있음)
★객체를 생성하지 않아도 출력할 수 있음.("클래스이름.변수이름"만으로도 출력)
System.out.println(StaticVar01.staNum1);
*this 키워드:
현재 속해있는 객체(=인스턴스 변수)를 가리키는 키워드.
String subjectName(String subName) {
this.subName = subName;
return this.subName;
}
static void totalCount(int tCount) {
//this.tCount = tCount; this는 객체를 가리키는데, 클래스 메서드는 객체가 없으므로 오류남.
System.out.println("현재 수강인원: " + tCount);
}
1) 인스턴스 메서드:
인스턴스(객체) 생성 후, '참조변수.메서드명()'으로 호출
2) 클래스 메서드(static 메서드):
객체 생성없이 'static 클래스이름.메서드명()'으로 호출
하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것.
메서드의 이름이 같아야 한다.
매개변수의 개수 또는 타입이 달라야 한다.
매개변수의 이름이 다른 것은 오버로딩 아님!
int add(int a, int b)
int add(int x, int y)
System.out.println() 메서드:
다양하게 오버로딩된 메서드를 제공함으로써 모든 변수를 출력할 수 있도록 설계.
void println()
void println(int x)
void println(String x)
void println(double x)
.
.
.
*연습문제*
//사칙연산의 결과를 메서드 오버로딩을 이용하여 자유롭게 나타내시오
//배열을 이용하여 배열의 길이만큼의 합을 위의 문제에서 생성했던 오버로딩에 이어 작성하시오.
:메서드의 매개변수를 동적으로 지정 가능(JDK 1.5버전부터... 거의 다 이 버전 넘겨서 거의 다 된다고 보면 됨ㅎ)
뭔 말이냐면 매개변수의 개수가 몇 개가 될지 모를 때 사용함!
가변인자는 반드시 마지막 매개변수여야함.
printStream printf(String format, Object... args) (...)
* 배열일 때 향상된 for문 사용:
배열 처음부터 끝까지 모두 돌면서 실행
for(자료형 변수이름 : 배열이름)
-인스턴스(객체)가 생성될 때마다 반드시 1번 호출되는 인스턴스 초기화 메서드.
*인스턴스 초기화: 인스턴스 변수에 적절한 값을 저장하는 것
-인스턴스 생성시, 수행할 작업에도 사용
-모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
public class Car {
String color;
String model;
int door;
/*
* Car() { } : 빈 생성자, 자동생성되어 컴파일됨
*/
Car(String color, String model, int door) {
System.out.println("Car 생성자 호출");
this.color = color;
this.model = model;
this.door = door;
}
}
public static void main(String[] args) {
Car car1 = new Car("black", "제네시스", 5);
System.out.println("car1 색상: " + car1.color);
System.out.println("car1 모델: " + car1.model);
System.out.println("car1 문 개수: " + car1.door);
System.out.println("----------------------");
//객체 생성시 바로 초기화되기 때문에 다른 값이 출력됨
Car car2 = new Car("white", "스포츠카", 3);
System.out.println("car2 색상: " + car2.color);
System.out.println("car2 모델: " + car2.model);
System.out.println("car2 문 개수: " + car2.door);
}
*연습문제*
//변수: 학번, 이름, 전화번호 / 생성자(매개변수 3개)의 인스턴스 변수를 초기화, 학생 3명
public class Car {
String color = "black";
String model = "SM7";
int door = 5;
Car(String color) {
this.color = color;
}
Car(int door) {
this.door = door;
}
Car(String color, String model) {
this.color = color;
this.model = model;
}
Car(String color, int door) {
this.color = color;
this.door = door;
}
Car(String color, String model, int door) {
this.color = color;
this.model = model;
this.door = door;
}
Car(){
}
}
public static void main(String[] args) {
Car car1 = new Car(3);
Car car2 = new Car("yellow");
Car car3 = new Car("Green", "K7");
Car car4 = new Car(); //빈 생성자가 있어야 오류 안 남!
}
public class Car {
String color;
String model;
int door;
Car() {
this("black", "SM7", 5);
System.out.println("매개변수가 없는 생성자"); //this가 출력문보다 선행되어야함.
}
Car(String color) {
this(color, "SM7", 5);
}
Car(int door) {
this("black", "SM7", door);
}
Car(String color, String model) {
this(color, model, 5);
}
Car(String color, int door) {
this(color, "SM7", door);
}
Car(String color, String model, int door) {
this.color = color;
this.model = model;
this.door = door;
System.out.println("매개변수가 3개인 생성자");
}
여기선 맨 마지막 애를 찾아감.
public static void main(String[] args) {
Car car4 = new Car();
}
=> 매개변수가 3개인 생성자
매개변수가 없는 생성자
그래서 "매개변수가 3개인 생성자"가 먼저 출력된 것임.
반드시 첫 줄에 this( )로 호출한다
변수를 선언하고 처음으로 값을 저장하는 것.
멤버변수(인스턴스 변수, 클래스 변수)와 배열은 각 타입의 기본값(0)으로 자동 초기화돼서 생략 가능
지역변수는 꼭!!!!!!!!!!!! 초기화를 해줘야한다.
명시적 초기화:
변수를 지정하면서 값을 넣는 것.
int a = 3;
생성자 초기화:
1) 인스턴스 초기화 블럭:
인스턴스(객체)가 생성될 때마다 (생성자보다 먼저) 실행됨.
{ }
2) 클래스 초기화 블럭:
클래스가 로딩될 때 1번 실행됨.
static { }
멤버변수의 초기화 순서
덮어쓰기 하기 때문에 생성자의 값이 젤 마지막에 남음
외울 필요X, 거의 생성자 하나 정도만 씀
기본값 -> 명시적 초기화값 -> 초기화블럭 -> 생성자