JAVA 기초 - 10

아기코딩단2·2022년 4월 3일
0

class 파일 컴파일 하면서 .class 붙일 때 어떤 퍼블릭 클래스안에 있냐? A(클래스안에)$1(첫번째)c클래스 파일.class
이클립스는 우리 대신에 jdk로 가서 컴파일을 실행시켜줌

cannot find symbol 뜨면 클래스 파일을 못찾는다고 에러뜨는 거임

Exam0410.java 컴파일 오류!

  • 콘솔에서 이 소스 파일을 컴파일 할 때
    Score 클래스를 찾을 수 없다고 오류가 발생할 것이다.
    avac -encoding UTF-8 -d bin/main src/main/java/com/eomcs/oop/ex01/Exam0410.java
    이유?
    Exam0410.java 에서 Score 클래스를 사용하는데,
    컴파일할 때 Score 클래스 정보가 필요하다.
    그런데 컴파일러 Score 클래스에 대한 정보를 모르기 때문에
    Exam0410.java를 제대로 컴파일 할 수 없는 것이다.
    해결책?
    컴파일러에 Score 클래스에 대한 정보를 알려줘라!
    방법1) Score.class 파일을 갖고 있다면 그 파일이 있는 위치를 알려줘라.
    javac -encoding UTF-8 -d bin/main -classpath bin/main src/main/com/eomcs/oop/ex01/Exam0410.java
    방법2) Score 클래스의 소스 파일이 있다면 소스 파일의 위치를 알려줘라.
    javac -encoding UTF-8 -d bin/main -sourcepath src/main/java src/main/com/eomcs/oop/ex01/Exam0410.java

=> 이래서 이클립스 사용해야한다

nested class = 중첩클래스

4) 익명 클래스(anonymouse class)

  • 클래스 이름이 없는 중첩 클래스이다.
  • 딱 한 개의 인스턴스를 생성할 때 사용한다.
  • 클래스를 정의할 때 수퍼 클래스나 인터페이스를 지정해야 한다.
  • 클래스를 정의할 때 new 연산자를 사용하여 즉시 인스턴스를 생성해야 한다.

Object obj = new Object() {
}

static 붙은 애들은 static 붙은 애들끼리만 사용가능
클래스에 static 붙으면 어디서든지 사용가능

public 안붙은 클래스는 같은 패키지에서만 사용가능하다
public 붙은 클래스는 다른 패키지에서도 사용가능하다....

상위 패키지 하위패키지 그런 거 없음 걍 패키지 다르면 안됨
public 붙어야지 다른 패키지에서 사용가능!!!!!!!
pakage privite member = non-public

다른 패키지에 있는 걸 사용하는 거는 패키지 이름을 임포트 해줘야함 상대경로 안댄다.
상대경로 그런 거 절대 안됨ㅇㅇㅇ
com.eomcs.oop.ex01.sub.Y2 obj;
obj = new com.eomcs.oop.ex01.sub.Y2();

이런식으로 써줘야함
pakage 어쩌구
import 2번
import하면 compiler 가 나 대신 경로를 붙여준다

하위 패키지 그런 거 존재XXXXXX
그래서 com.*; 이렇게 하면 밑에 있는 다른 패키지들 사용 XXX
즉 com 패키지 에 있는 거만 사용한다
와일드 카드 사용 자제해라~
java.lang 패키지에 있는 애들은 따로 import안해줘도 된다 왜냐? 가장 많이 사용하는 클래스이기 때문에 할 필요 없음 컴파일러가 자동으로 찾는다.

하드디스크에 있음

내부 class 는 메서드와 생명주기가 같지 않다.
args 는 시스템 argument 받음

인스턴스 필드를 연산하는가? 하고 물어보고 아니면 이 메서드를 굳이 클래스 안에 넣을 필요가 없다

new를 사용해서 메모리 준비

리팩토링 기법중에 move method 사용하면 된다

인스턴스의 주소를 메서드에게 줘야한다 원래 Score.calculate(s)였는데 s.calculate라고 쓰면된다

class 메서드 = static 메서드
instance 메서드 = non-static 메서드

static으로 선언된 변수는 스태틱/클래스 변수라고 부른다람쥐

클래스 변수는 Method Area에 올라올 때 생성된다 어디에 생성되냐 HEAP에 생성(?)

인스턴스 변수는 new 명령어를 통해서 생성 후 파라미터로 접근 가능하다. 그래서 호출할 때마다 파라미터로 객체 주소를 갖고 있는 애를 넘겨줘야함 => 이게 불편하니까 this. 사용해서 하면 된다 인스턴스 메서드에 내장변수 this 사용

인스턴스 변수 쓸 거면 non-static으로 만들면 됨
class 를 type이라고 말함
static 메서드는 걍 쓰면된다 클래스 이름으로 걍 호출ㅇㅇ
근데 인스턴스 메서드는 인스턴스를 만들고 써야함
스태틱 메서드를 new 연산자를 사용해서 호출하지 마라 비효율적임 그럼에도 문법적으로 허락하는 이유는 가아끔 쓸일이 있기 때문? 그래서 느슨하게 만들어놨다람쥐
중간에 조건이 에 대해서 잇으면 함수를 종료해라 하면 return 하면 함수 끝낸다

값을 리턴하지 않는 경우 return 안쓰면 된다
인스턴스 변수 사용하려면 new 명령어 사용해서 쓰면 된다
인스턴스 변수 this 에 저장된다

패키지 문법에는 static 개념이 없다
상위 클래스가 존재하는 경우에만 static 붙이거나 뗄 수 있음
A obj = new obj(); A 클래스에서 변수 선언 안에 있는 메소드 같은 건 해주지 않는다.

nullpointException 이거는 레퍼런스에 주소가 없다는 뜻임

profile
레거시 학살자

0개의 댓글