점수 최대값 찾았는데 중복값이 나왔을 때 출력
String maxNames = ""; 로 최대값이 나온 값을 지정해야한다. 배열의 길이는 변하면 안되서 변수로 넣어둠
int maxScore = scores[0] ;
String maxNames = "";
for (int i = 0 ; i < scores.length ; i++) {
maxScore = (maxScore < scores[i]) ? scores[i] : maxScore;
if(maxScore==scores[i]) {
maxNames += stuName[i];
}
}
멤버 : 자바 클래스에 구현할 수 있는 것 , 필드,메소드,생성자
클래스는 위의 3가지를 코드로 정의해야함 !!!
메인 메소드가 없는 클래스 (참조클래스 : JVM이 실행할 수 없음, 메인메소드로 가져와서 실행해야함)
인스턴스VS 정적멤버
인스턴스 멤버: 클래스 객체가 있어야 사용가능
정적 멤버: 클래스 객체가 없어도 사용 가능
클래스 객체 만드는 법
먼저 자바스크립트의 객체 만드는 법을 보자 !
var Cat = {
name : "pudding",
age : 1
}
Cat이라는 객체를 생성했으며 , name과 age는 프로퍼티이다. 이 프로퍼티는 자바에서는 필드라고 한다!
인스턴스 객체를 만들어보자.
public class Cat {
//클래스 레벨에서 쓰는 변수 , 필드 구현 완료
public String name;
public String kind;
public int age;
public String color;
public String weight;
//생성자 :컴파일된 클래스로 메모리에 객체를 생성할 때, 객체를 어떻게 만들어야 하는지를 구현 !!
public Cat(String name,String kind,int age,String color,String weight) {
this.name = name;
this.kind = kind;
this.age = age;
this.color = color;
this.weight = weight;
}
}
main 메소드가 있는 객체에서 실행시켜준다. ( 메인메소드가 있는 객체를 실행객체라고 하기도 한다)
public class CatExample {
public static void main(String[] args) {
Cat myCat = new Cat("나비","코리안 숏헤어",3,"흰색",2);
Cat yourCat = new Cat("수리","코리안 숏헤어",3,"흰색",2);
System.out.println(myCat.age); // 3
}
}
생성자가 있으니까 값을 집어넣을 수 있는 거임.
만약 default 생성자로 쓴 경우 , 파라메터 값으로 받을 수 없음
class Cat{
public String name = "pudding";
}
public class MyClass {
public static void main(String[] args){
Cat myCat = new Cat(); // 생성자를 안만들어서 , 인자값으로 아무것도 넣을 수 없음
System.out.println(myCat.name);
}
}
객체가 생성될 때 , 항상 객체가 어떻게 생성될지 가이드라인을 주는게 생성자이다 !
new 객체 읽는 방법 !
Cat myCat = new Cat("나비","코리안 숏헤어",3,"흰색",2);
Cat클라스의 myCat 인스턴스 객체
둘다 객체이지만 , 메모리에서 실행중인 것은 인스턴스라고 한다 !!
Cat의 경우 파라메터값이 있는 생성자를 넣어서 , 이런식으로 객체 생성될 때 틀이 만들어지는데
CatExample은 생성자를 만들지 않아서 객체의 틀(age, color,kind ,,, 등등)이 따로 없다. 그냥 디폴트 생성자만 있는 것임
객체는 자신을 정의한 값들 (필드 : 전역변수)를 가지고 있고 , 기능(메소드)를 수행할 수 있음
클래스를 객체화 시킨다는 말은 "메모리"에 클래스를 생성
클래스를 인스턴스(메모리에 실행)화 시켰다고 함 !
클래스 생성문법
접근제어자 class 클래스이름 { }
접근제어자 공부해놓은 글
https://ddddddfsddfdg.tistory.com/142
자바 접근제어자 (Access Modifiers)
class Animal{ public void method1(){ } private void method2(){ } } 키워드 public은 다른 클래스에서 쓸 수 있다. 반면에 키워드 private은 다른 클래스에서 쓸 수 없다. 자바에서는 네가지의 접근제어자가 있다. 제
ddddddfsddfdg.tistory.com
접근제어자의 기능 : public을 명시(실행 파일에 하나만 있어야함)하거나 , 없는 경우밖에 없다.
Dog를 다른 페키지 안에 넣어두었다.
이때 Dog 접근제어자를 public으로 넣어도 , import 해주지 않으면 쓰지 못한다.
public으로 만들어서 다른 패키지에서 쓸 수 있지만 다른 패키지에서 쓰려면 import해줘야한다.
개발할 때는 대부분 다른 패키지에서 클라스 객체를 사용하기 위해 접근제한자 public을 사용한다.
클라스 접근제한자는 public or default(아무것도 안만들었을 때) ( private protected는 없음 !!)
필드나 메소드의 접근제한자는 public default(아무것도 안만들었을 때) private protected
이렇게 파란세모가 있는 것은 클래스의 접근제어자가 public이 아니라는 뜻임 default클라스라서 패키지 내부에서만 쓸 수 있음
필드의 특징
초기값을 설정하지 않아도 기본 초기값이 정해져있다.
//필드 멤버
public String manufacturer = null;
public String model;
public int cc = 0;
public String color ;
public int speed = 0;
사실 이렇게 초기화를 안해도 정수는 0, 실수는 0.0 , boolean 은 false , String 객체는 null로 초기화된다.
그래서 그냥 public String manufacture; 이런식으로 만들어도 된다.
하지만 메소드 내부에 선언되는 로컬변수는 초기화 값이 없기 때문에 무조건 초기값을 설정해준다.
생성자 : 객체를 어떻게 만들어야되는지를 구현
객체가 불러질 때 생성자는 반드시 실행됨
메소드를 넣어도 되고 , 파라메터 생성자로 필드에 필요한 값을 대입하는 식으로 만들어도 됨
기본생성자 : 파라메터가 없는 생성자 , 컴파일 시에 자바 컴파일러가 기본생성자를 자동으로 추가함
클라스 만드는 3가지 멤버 (필드,메소드.생성자) 중에 생성자는 반드시 필요함 !
public Car(){
}
생성자를 여러개 만들어서 오버로딩 할 수 있음
조건 !
생성자도 오버로딩 할 수 있음 .
대신 매개변수 갯수가 달라야함
만약 갯수가 동일해도 순서에 따른 타입이 달라야함
이런식으로 갯수도 같고 타입이 같으면 오버로딩을 못함 .. 생성자를 만들때 갯수가 같다면 반드시 타입을 다르게 해야함
생성자를 생성할 때 , 안에다가 조건을 걸 수도 있다.
public Car(String manufacturer,String model,int cc,String color,int speed) {
this.manufacturer = manufacturer;
this.model = model;
if(cc < 1000 ) {
this.cc = 1000;
}else {
this.cc = cc;
}
this.color = color;
this.speed = speed;
}
추가적으로 알아야할 것 !
매개변수가 있는 생성자를 선언한 경우 , 컴파일 시에 생성되는 자바 바이트코드(.class 파일)은 기본 생성자를 선언하지 않음
'Development (국비 복습 ) > 자바' 카테고리의 다른 글
[2023-03-23] static,접근제한자(private),getter,setter (0) | 2023.03.23 |
---|---|
[2023-03-22]인스턴스,VO,오버로딩 (0) | 2023.03.22 |
[2023-03-20]배열복사,다차원 배열,자바 문제 (0) | 2023.03.20 |
[2023-03-17]NullPointException,String메소드,인코딩,배열 (0) | 2023.03.17 |
[2023-03-16]입력값을 받는 Scanner객체, String객체,Null (0) | 2023.03.16 |
댓글