자바 의 Object 는 무엇 입 니까?Object 에 대한 이해 와 응용

3775 단어 Java
1.Object 대상 소개 자바 는 대상 을 향 한 언어 입 니 다.자바 에 무엇이 나타 나 든 대상(8 대 기본 데이터 형식 제외)이 라 고 볼 수 있 습 니 다.Object 는 이러한 대상 의 최고 등급 입 니 다.자바 대상 이 든 사용자 정의 대상 이 든 모두 암시 적 이거 나 명시 적 으로 Object 대상 을 계승 하 였 습 니 다.물론 Object 기본 적 인 방법 이 있 습 니 다.2.Object 방법 clone()finalize()equals(Object obj)hashcode()registerNatives()toString()notify()notifyAll()wait()wait(long timeout)wait(long timeout,int nanos)//밀리초 단위 1.1equals 와 hashCode 방법 hashCode:
public native int hashCode();

equals:
  public boolean equals(Object obj) {
        return (this == obj);
    }


hashCode 는 native 방법의 밑바닥 에서 실현 되 었 다
  • equals 는 바로==동일 여 부 를 판단 한다
  • 
     1.   equals()  ,     hashCode()   
     2. equals()            ,    ==     
     3. hashCode()                    ,  HashMap
     4.      (          ):      hashCode()     int    !
     5. hashCode()                 equals()    5      :
          --->  equals()    true,          equals()  ,     true   
          --->         ,               !   
          --->x.equals(y) y.equals(z)   true,      :x.equals(z)  true   
          --->x.equals(y) y.equals(x)        。       null,    false
    
    

    1.equals 와 hashCode 방법 으로 equals()방법 을 다시 쓰 는 것 은 기본적으로 비교 대상 의 주소 이 고==등가 연산 자 를 사용 합 니 다.그러나 우리 의 정상 적 인 개발 로 볼 때 대상 주 소 를 비교 하 는 것 은 무의미 하 다.
    	@Override
        public boolean equals(Object obj)
        {
           if(obj == null) {
               return false;
    
           }
    
             //          true,    false
           if(this == obj){
               return true;
           }
    
             //        
           if(this.getClass() != obj.getClass()){
               return false;
           }
    
             Student student = (Student)obj;
             return id==student.id;
         }
    
    	@Override
        public int hashCode() {
            return this.getId();
        }
    

    2.toString 방법 은 대상 의 hashCode 값()을 되 돌려 주 고 대상 을 표시 합 니 다.
    public String toString() {//          +“@”+           
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    

    3.1clone 방법 은 다음 과 같은 요점 이 있다.
  • clone 방법 은 대상 의 복제 에 사용 되 며,일반적으로 복제 하고 자 하 는 대상 은 독립 적(기 존의 대상 과 분 리 된 것)이다
  • 4.567917.깊이 복사 란 이 대상 의 구성원 변수(가 변 참조 라면)를 모두 복제 해 야 한 다 는 것 을 말한다.얕 은 복사 란 구성원 변수 가 복제 되 지 않 았 다 는 것 을 말한다3.2clone 용법 a.Cloneable 인터페이스 b.복제 방법 재 작성
     @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    

    4.wait 와 notify 방법-wait,notify 든 notify All()이 든 모두 모니터 대상(잠 금 대상)이 호출 해 야 합 니 다.쉽게 말 하면 그들 은 모두 동기 코드 블록 에서 호출 되 었 습 니 다.그렇지 않 으 면 이상 을 던 질 것 입 니 다!-notify()가 깨 우 는 것 은 대기 열의 한 스 레 드(어느 스 레 드 를 깨 울 지 확실 하지 않 음)입 니 다.notify All()이 깨 우 는 것 은 대기 열의 모든 스 레 드-wait()의 스 레 드 가 깨 어 나 면 4 가지 상황 에서 이 스 레 드 가 중단 될 수 있 습 니 다.
     		 a.wait()    
    		 b. notify()  
    		 c. notifyAll()  
     		 d.  wait()        
    

    5.finalize 방법 finalize()방법 은 쓰레기 수 거 기 를 제거 하기 전에 호출 됩 니 다.그러나 이 방법 은 언제 호출 될 지 모 르 고 불확실 성 이 있 기 때문에 다시 쓰 는 것 을 권장 하지 않 습 니 다.이 방법 은 gc 가 시작 되 고 대상 이 회수 되 었 을 때 호출 됩 니 다.gc 는 대부분의 대상 을 회수 할 수 있 습 니 다(new 에서 나 온 대상,gc 는 모두 해결 할 수 있 습 니 다.일반적인 상황 에서 우 리 는 new 이외 의 방식 으로 대상 을 만 들 지 않 습 니 다).그래서 일반적으로 프로그래머 가 finalize 를 실현 할 필요 가 없습니다.특수 한 상황 에서 프로그래머 가 finalize 를 실현 해 야 합 니 다.대상 이 회수 되 었 을 때 일부 자원 을 방출 해 야 합 니 다.예 를 들 어 socket 링크 는 대상 이 초기 화 될 때 만 들 고 전체 수명 주기 에 유효 하 다 면 finalize 를 실현 하고 이 링크 를 닫 아야 합 니 다.
    finalize 를 사용 하려 면 슈퍼.finalize()를 호출 하 는 것 에 주의해 야 합 니 다.한 대상 의 finalize()방법 은 한 번 만 호출 될 수 있 으 며,finalize()가 호출 되 는 것 은 gc 가 이 대상 을 즉시 회수 하 는 것 을 의미 하지 않 기 때문에 finalize()를 호출 한 후에 이 대상 은 회수 되 지 않 아 도 되 고,진정 으로 회수 되 어야 할 때 가 되 었 습 니 다.앞에서 한 번 호출 되 었 기 때문에 finalize()를 호출 하지 않 아 문제 가 발생 하지 않 습 니 다.따라서 finalize()방법 을 사용 하지 않 는 것 을 추천 합 니 다.석조 함수 와 다 릅 니 다.

    좋은 웹페이지 즐겨찾기