-
long no = 10 ;
=> 자동캐스팅 되서 10이 int형에서 long 으로 변해서 들어감.
Long no = 10l ;
=> Wrapper클래스로 넣을 때는 자동캐스팅이 안되서 l을 숫자 뒤에 꼭 붙여줄것.
void 값이 나오는 함수를 대입하려 하면 컴파일 오류가 난다. 전하려는 값이 없기 때문에
클래스의 구성
변수, 메서드(), 초기화 블록(static,일반) , 생성자
라이프 사이클 > static 초기화 블록 > 초기화 블록 > 생성자 > 메인() > 호출한 메서드()
메서드의 내부와 외부에 값을 전달하면 서로 다른 공간에 데이터를 복사해서 저장하게 된다. (CallByValue)
int a = 0;
System.out.println("before a: "+ a);
setInt(a);
System.out.println("after a: "+ a);
}// main() end
//
public static void setInt(int x) {
x = 100;
System.out.println("x: "+ x);
기본형변수의 경우: 위에서 int a 를 받아와서 메서드 내부에서 100으로 바꿔도 밖의 a가 100으로 바뀌진 않는다. 값을 복사해서 전달한 것이기 때문. 전달된 a값만 바뀌어서 메서드 안해서 사용되는 것이다
참조형 변수를 받아온 경우 : 변수의 주소를 받아와서 주소안의 값을 메서드에서 계산을 하기 때문에, 주소 안에 있는 값을 직접 바꾸게 된다.그러므로 외부에 있는 해당 주소를 사용하는 데이터의 값도 변하게된다.
가변길이 매개변수 - 매개변수 길이가 일정하지 않을때 (길이가 정해지지않은 배열) public void num(int ... )
this.클래스 => 이 클래스 인스턴스를 말한다. 항상 this가 써져있는 클래스 안의 해당 객체를 말하고 이 클래스를 a라고 하면, 다른 클래스b에서 a를 불러와도 this 는 a클래스 안의 무언가를 계속 지칭한다.
super.클래스 => 이 클래스의 상위클래스. 모든 클래스는 object를 상속받는다. 모든클래스의 super에는 object가 포함
생성자 안에는 object 클래스를 만드는 super();가 생략되어있다 . object 클래스가 메모리에 올라가 있어야 사용가능해서 필요한 과정.
final = 변수앞에 붙으면 변수값을 바꾸지 못한다. 메소드 앞에 쓰면 재정의해서 사용하지 못한다.(overriding 금지)
클래스 앞에다가 붙이면 변수나 메서드를 추가할 수 없다
*final 변수는 전부 대문자로 작성. _로 단어 구분.
패키치 import시
import com.hankook.*
*기호는 그 하위 패키지를 전부 가져오는걸 의미한다. 소스 양은 줄일 수 있으나 메모리가 많이 든다.
import static java.lang.Math.abs;
static 메서드인 abs를 import 할때 static import를 할 수 있다. 원래는 Math.abs(); 로 사용해야 하는데, static import를 하면 그냥 클래스 이름 없이 abs();로 사용 가능.
protected - 다른 패키지에서 상속은 받으나, 생성을 해서 사용할 순 없는것. 아무것도 없으면 default. 이 클래스 내에서만 사용
클래스 범위보다 더 적은범위의 접근제한자를 사용해야 한다.
private class 아래에 public method 불가능.
자바책 262p
싱글톤 패턴 - 같은 클래스 에서만 객체 생성해서 사용. 273p. new 연산자로 여러번 생성하면 과부하가 올 수 있음. 메모리에 너무많이 올리지 않고 최적하게 처리하기 위해 서버 등에 사용할 때 싱글톤 패턴 사용.
상속을 여러개를 한꺼번에 받을 수 없다. 상속해서 만든 클래스를 상속하는 클래스를 만들수는 있다. 한꺼번에 여러개가 필요할 땐 한개를 상속받고 하나를 new로 생성해서 사용하면 된다.
상속을 받으면 관련이 있는 것으로 보고, 캐스팅이 가능해진다.
super 에 A , B 데이터가있고 sub가 super를 상속받아 A,B,C데이터를 가지고 있다면
Sup sub = new Sub(); 생성 가능.
=> sub가 super타입의 A,B를 가지고 있는지 확인. sub가 가지고 있으므로 생성 가능.
Sub sup = new Sup();
=> sup가 sub타입의 A,B,C를 가지고 있는지 확인. sup는 A,B만 있으므로 사용 불가능
적게 가지고 있을수록 범위가 크다. 작은데이터>큰데이터는 자동캐스팅.
반대는 강제캐스팅을 해야함.