Tv tv;//a
tv = new Tv();//b
tv = new Tv();//c
a: 메모리공간에 참조변수 tv를 위한 공간이 마련된다.
b: Tv의 인스턴스가 생성되고 tv가 이를 가리키게 된다
c: b에서 생성된 공간은 JVM의 가비지 컬렉터가 제거
하나의 배열로 여러종류의 객체를 다루는 방법 - 다형성 사용하기
public class Time{
private int hout;
public void setHour(int h){
if(h<0 || h>23) return;
hour = h;
}
}
Method Area: 클래스 변수, 클래스 정보 저장
Heap: 인스턴스변수 저장
call Stack: 메서드작업에 필요한 메모리공간 제공
class Data {int x;}
public static void main(String[] args){
Data d = new Data();
d.x = 10;
change(x);
System.out.println(x);//10
}
static void change(int x){
x = 1000;
System.out.println(x);//1000
}
public class Main{
public static void func(){
}
public static void main(String[] args) throws IOException {
Main.func();
func();
}
}
class Math2{
int a,b;
int add() {return a+b;}//인스턴스 메서드
static int add(int x,int y) {return x+y;}//static method
}
매개변수
개수/타입이 다른경우 사용할 수 있음long add(int x, int y) {return a+b;}
long add(int x, long y){return a+b;}
add(1,2);//compile error! 무엇을 호출할지 모르겠음!
public printStream printf(String format, Object ...args){..}
타입...변수명
으로 사용한다static String concatenate(String delim, String... args)
static String concatenate(String... args)
concatenate("-", {"100","200"});//compile error
concatenate("-", "100","200");//ok
concatenate("-", new String[]{"100","200"});//ok
첫번째 concatenate는 compile error가 나지만 그 밑에줄은 컴파일에러가 나지 않는다. 이둘은 무슨차이가 있을까?
문법에서 선언과 동시에 초기화하는 경우엔 new String[]
을 생략하게 해줌 초기화 문법을 할당 문법에 쓰려 해서 안되는것임
str은 주소이기 때문에 16번째줄과 같은 대입이 불가능하다
따라서 {}로 묶어준다고 값이 전달되지 않는다
첫번째 concatenate는 값을 전달하고 있고 두번째는 주소를 전달하고 있다
public static void main(String [] args) {
String name1 = new String("nroo");//heap에 개별메모리
String name2 = "nroo";// String Constant Pool에 만들어진 객체
String name3 = "nroo";// String Constant Pool에 만들어진 객체
name1==name2;//false
name2==name3;//true
}
Card c = new Card();
Car(){
count++;
serialNo = count;
color = "white";
}
Car(String color){
count++;
serialNo = count;
this.color = color;
}
class BlockTest{
static{
System.out.println("static초기화블럭");
}
{
System.out.println("인스턴스초기화블럭");
}
BlockTest(){
System.out.println("생성자");
}
}
BlockTest b1 = new BlockTest();
BlockTest b2 = new BlockTest();
출력결과는
static초기화블럭
인스턴스초기화블럭
생성자
인스턴스초기화블럭
생성자
클래스변수
기본값 -> 명시적초기화 -> 클래스초기화 블럭
인스턴스변수
기본값 -> 명시적초기화 -> 인스턴스초기화 블럭 -> 생성자