hyeonga_code

Java_43_지정 예약어 본문

Java

Java_43_지정 예약어

hyeonga 2023. 10. 6. 05:59
반응형


--------------------    클래스 선언    ----------------------

- 지정 예약어
- class 명
- extends 상위 클래스
- implements 상위 인터페이스

-------------------------------------------------------------------------------------------------------------
package '패키지 명'; 
import '패키지 명';
+ () 생략 가능
('접근 제한자') ('지정 예약어') class '클래스 명' (extends '상위 클래스') (implements '상위 인터페이스'){
     '접근 제한자' '지정 예약어' '자료형' '멤버 필드(변수명)';
     // 변수(선언부)
     '접근 제한자' '지정 예약어' '반환형' '멤버 메소드(매개변수..)'{
         // 기능 부여(메소드)
     }
     '접근 제한자' '생성자'() {}
     '중첩 클래스(내부 클래스)'
}
------------------------------------------------------------------------------------------------------------ -

class '클래스 명' {
    '자료형' '멤버 필드';
    '반환형' '멤버 메소드'('매개변수',...){
        return '반환값';
    }
}


4. 지정 예약어
   - class_클래스
      - static
         - 중첩 클래스
      - fanal
         - 상속에서 제외할 클래스
  - abstract
         - 추상화 클래스
   - field_필드
  - static
     - 정적, 공용, 공통적인
     - 기본적 메소드 활용
     |-----상수/메소드-----|-------힙-------|-------스택-------|
     |-----상수/메소드-----|-n/m/i----------|--aaa-------------|
     |-----상수/메소드-----|----------n/m/i-|----------bbb-----|
     - static 메소드 활용
     |-----i--------------|-n/m-----------|--aaa-----------|
     |-----i--------------|-------n/m-----|--------bbb-----|
        - i 가 고정이 되어 같이 움직임
        - 특정 객체의 것이 아니게 됨(클래스의 것)
     - 사용시, this 대신 클래스 이름으로 접근해야 함
     - 메모리가 되는 시기
        - static 멤버 : 프로그램 시작 시(객체와 상관 없음)
        - 일반 객체 멤버 : 객체 생성 시
     - 초기값을 따로 부여하여 사용할 수 있음
        - 객체를 생성하지 않아도 불러와서 사용할 수 있음
        '클래스 이름'.'static 멤버 이름'
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.*;
 
class Bank {
    private String name;
    private double money;
    // private float iyul;
    private static float iyul;
    //  > 이율이 한 번에 수정됨
    
    public Bank(String name, double money, float iyul) {
        this.name = name;
        this.money = money;
        // this.iyul = iyul;
        Bank.iyul = iyul;
    }
    
    public void setIyul(float iyul) {
        // 이율 변경 가능
        // this.iyul = iyul;
        Bank.iyul = iyul;
    }
    
    public void disp() {
        // 출력
        System.out.println(name + "'s money : " + money + " | iyul : " + iyul*100 + "%%");
    }
    
}
 
public class same {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        Bank aaa = new Bank("aaa"1000.00.05f);
        aaa.disp();
        Bank bbb = new Bank("bbb"1000.00.04f);
        aaa.setIyul(0.04f);
        // aaa의 이율을 수정해주어야 함
        aaa.disp();
        bbb.disp();
        Bank ccc = new Bank("ccc"1000.00.03f);
        aaa.disp();
        bbb.disp();
        ccc.disp();
    }
}






=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;
 
class A08 {
    private int a;
    private static int b;
    static {
        // 객체 생성과 상관 없이 프로그램 내에서 한 번 실행됨
        System.out.println("using static");
    }
    {
        // java에만 있음 : 객체를 생성할 때 생성자보다 먼저 실행되는 구문
        // 클래스 내에 위치와 상관없이 모든 생성자보다 먼저 실행됨
        // 그러나 잘 사용되고 있지는 않는다.
        System.out.println("using public");
    }
    public A08() {
        System.out.println("using default");
    }
    public A08(int a, int b) {
        System.out.println("using A08(int a, int b)");
    }
}
 
public class same {
    public static void main(String[] args) {
        A08 ap = new A08();
        A08 bp = new A08(1020);
    }
}
/*
-----------------------------------------------------------
1) using static                // 한 번만 실행됨
2) using public                // 일반 구문 실행 전에 출력
3) using default                // 일반 구문 실행 후 출력
4) using public                // 일반 구문 실행 전에 출력
5) using A08(int a, int b)        // 일반 구문 실행 후 출력
-----------------------------------------------------------
2), 3) : ap
4), 5) : bp
*/




  - final
     - 상속에서 제외되는 메소드
     - 객체를 생성할 때 한 번 초기값을 부여한 후 변경할 수 없음
      - 다른 곳에서 다시 선언할 경우 오류
        'Unresolved compilation problem: The final field A08.a cannot be assigned'
     - 클래스에서 초기값을 선언하지 않은 경우
         - 처음 사용할 때 값을 지정하고, this로 불러오면서 사용

  - static final
     - 상수 선언
       public static final 
          = public final static
     - static 멤버이므로 클래스 이름으로 접근
     - 접근 제한자가 public이므로 어디서든 접근이 가능(import)
     - java.lang에 포함 된 것은 import 생략 가능
=====

1
2
3
4
5
6
7
8
9
import java.util.*;
 
public class same {
    public static void main(String[] args) {
        System.out.println("circle width : " + 5*5*Math.PI);
        // public static final double PI 3.141592653589793 
        //    >>> final 필드이므로 변경할 수 없음
    }
}



       - transient
          - 네트워크나 I.O에서 필드값을 전송하지 않는 경우
   - method_메소드
       - static
           - 필드의 static과 동일
           - 안에서는 static 멤버만 호출 가능
           - static 없어도 되는 이유 : main
           - static이 있는 메소드 안에서는 static 안에 존재하는 객체만을 사용할 수 있음
           - static 은 객체와 상관없이 메모리가 올라가는 것이므로 객체를 만들지 않은 생성자는 main 클래스 안의 생성자를 의미함
           - static 없는 경우에는 클래스에 존재하여 객체를 생성했을 때
=====

1
2
public static double random(){ ... }
//   >>> Math.random() 사용 가능




=====

1
2
3
public static void main(String[] args) { ... }
// JVM이 제일 먼저 찾아 실행하는 것이므로 static 필수
// 어디서든 찾을 수 있어야 하므로 public 필수




             - 'Run Configuration'
    - 'Program arguments' : 값
   - 공백으로 값을 구분
=====

1
2
3
4
5
6
7
8
9
10
import java.util.*;
 
public class same {
    public static void main(String[] args) {
        for(int i=0; i<args.length++i) {
            System.out.println(args[i]);
        }
    }
}
// 'Program arguments' 에 입력한 값이 출력됨
cs



반응형

'Java' 카테고리의 다른 글

Java_45_클래스_중첩 클래스  (0) 2023.10.08
Java_44_클래스_지정 예약어  (0) 2023.10.07
Java_42_캡슐화  (0) 2023.10.05
Java_41_접근 제한자_public < protected < default < private  (0) 2023.10.02
Java_40_this  (0) 2023.10.01