1. 복습
실습) 1~100까지의 점수를 6개 받고 점수를 부여. 동일한 점수일 경우 동일 등수 주기.
import java.util.Scanner;
public class MaxTest {
public static void main(String[] args) {
int [] ar= new int [6];
int size = ar.length;
Scanner sc = new Scanner(System.in);
int [] rank = new int[size];//등수
//등수 1로 초기화
for(int i=0; i<size; i=i+1) {
rank[i]=1;
}
for(int i=0;i<size;i=i+1) {
System.out.print("정수 (0-100) 입력: ");
ar[i]=sc.nextInt();
if(ar[i]<0||ar[i]>100) {
System.out.println("잘못입력하셨습니다. 다시 입력하세요");
i=i-1;
}
}
//오름 차순 계산하기
for(int i=0; i<size-1; i=i+1) {
for(int j=i+1;j<size;j=j+1) {
if(ar[i]>ar[j]) {
int temp=ar[j];
ar[j]=ar[i];
ar[i]=temp;
}
}
}
for(int i=0;i<size;i=i+1) {
for(int j=0; j<size; j=j+1) {
if(ar[i]<ar[j]) {
rank[i]=rank[i]+1;
}
}
}
for(int i=0; i<size; i=i+1) {
System.out.println(i+"는 "+ar[i]+"이고, 등수는 "+rank[i]);
}
sc.close();
}
}
2. Class
=> 동일한 목적을 위해 모아둔 메소드와 변수의 집합
=> 사용자 정의 자료형
=> 정적(static) 변경이 안된다.
=> 클래스 이름은 대문자로 시작
=> 하나의 파일에 하나의 클래스를 만드는 것을 권장
=> 클래스 이름은 출력이 안된다.
=> 인스턴스를 저장한 변수를 출력하면 클래스 이름과 해시 코드가 출력
* Instance (객체 - object) : class를 가지고 메모리 할당을 한 개체, 동적(dynamic) - 변경가능
* public : 이 클래스를 모든 곳에서 사용 가능, public 이 없으면 현재 패키지에서만 사용 가능
*클래스 이름 변경: 마우스 오른쪽 클릭 -> refactor -> rename (alt + shift + r)
3. Data
1) 변경 여부에 따른 분류
- 상수(Constant, Literal) : 변경이 불가능한 데이터
- 변수(Variable) : 메모리에 붙여둔 이름, 내용 변경이 가능
2) 변수의 종류(저장된 데이터의 종류)
- value(값)
- reference(주소) ex) 배열, instance, enum 등
3) 유효 범위에 따른 분류
- local variable(지역변수) : 메소드(함수), 제어문, 예외처리 구문 내에서 생성된 변수
만들어진 범위 내에서만 사용 가능
variable 형은 자동 초기화가 안됩니다.
reference 형은 null로 초기화 됩니다.
stack 에 생성
- class variable (static variable / 클래스 변수)
클래스 안에 선언하는 변수로 static 이라는 예약어와 함께 선언
단 하나만 생성되고 프로그램이 종료 될 때까지 소멸되지 않음
만들면 기본값으로 자동 초기화
클래스와 인스턴스 모두 사용 가능
목적은 공유
- member variable (멤버변수, 인스턴스)
클래스 안에 static 없이 선언되는 변수
인스턴스 별로 별도로 생성
만들면 기본 값으로 자동 초기화
인스턴스만 사용 가능
4. 접근 지정자
=> 클래스와 클래스 내부에 선언한 변수와 메서드에 설정가능
1) 클래스의 접근 지정자
- public : 모든 곳에서 이 클래스를 사용 가능
- 생략( default, package) : 현재 패키지 내에서만 사용 가능
2) 변수와 메소드의 접근 지정자 (위에서 아래로 갈 수록 사용 범위 넓어짐)
- private : 클래스 내부에서만 사용 가능
- 생략(default) : package 안에서는 public이 되고 외부에서는 private
- protected : 패키지 내에서는 public 외부에서는 클래스 내부와 상속받은 클래스에서 사용 가능
- public : 클래스 내부에서 사용할 수 있고 객체도 사용 가능
=> 변수는 private, 메소드는 public 으로 사용하는게 일반적
* final 변수
=> 변수의 값을 변경하지 못하도록 할 때, 사용하는 예약어
=> 이름은 모두 대문자로 하는 것이 관례
=> 읽기 전용을 만들기 위한 명령어 (lock 을 걸어버리는 것)
* 프로그래밍에서 금기시 하는 것
중복: 유지보수 문제
종속: 유지보수 문제
public class Main {
public static void main(String[] args) {
//student 클래스의 인스턴스를 생성
Student st1 = new Student();
Student st2 = new Student();
//인스턴스 출력
System.out.println(st1);
System.out.println(st2);
//클래스 변수는 인스턴스를 이용하지 않고 접근이 가능한데 인스턴스를 이용해서 접근했기 때문에 경고
Student.schoolName="Blizzard";
System.out.println(st1.schoolName+"\n"+st2.schoolName);
st1.schoolName="Nexon";
System.out.println(st1.schoolName+"\n"+st2.schoolName);
System.out.println("----------------------------");
st1.studentName="성운";
st2.studentName="재환";
System.out.println(st1.studentName+"\n"+st2.studentName);
}
}
public class Student {
//class 변수 : 공유(인스턴스와 클래스 모두 사용 가능)
//다같이 사용
static String schoolName;
//instance 변수: 각각 소유(인스턴스만 사용 가능)
String studentName;
}
5. method
=> 기능
=> 자주 사용하는 코드를 하나의 이름으로 묶어주고 사용하기 위한 개념
생성(정의) - 클래스 안에서 작성
[접근지정자] [특성] 리턴타입 메소드이름(매개변수) { }
=> 접근지정자: private/public, 리턴타입: 없으면 void
메소드 호출
클래스이름or인스턴스이름 . 메소드이름(매개변수)
public class Main1 {
public static void main(String[] args) {
//MethodClass의 인스턴스 만들기
MethodClass mc = new MethodClass();
//MethodClass의 disp메소드 호출
mc.disp();
}
}
6. 매개변수(argument)
=> 메소드를 호출 할 때 넘겨주는 데이터
=> 개수 제한 없음
=> 매개 변수가 있는 메소드를 호출할 때는 반드시 매개변수를 대입하여 호출
public class Main1 {
public static void main(String[] args) {
//MethodClass의 인스턴스 만들기
MethodClass mc = new MethodClass();
//MethodClass의 disp메소드 호출
mc.disp();
//MethodClass의 javaDisp 메소드 호출
mc.javaDisp(5);
//MethodClass의 add 메소드 호출
mc.add(5, 3);
}
}
public class MethodClass {
//메소드 생성을 연습할 클래스
//Hello world를 3번 출력하는 메소드
public void disp(){
for (int i=0; i<3; i=i+1){
System.out.println("Hello World!");
}
}
//정수 1개를 받아서 정수 만큼 Java 라는 문자열을 출력하는 메소드
public void javaDisp(int n) {
for(int i=0; i<n; i=i+1) {
System.out.println("Java");
}
}
//정수 2개를 받아서 2개의 숫자 합을 출력하는 메소드
public void add(int a, int b) {
System.out.println("결과: "+(a+b));
}
}
'IT > JAVA (17.12.18~)' 카테고리의 다른 글
9일차 JAVA(9) (0) | 2017.12.29 |
---|---|
8일차 JAVA(8) (0) | 2017.12.28 |
6일차 JAVA(6) (0) | 2017.12.26 |
5일차 JAVA(5) (0) | 2017.12.22 |
4일차 JAVA (4) (0) | 2017.12.21 |