private , default , protected , public , abstract , final static
제어자의 순서는 상관없다.
변수 - 상수
메서드 - 오버라이딩 금지
클래스 - 상속 금지
클래스 : abstract 메서드를 보유할 수 있다. (선언부만 있는 메서드)
class B{
int a; // 전역 변수 , 인스턴스 변수
static int b; // 전역 변수 , static 변수
int c;
void pp(){
int i ;
}
}
전역변수 , 인스턴스 변수
- 클래스 안쪽 && 메서드 밖에 선언한 변수
- 객체 생성시점에 변수가 생성됨.
- 참조변수가 없어지면 GC 메모리를 반환, 시점은 알 수 없음
전역변수 , static 변수
- 클래스의 정보가 메모리에 올라간 시점부터 사용 가능
- 프로그램 종료시까지 사용
지역변수
- 메서드 안쪽에 선언한 변수
- 사용가능 시점 : 선언문이 실행된 이후 ~ 선언문이 포함된 블록 까지
- 블록을 빠져나가면 즉시 삭제
- 초기화 한 후에 참조가능
//static 멤버는 non static 멤버를 접근할 수 없다. => 메모리의 생성시점이 다르다
class CC{
int a ;
static int b = a;
}
1. 메인문이 콜 스택에 저장되고
2. class Area에 클래스의 정보가 저장된다. 이 때 static 변수가 메모리에 올라감
3. heap영역에 지역변수가 올라간다.
4. heap영역의 정보가 전달된다.
//ArrayList : 배열의 크리극 변경할 수 없는 문제를 해결
// 제네릭 (String만 넣을거야) 꺼낼때도 입력한 타입으로 리넡
ArrayList<String> al = newArrayList<String>();
//ArrayList al = newArrayList();
al.add("호랑이");
al.add("사자");
al.add("토끼");
al.add("기린");
al.add("코끼리");
//al.add(3.14); 제네릭 쓰면 오류
//al.add(new Integer(3));
//Object o = al.get(2);
//String s= (String) o;
String s = al.get(2);
System.out.println("크기 " + al.size()); 크기 5
System.out.println(al.get(2));
System.out.println(al.contains("토끼"));
System.out.println(al.isEmpty());
System.out.println(al.indexOf("사자"));
al.set(2,"소");
System.out.println(al);
al.remove(3);
System.out.println(al);
al.clear();
최고조상 클래스로 만들때 객체타입만 가능함
기본형타입 => 클래스로 변경 (Wrapper Class)
int -> Integer
꿀팁
- ctrl + spacebar 자동완성
Ctrl + click : 소스코드로 이동
alt 좌/부 방향키 : 이전/이후 화면이로 이동
F3 : 선언된 소스코드화면으로 이동
Ctrl + 아래방향키 : 복사
text.contains(a) ; text에 a가 들어있나??