자바 기초 학습 패키지 및 접근 제어 권한 (4)

35295 단어 JavaSE
기본 개념
  • 패키지 및 접근 제어 권한
  • 가방 의 정의
  • 가방 가 져 오기
  • 접근 제어 권한
  • 단일 디자인 모델 (Singleton)
  • 여러 가지 디자인 모델

  • 패키지 및 접근 제어 권한
    가방 의 정의
    가방 이란 실제로 폴 더 를 가리킨다.정의 패키지
    // An highlighted block
    package com.yootk.demo;
    public class Hello{
         
    	public static void main(String args[]){
         
    		System.out.println("hello world");
    	}
    }
    

    위 에서 알 수 있 듯 이 Hello 클래스 는 com. yootk. demo 패키지 에 압축 컴 파일 되 어 있 습 니 다: javac - d. Hello. java
  • "- d": 디 렉 터 리 를 생 성하 고 패키지 의 정의 에 따라 생 성 합 니 다.
  • ".": 저장 경 로 를 설정 하면 현재 있 는 경로 에서 생 성 됩 니 다.실행 설명: 자바 com. yootk. Hello 메모: 실행 프로그램 을 설명 할 때 가방 에 들 어가 지 말고 가방 밖 에 클래스 의 전체 이름 (가방. 클래스) 을 입력 해 야 합 니 다.

  • 가방 가 져 오기
    import 사용 하기
    // An highlighted block
    package com.yootk.demo;
    import com.yootk.util.Message;
    public class Hello{
         
    	public static void main(String args[]){
         
    		System.out.println("hello world");
    	}
    }
    

    만약 에 여러 개의 *. 자바 파일 중의 클래스 가 서로 인용 되 는 상황 이 존재 한다 면 컴 파일 순서 문 제 를 해결 하기 위해 어댑터 의 조작 을 제공 합 니 다: 자바 c - d. 자바. 그러면 코드 호출 순서에 따라 자동 으로 프로그램 컴 파일 을 진행 합 니 다.마스크 * 를 사용 하지 않 으 면 2 단계 작업 을 진행 합 니 다.
  • 첫 번 째 단계: 먼저 Message. java 파일 을 컴 파일 하고 실행: javac - d. Message. java
  • 두 번 째 단계: Hello. java 파일 을 컴 파일 하고 실행: javac - d. Hello. java 는 가방 에 있 는 여러 종류의 import com. yootk. util 을 가 져 옵 니 다.가방 의 모든 정적 속성 과 방법 import static com. yootk. util 가 져 오기;주의: 상기 방법 은 성능 문 제 를 일 으 키 지 않 습 니 다. 클래스 를 불 러 올 때 도 필요 한 클래스 만 불 러 올 뿐 사용 하지 않 는 클래스 는 불 러 오지 않 기 때문에 import com. yootk. util. Message 와 import com. yootk. util. * 성능 은 같 습 니 다.

  • 접근 제어 권한
    NO.
    범위.
    private
    default
    protected
    public
    1
    같은 가방 의 같은 종류 에 있 습 니 다.




    2
    같은 가방 의 다른 종류.



    3
    다른 가방 의 하위 클래스


    4
    서로 다른 가방 의 비자 류

    간단하게 말하자면 private 는 한 종류 에서 만 접근 할 수 있 습 니 다.default 는 한 가방 에 만 접근 할 수 있 습 니 다.protected 는 서로 다른 가방 의 하위 클래스 에 있 습 니 다.Public 는 모든 것 을 위해 가능 합 니 다.
    com. yootk. demoa. A 클래스 정의
    // An highlighted block
    package com.yootk.demoa;
    public class A{
         
    	protected String info = "Hello";
    }
    

    com. yootk. demoa. B 클래스 정의
    // An highlighted block
    package com.yootk.demoa;
    import com.yootk.demoa.A
    public class B extends A{
         
    	public void print(){
         
    		System.out.println("A  info = "+super.info);
    	}
    }
    

    그렇다면 일반적인 상황 에서 어떻게 권한 을 선택 합 니까?답: 속성 성명 은 주로 private 권한 을 사용 합 니 다.방법 설명 은 주로 Public 권한 을 사용 합 니 다.
    단일 디자인 모드 (Singleton)
    이전 대부분의 속성 정 의 를 내 릴 때 private 를 사용 하여 성명 을 했 고 구조 방법 에 대해 서도 private 성명 을 사용 할 수 있 으 면 이때 의 구조 방법 은 사유 화 되 었 다.구조 방법 비 민영화
    // An highlighted block
    class Singleton{
         
        public void print(){
         
            System.out.println("Hello");
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Singleton singleton = null;
            singleton = new Singleton();
            singleton.print();
        }
    }
    
    

    민영화 구조 방법
    // An highlighted block
    package chapter5;
    class Singleton{
         
        private Singleton(){
         
            
        }
        public void print(){
         
            System.out.println("Hello");
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Singleton singleton = null;
            singleton = new Singleton();
            singleton.print();
        }
    }
             ,           ,       ,         Singleton    。
    

    지금 은 싱글 톤 류 의 구조 방법 이 수정 되 지 않 고 증가 하지 않 으 며 print () 방법 이 수정 되 지 않 는 상황 에서 어떻게 조작 해 야 클래스 의 외부 가 실례 화 대상 을 통 해 print () 방법 을 호출 할 수 있 는 지 생각해 야 한다.사고 과정 1: private 접근 권한 으로 정 의 된 작업 은 본 류 에 만 접근 할 수 있 고 외부 에 서 는 호출 할 수 없습니다. 현재 구조 방법 이 사유 화 된 이상 이런 구조 방법 은 본 류 에 만 호출 될 수 있 습 니 다. 즉, 본 류 에서 만 이러한 사례 화 된 이미지 가 생 길 수 있 습 니 다.
    // An highlighted block
    package chapter5;
    class Singleton{
         
    	Singleton instance = new Singleton();
        private Singleton(){
         
           }
        public void print(){
         
            System.out.println("Hello");
        }
    }
    

    사고 과정 2: 한 클래스 의 일반 속성 에 대해 기본 적 인 상황 에서 본 클래스 에 실례 화 대상 이 존재 한 후에 야 호출 할 수 있 습 니 다. 그러나 이 프로그램 은 Singleton 클래스 의 외부 에서 실례 화 대상 을 만 들 수 없 기 때문에 Singleton 클래스 의 instance 속성 이 Singleton 클래스 의 실례 화 대상 이 없 을 때 호출 할 수 있 는 방법 을 생각해 야 합 니 다.그래서 static 로 완성 할 수 있 을 거 라 고 생각 했 어 요.
    // An highlighted block
    package chapter5;
    class Singleton{
         
        static Singleton instance = new Singleton();
        private Singleton(){
         
    
        }
        public void print(){
         
            System.out.println("Hello");
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Singleton singleton = null;
            singleton = Singleton.instance;			             
            singleton.print();
        }
    }
      :Hello
    

    사고 과정 3: 먼저 이전의 학습 에 따라 클래스 의 모든 속성 을 봉인 한 다음 에 getter, setter 를 통 해 방문 하여 얻 을 수 있 습 니 다. 다만 getter 방법 도 static 형 으로 정의 합 니 다.
    // An highlighted block
    package chapter5;
    class Singleton{
         
        static Singleton instance = new Singleton();
        private Singleton(){
         
    
        }
        public void print(){
         
            System.out.println("Hello");
        }
        public static Singleton getInstance(){
         
        	return instance;
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Singleton singleton = null;
            singleton = Singleton.getInstance();			             
            singleton.print();
        }
    }
    

    클래스 에서 정 의 된 작업 을 호출 하려 면 실례 화 된 대상 이 필요 합 니 다. 이 때 클래스 내부 에서 static 방식 으로 공공 대상 을 정의 하고 매번 static 방법 을 통 해 유일한 대상 으로 돌아 갈 수 있 습 니 다. 그러면 외부 에서 몇 번 호출 되 든 최종 클래스 는 유일한 대상 만 생 길 수 있 습 니 다.이런 디자인 은 하나의 디자인 모델 에 속한다.
    하지만 지금 은 다음 코드 도 사용 할 수 있다 는 작은 문제 가 있다.
    // An highlighted block
    class Singleton{
         
        private static Singleton instance = new Singleton();
        private Singleton(){
         
    
        }
        public void print(){
         
            System.out.println("Hello");
        }
        public static Singleton getInstance(){
         
            instance = new Singleton();			//       
            return instance;
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Singleton singleton = null;
            singleton = Singleton.getInstance();
            singleton.print();
        }
    }
    

    그래서 final 키 워드 를 추가 해 볼 수 있 습 니 다.
    // An highlighted block
    class Singleton{
         
        private final static Singleton instance = new Singleton();   //        
        private Singleton(){
         
    
        }
        public void print(){
         
            System.out.println("Hello");
        }
        public static Singleton getInstance(){
         
            return instance;
        }
    }
      :Hello
    

    다 중 설계 모드
    여러 가지 디자인 모델 은 사실 유한 한 정의 여러 대상 이다.단일 디자인 이 든 여러 가지 디자인 이 든 핵심 이 흔 들 리 지 않 는 것 이 바로 구조 방법의 사유 화 이다.
    // An highlighted block
    class Sex{
         
        private String title;
        private static final Sex MALE = new Sex(" ");
        private static final Sex FEMALE = new Sex(" ");
        private Sex(String title){
         
            this.title = title;
        }
        @Override
        public String toString(){
         
            return this.title;
        }
        
        public static Sex getInstance(int ch){
         
            switch (ch){
         
                case 1:
                    return MALE;
                case 2:
                    return FEMALE;
                default:
                    return null;
            }
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Sex sex = null;
            sex = Sex.getInstance(2);
            System.out.println(sex);
        }
    }

    JDK 1.7 이전에 switch 는 int 나 char 를 이용 하여 만 판단 할 수 있 었 는데, 단순히 숫자 나 문자 의 의미 가 명확 하지 않 을 경우 String 의 지원 을 추 가 했 기 때 문 입 니 다.
    // An highlighted block
    class Sex{
         
        private String title;
        private static final Sex MALE = new Sex(" ");
        private static final Sex FEMALE = new Sex(" ");
        private Sex(String title){
         
            this.title = title;
        }
        @Override
        public String toString(){
         
            return this.title;
        }
        
        public static Sex getInstance(String ch){
         
            switch (ch){
         
                case "man":
                    return MALE;
                case "woman":
                    return FEMALE;
                default:
                    return null;
            }
        }
    }
    public class Test {
         
        public static void main(String[] args) {
         
            Sex sex = null;
            sex = Sex.getInstance("man");
            System.out.println(sex);
        }
    }

    좋은 웹페이지 즐겨찾기