
클래스명과 자바파일의 이름이 동일해야 함.
일반 클래스와 메인 클래스가 섞여 있는 경우 // 클래스명의 앞의 첫글자는 무.조.건. 대문자로 시작함.
1. 반드시 여러 개의 클래스 중에서 한 개의 클래스만 public 키워드를 붙일 수 있다.
2. 메인클래스를 선언하는 곳의 접근 제어자가 public이어야 한다.
3. 파일명은 public 키워드가 붙어있는 클래스의 이름과 동일해야 함.
일반클래스들만 여러 개가 있는 경우
1. 반드시 여러 개의 클래스 중에서 한 개의 클래스만 public 키워드를 붙일 수 있다.
2. 파일명과 동일한 이름의 클래스에만 public 키워드를 붙일 수 있다. // 파일명과 동일한 class는 반드시 하나 있어야 함.
클래스의 멤버로 존재할 수 있는 것
1. 속성 - 변수, 상수, 객체
2. 기능 - 메소드, 초기화블럭, 생성자
// 조건문, 반복문, 대입문 메소드나 생성자 안에 기술해야함.
: 클래스에서 인스턴스(객체)를 생성할 수 있도록 도와주는 기능을 처리함.
1. 반드시 클래스명과 동일해야 함.
2. 반드시 리턴타입을 기술하는 기술부 자체가 없음.
3. 객체생성문에서 new라는 키워드 뒤에 호출이 됨.
ex) ExClass ec = new ExClass( ); 객체를 생성할 때, 한번만 호출할 수 있음.
메소드는 여러번 호출할 수 있음.
4. 클래스안에 기술된 생성자가 한개도 없으면 기본생성자가 숨어있음.
5. 클래스안에 기타생성자가 한 개라도 기술되어있으면 기본생성자는 사라짐.
기본생성자를 사용하려면 반드시 기본생성자도 기술해줘야 함.
클래스복제
생성자안의 명령문 실행
default (기본)생성자 : 클래스안에 기술된 생성자가 한 개도 없으면 기본생성자가 숨어있다.
// 숨어있는 기본 생성자 // 생성자를 직접 생성해도 됨.
public 클래스명( ){ }
[접근제어자] 클래스명() {
[실행문들...;]
}
기타생성자
[접근제어자]클래스명(매개변수...){
[실행문들...;]
}
// 메소드의 가장 중요한 것은 리턴타입과 리턴을 저어줌
//메소드 형식
[접근제어자] [기타제어자] 리턴타입 메소드명([매개변수...]){
실행문들...;
[return 값;]
}
: 클래스안의 멤버필드(속성)의 초기화를 진행,
//생성자 형식 ---> 리턴값이 아예 없음.
[접근제어자] 클래스명([매개변수...]){
}
class Ex09Class{
int x; // 멤버변수 --> 인스턴스(속성) // 0
int y; // 멤버변수
public Ex09Class() { // 생성자 --> 리턴타입이 없어야함.
System.out.println("매개 변수가 없는 디폴트 생성자");
}// 생성자 : 객체를 생성할 수 있도록 해주는 기능
public void showPoint() {
System.out.println(x+", "+y );
}
}
public class Ex09Main_constructor {
public static void main(String[] args) { //argument 인자
// 객체생성문 형식
// 자료형(=클래스명) 객체명 = new 생성자호출문; // 생성자호출문 => 클래스명()
Ex09Class e9c = new Ex09Class(); // 클래스를 복제한다 = 객체생성
// new Ex09Class(); // 매개 변수가 없는 디폴트 생성자(출력 하면 다시 출력하지 않음), 생성자 호출문
e9c.showPoint();
}
}
class Ex10Class{
int x;
int y;
//public 클래스명() {} 기본생성자 --> public Ex10Class() {};
// 아무런 생성자가 없을 때 숨은 기본생성자가 있음 그 외의 경우 사라짐.
public Ex10Class() {// 생성자 리턴타입의 기술부가 없어서.
// 클래스의 이름과 동일함 --> 생성자
x = 5;
y = 6;
System.out.println("매개 변수가 없는 디폴트 생성자");
}
public Ex10Class(int new_x, int new_y) { // 기타생성자, 클래스명과 동일해야함.
x = new_x;
y = new_y;
}
public void showPoint() {
System.out.println(x + ", " + y);
}
}
public class Ex10Main {
public static void main(String[] args) {
Ex10Class pt06 = new Ex10Class(); // error 기본생성자는 기타생성자에 의해서 사라짐
Ex10Class pt07 = new Ex10Class(100, 200);// 클래스 안에서 생성자 한개만 실행됨.
System.out.println(pt07.x + ", " + pt07.y);
Ex10Class pt08 = new Ex10Class(300, 400);
System.out.println(pt08.x + ", " + pt08.y);
}
}
class T{
int c;
}
class E{
// 메소드 안에 선언 --> 지역변수, 클래스안에 선언 ---> 전역변수.
// int i; // 멤버 변수 여서 자동초기화 값을 가짐.
// boolean b; // default false
// char c; // 공백 한칸
// double d;// 0.0
// float f;// 0.0f
// long l; // 0L 멤버변수 --> 클래스 안에 바로 선언되어 있음. 자동초기화 값이 있음.
// String s; //NULL 멤버필드---> 객체, 멤버로 있는 참조변수
// T t; // 객체 선언, 객체 참조 변수 ---> 주소값을 가지고 있음.
public void md() {
int i=0; // 지역 변수는 자동초기화 값이 없어서 선언만 해주면 아래 프린트문에서 오류를 발생시킴
boolean b = false;
char c =' ';
double d =0.0;
float f =0.0f;
long l = 0L;
String s =null;
T t =null; // int여도 클래스 이면 초기화를 null로 할 수 있음
// int i = 5; // 지역변수는 동일한 이름으로 재선언 불가!
// int A; boolean B; char C; double D; float F; long L; String S;
System.out.println("▼ 멤버면수, 전역변수의 자료형에 다른 초기값");
System.out.println("i의 초기값: "+i);
System.out.println("b의 초기값: "+b);
System.out.println("c의 초기값: "+c);
System.out.println("d의 초기값: "+d);
System.out.println("f의 초기값: "+f);
System.out.println("l의 초기값: "+l);
System.out.println("s의 초기값: "+s);
System.out.println("t의 초기값: "+t);
System.out.println("\n========================================");
}
}
public class Ex11Main {
public static void main(String[] args) {
E e = new E(); // 생성자 호출문
//기본 생성자 형식 public E() {}
e.md(); // 호출
}
}
비교대상이 변수인 경우는 == (동등비교연산자)의의미는 값을 비교하는 연산자
비교대상이 객체인 경우는 ==(동등비교연산자)의 의미는 주소값을 비교하는 연산