h-i-s-t-o-r-y

[Java] 객체 생성 예제 본문

Java

[Java] 객체 생성 예제

H' 2021. 7. 16. 19:29

> TV 객체 생성하는 예제

TV.java

package days15;

public class TV {
	// fields
	public String color = "red";
	public boolean power ;
	public int channel = 10;
	
	// constructor
	public TV(String color, boolean power, int channel) {
		// fields 초기화
		this.color = color;
		this.power = power;
		this.channel = channel;
	}
	
	public TV() {
		
	}

	// methods
	public void power() {
		power = !power;
	}
	public void channelUp() {
		channel++;
	}
	public void channelDown() {
		channel--;
	} 
}

 

Ex05.java

package days15;

public class Ex05 {

	public static void main(String[] args) {
		// The local variable i may not have been initialized
		// 지역변수는 반드시 초기화를 해야지 사용할 수 있다.
		//int i;
		//System.out.println( i );
		
		// TV 클래스 선언
		// 객체 t1, t2
		
		TV t1 = new TV();
		// *** 객체명(참조변수).필드 또는 객체명.메서드 ***
		//     클래스명.필드 또는 클래스명.메서드 X
		//     TV.power  TV.channel X
		
		// *** 클래스의 필드는 초기화 하지 않아도 사용할 수 있고.
		//               각 자료형의 기본값으로 초기화 되어져 있다.
		System.out.println( t1.power );   // false
		System.out.println( t1.channel ); // 0
		System.out.println( t1.color );   // null
		
		
		TV t2 = new TV();
		
		t2.color = "blue";
		
		t1.channel = 11;		
		t1.channelUp();
		System.out.println( t1.channel );  //12
		
		System.out.println( t2.color );  // blue
		
		t1.power(); // method  power()
		System.out.println( t1.power );  // field power
		
		

	}

}

> Student 객체 생성하는 예제

Student.java

package days15;

// 학생 클래스 선언
public class Student {
	// 필드
	public String name;
	public int no;
	public int kor, eng, mat;	//Alt + Shift + S
	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int tot;
	//getter
	public int getTot() {
		return tot;
	}

	public int rank;
	public int wrank;
	public double avg;
	
	// 메서드
	public void printSungjuk() {
		System.out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\t%d\n"
				,no, name, kor, eng, mat, tot,avg, rank);
	}
	
} // class
// p.240 객체 배열 (==클래스배열)
// 많은 객체를 다루고자 한다면
// 아래 코딩처럼 하지말고, 배열을 사용하자

Student s1 = new Student();
s1.no = 1;
s1.name = "강현구";

Student s2 = new Student();
s2.no = 1;
s2.name = "권희준";

Student s3 = new Student();
s3.no = 1;
s3.name = "김나린";

s1.printSungjuk();
s2.printSungjuk();
s3.printSungjuk();
// 클래스 배열 선언
// 자료형 [] 배열명 = new 자료형 [배열크기]
// **** students 객체명이 아니라 배열명이다. ****
Student [] students = new Student[3];	//객체 생성한거 아님

char con = 'y';
int cnt = 0;
do {
    students[cnt] = new Student();
    students[cnt].no = 1;
    students[cnt].name = "강현구";
    cnt++;
    // 계속 여부 확인 ?
} while (Character.toUpperCase(con)=='Y');
		
for (int i = 0; i < students.length; i++) {
	students[i].printSungjuk();
}
System.out.println("END");
		
// NullPointException 예외 발생.
//Student s1 = null;   = new Student();
//s1.name = "홍길동";
		
	}//main

}//class

 

Ex06.java

package days15;

import java.io.IOException;
import java.util.Random;
import java.util.Scanner;


public class Ex06 {

	public static void main(String[] args) throws IOException {

		// 30명
		// 학생관리( 이,국,영,수,총,평,등 ) 
		final int COUNT = 30;

		// [클래스 배열]
		// 클래스타입 []  배열명 = new 클래스타입[30];
		Student[] students = new Student[COUNT];
		

		Scanner scanner = new Scanner(System.in);
		int cnt = 0;  // 입력받은 학생수
		char con = 'y';

		// students[0]
		String name;
		int kor, eng, mat, tot, rank;
		double avg;

		do {
			System.out.printf("> [%d]번 학생 이름,국,영,수 입력 ? ", cnt+1); 
			
			name = getName();
			kor = getScore();
			eng = getScore();
			mat = getScore();

			tot = kor + eng + mat;
			avg = ( double )tot/3;
			rank = 1;

			// java.lang.NullPointerException
			// 해결 ? *** 방마다 객체 생성해 줘야함
			students[cnt] = new Student();
			
			students[cnt].no = cnt+1;
			students[cnt].name = name;
			students[cnt].kor = kor;
			students[cnt].eng = eng;
			students[cnt].mat = mat;
			students[cnt].tot = tot;
			students[cnt].avg = avg;
			students[cnt].rank = rank;
			students[cnt].wrank = 1;

			cnt++; // 1

			System.out.print("> 입력 계속 할거냐 ? ");
			con = (char)System.in.read();
			System.in.skip(System.in.available());
		} while ( Character.toUpperCase(con) == 'Y' );

		// 출력
		System.out.printf("> 학생수 : %d명 \n", cnt);
		for (int i = 0; i < cnt ; i++) {
			students[i].printSungjuk(); 
		}


	} // main

	public static int getScore() {
		// 0~100
		Random rnd = new Random();
		return rnd.nextInt(101);
	}

	public static String getName() {
		// 대문자 5 발생시켜서 이름으로 처리.
		// 65~90          -65
		// 0 ~ 25
		Random rnd = new Random();

		char [] names = new char[5];
		for (int i = 0; i < 5; i++) {
			names[i] = (char)( 	 rnd.nextInt(26) + 65   );
		}

		// String -> char[] 변환
		// char [] -> String 변환
		String name =  new String ( names );
		return name; 
	}

} // class

 

 

Comments