2.자바 프로 그래 밍 사상 5~7 장 읽 기

1.제5 장 은 쓰레기 회수 체제 에 관 한 대량의 물건 이 있 는데 비교적 많 으 므 로 한 편의 글 을 참고 한다.
https://basebase.github.io/2016/08/27/java-finalize%E6%96%B9%E6%B3%95/
이 글 은 대상 폐기 과정 에서 의 몇 가지 상태,GC 가 이러한 상 태 를 어떻게 추적 하 는 지 에 대해 설명 한다.
2.구조 기 를 사용 하여 대상 을 초기 화 합 니 다.자바 에서'생 성'과'초기 화'를 함께 묶 으 면 분리 할 수 없습니다.
3.구조 기 는 과부하 방식 으로 이 루어 집 니 다.과부하 의 차 이 는 매개 변수의 개수,매개 변수의 유형(서로 다른 유형의 매개 변수의 순서,심지어 구분 하 는 표지 로 도 할 수 있 지만 이렇게 하지 마 십시오)입 니 다.
다시 불 러 올 때 유형의 전환 이 발생 합 니 다.기본 데이터 형식 에 있어 서 는 자신 과 일치 하 는 것 이 좋 습 니 다.없 으 면 순서대로 위로 일치 하 는 것 이 좋 습 니 다.byte==>short==>int==>log==>float==>double,그 중에서 char 는 비교적 특수 하 며,char 가 일치 하지 않 는 상황 에서 int 를 우선 매 칭 하고 아래 의 순 서 는 일치 합 니 다.
들 어 오 는 인자 가 크다 면?형식 변환 을 통 해 협소 화 전환 을 실행 해 야 합 니 다.그렇지 않 으 면 컴 파일 러 가 잘못 되 었 습 니 다.
4.구조 기:
만약 당신 이 쓴 클래스 에 구조 기 가 없다 면,컴 파일 러 는 자동 으로 기본 구조 기 를 만들어 줍 니 다.
구조 기 를 정의 하면 인자 가 있 든 없 든 컴 파일 러 는 기본 구조 기 를 자동 으로 만 드 는 데 도움 을 주지 않 습 니 다.
5.청소:
4.567917.대상 이'특수'메모리 영역 을 얻 었 다 고 가정 합 니 다.쓰레기 수 거 기 는 new 에서 분 배 된 메모리 만 방출 할 줄 알 기 때문에 그 대상 의 이 메모 리 를 어떻게 방출 해 야 할 지 모 릅 니 다
자바 는 이러한 상황 에 대응 하기 위해 클래스 에서 finalize()방법 을 정의 할 수 있 습 니 다
4.567917.작업 원리:쓰레기 회수 기 가 방출 대상 이 차지 하 는 저장 공간 을 준비 하면 먼저 finalize()방법 을 호출 하고 다음 쓰레기 회수 동작 이 발생 할 때 만 진정 으로 회수 대상 이 차지 하 는 메모리
주의 1:대상 이 쓰레기 에 회수 되 지 않 을 수 있 습 니 다.즉,쓰레기 회수 라 는 일이 반드시 발생 하 는 것 은 아 닙 니 다주의 2:쓰레기 수 거 는'구조 분석'과 같 지 않 습 니 다4.567917.쓰레기 회수 라 는 일이 계속 발생 하지 않 으 면 저장 공간 이 다 쓴 순간 에 만 풀 려 날 수 있다
4.567917.주의 3:쓰레기 수 거 는 메모리 와 관련 이 있 습 니 다.쓰레기 수 거 의 유일한 목적 은 프로그램 이 더 이상 사용 하지 않 는 메모 리 를 회수 하 는 것 입 니 다
4.567917.자바 가상 컴퓨터 가 메모리 소모 상황 에 직면 하지 않 는 다 면 그 는 쓰레기 수 거 를 통 해 메모 리 를 복구 하 는 데 시간 을 낭비 하지 않 을 것 이다
6.구조 기 초기 화
static-일반 멤버 초기 화-마지막 으로 구조 기
4.567917.static 키 워드 를 명시 적 으로 사용 하지 않 아 도 구조 기 는 실제 적 으로 정적 인 방법 이다
  • 정적 초기 화 는 Class 대상 이 처음 불 러 올 때 만 실 행 됩 니 다
  • 매 거
    예 를 들 면:
    public enum  ColorLight {
        RED(1,"  "),GREEN(2,"  "),YELLOW(3,"  ");
    
        private int num;
        private String color;
    
        ColorLight(int num,String color){
            this.num = num;
            this.color = color;
        }
    
        public int getNum() {
            return num;
        }
    
        public void setNum(int num) {
            this.num = num;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }

    8.제6 장 은 접근 권한 에 관 한 것 으로 private proctected 기본 Public 네 가지 로 기본 적 인 것 입 니 다.
    9.제7 장 은 재 활용 류 입 니 다.조합 과 계승 에 관 한 주요 중점 은 어떻게 쓰 는 것 이 아니 라 어떻게 쓰 는 지 간단 합 니 다.중심 은 final 키워드 의 수식 변수,방법,유형의 역할 에 있 습 니 다.final 은 운영 할 때 초기 화 되 고 바 꿀 수 없 으 며 컴 파일 시기 가 아 닌 것 을 주의 하 는 것 입 니 다.이것 이 바로 final 이 정적 으로 정의 하 는 것 입 니까?아니면 비 정적 으로 정의 하 는 가장 큰 차이 입 니까?계승 및 초기 화 순서:
    우선 부모 클래스 의 정적 코드 블록 입 니 다.
    그리고 하위 클래스 의 정적 코드 블록 입 니 다.
    main 실행 시작:
    부류 의 일반적인 방법 과 구조 기
    하위 클래스 의 일반적인 방법
    서브 클래스 의 구조 기
    다음은 프로그램 으로 보 여 드 리 겠 습 니 다.
    부모 클래스:
    public class Insect {
        private int i = 9;
        protected int j;
        Insect(){
            System.out.println("i="+i+",j="+j);
            j  =39;
        }
        private static int x1 = printInit("static x1");
    
        static int printInit(String s) {
            System.out.println(s);
            return 47;
        }
    }

    하위 클래스:
    public class Beetle extends Insect{
        private int k = printInit("beetle init");
    
        public Beetle(){
            System.out.println("k="+k);
            System.out.println("j="+j);
        }
    
        private static int x2 = printInit("static x2");
    
        public static void main(String[] args) {
            System.out.println("main");
            Beetle b = new Beetle();
        }
    }

    운행 결 과 는 내 가 위 에서 말 한 순 서 를 참조 하면 한눈 에 알 수 있다.
    static x1
    static x2
    main
    i=9,j=0
    beetle init
    k=47
    j=39

    증명 하기 위해:
    첫 번 째 원칙:선친 류,후 하위 류 두 번 째 원칙:정적 코드 블록(순서대로 실행)을 먼저 실행 하고 일반 변수 정 의 를 집행 하 며 마지막 으로 구조 기 입 니 다.저 는 이 를 개조 하 겠 습 니 다.
    public class Insect {
        private int i = 9;
        protected int j;
    
        private int hhh = printInit("hhh");
    
        static {
            System.out.println("             ");
        }
    
        Insect(){
            System.out.println("i="+i+",j="+j);
            j  =39;
        }
        private static int x1 = printInit("static x1");
    
    
        static {
            System.out.println("            ");
        }
    
        static int printInit(String s) {
            System.out.println(s);
            return 47;
        }
    }
    public class Beetle extends Insect{
        private int k = printInit("beetle init");
    
    
    
        public Beetle(){
            System.out.println("k="+k);
            System.out.println("j="+j);
        }
    
        private static int x2 = printInit("static x2");
    
        public static void main(String[] args) {
            System.out.println("main");
            Beetle b = new Beetle();
        }
    }

    실행 결 과 는:
                 
    static x1
                   //         ,      
    static x2    //         
    main  //main
    hhh   //               
    i=9,j=0   //       
    beetle init  //               
    k=47   //       
    j=39

    좋은 웹페이지 즐겨찾기