[Java] 5주차 과제
전체적으로는 java in Nutshell을 참고합니다.
공부내용
- 클래스 정의하는 방법
- 생성규칙
- 하나 이상의 문자
- 첫글자는 숫자가 될 수 없음
- ’$’,’_‘외의 특수문자를 사용할 수 없음
- 자바 keyword(while, if) 들을 사용할 수 없음
- 한글도 가능하다.
- public class는 파일 이름도 동일해야한다. public class Student -> Student.java
- 생성규칙
- 객체 만드는 방법 (new 키워드 이해하기)
- new 연산자는 heap영역에 메모리를 할당하고, 할당한 메모리의 주소를 반환하는 연산자이다.
- new 연산자의 argument는 constructor
- 메소드 정의하는 방법
- 기본형식
한정자 리턴 함수명 타입 파라메터 public int cal (int... args) { int ret = 0; for(int i=0;i<args.length;i++){ ret+=args[i]; } 리턴 키워드 리턴 값 return ret; }
- 접근 한정자
한정자 클래스내부 동일패키지 같은 패키지의 하위클래스(상속) 다른 패키지의 하위클래스(상속) 앞의3가지를제외한외부접근 public O O O O O protected O O O O X 없음(default) O O O X X private O X X X X <- get,set를 이용 - 기본형식
- 생성자 정의하는 방법
- new 연산자로 생성된 객체의 초기화를 담당한다.
- public 생성자
- 객체 생성시 초기화를 담당한다.
- public + class 명 + param
- 예시
class Student { private int id; private String name; // default 생성자 public Student() {} // 생성자 오버로딩 public Student(int id, String name) { this.id = id; this.name = name; } }
- 생성자 오버로딩을 한경우에는 default생성자가 자동으로 생성되지 않으니 주의!!
- private 생성자
- 인스턴스를 만들 필요가 없는 클래스의 경우사용
- ex ) Math 클래스가 대표적
- method && field를 static으로 선언하여, 접근할 수 있도록 함
- 인스턴스를 만들 필요가 없는 클래스의 경우사용
- this 키워드 이해하기
- 클래스 멤버변수를 참조함
- 다른 contructor를 참조함(첫줄에 써야함)
public static void main(String[] args){ exclass ex = new exclass() // Hello java !! // default block } public class exclass { public exclass() { this("java"); // 이건 반드시 첫줄 System.out.println("default block"); } public exclass(String name) { System.out.println("Hello "+name+" !!"); } }
- nested Class
- static nested class
- inner class
- local class
- method 내부에 선언된 클래스
public class app { public static void main(String[] args) { printName("messi",21200); } public static void printName(String name, int id) { // student class는 printName안에서만 사용가능 class student { public String name; public int id; public student() { this.name = name; this.id = id; } @Override public String toString() { return "student{" + "name='" + name + '\'' + ", id=" + id + '}'; } } student st = new student(); System.out.println(st.toString()); } }
- method 내부에 선언된 클래스
- anonymous class
- local class와 거의 같지만 이름이 존재하지 않음
- interface 혹은 상속받을 class가 필요
public class app { public static void main(String[] args) { printName("messi",21200); } //익명 클래스 생성을 위한 interface //함수형 인터페이스 //abstract method가 하나 필요하다. //default method는 직접 구현을 해야한다. @FunctionalInterface interface student{ void test(); default void print(){ System.out.println("default test"); } } public static void printName(String name, int id) { student st = new student() { // 상속받은 interface를 구현함으로써 익명클래스 완성 @Override public void test() { System.out.println("anonymous test"); } }; // default method st.print(); // 구현한 method st.test(); System.out.println(name+" "+id); } }
- plus
- String str = “a” vs String str = new String(“a”)
- literal에 바로 할당하는게 좋다고 배웠었는데 이번에 공부하면서 다시 생각해볼만한 내용
- 참조 : https://catch-me-java.tistory.com/38
- reflection APi
- 클래스정보를 런타임시 알 수 있게 해줌
- 참조 : https://pocada.medium.com/java-reflection-api-1-61c3fc957e6d
- String str = “a” vs String str = new String(“a”)
Leave a comment