>  기사  >  Java  >  Java 중첩 클래스 Android 개발에서 알아야 할 사항

Java 중첩 클래스 Android 개발에서 알아야 할 사항

怪我咯
怪我咯원래의
2017-04-05 16:17:131844검색

중첩 클래스는 다른 클래스 내에 정의된 클래스를 의미합니다. 중첩 클래스는 주변 클래스에만 존재합니다. 중첩 클래스에는 정적 멤버 클래스, 비정적 멤버 클래스, 익명 클래스, 부분 클래스의 네 가지 유형이 있습니다.

  • 정적 멤버 클래스는 가장 간단한 종류의 중첩 클래스입니다. 다른 클래스 내부에 우연히 정의된 일반 클래스로 생각하는 것이 더 좋습니다. 정적 멤버 클래스는 비공개 변수 를 포함하여 바깥쪽 클래스의 모든 멤버에 액세스할 수 있습니다. 정적 멤버 클래스도 접근성 규칙을 준수합니다. 비공개로 배치되면 바깥쪽 클래스 내에서만 액세스할 수 있습니다.

    public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {
    static class ImageVH extends RecyclerView.ViewHolder {
           //代码省略
        }
    }
  1. Android에서 가장 친숙한 listview의 ViewHolder는 우리가 일반적으로 공개 보조 클래스로 사용하는 정적 멤버 클래스입니다. Listview의 캐시 변수로 뷰의 레이아웃을 캐시합니다.

  2. 주변 클래스가 나타내는 객체 의 구성 요소를 나타내는 데 사용되는 전용 정적 멤버 클래스입니다.

    코드는 다음과 같습니다

  • 비정적 멤버 클래스와 정적 멤버 클래스의 구문적 차이는 static 수식어가 있는지 여부입니다. 구문은 비슷하지만 둘은 매우 다릅니다. 비정적 멤버 클래스의 각 인스턴스는 바깥쪽 클래스의 바깥쪽 인스턴스와 암시적으로 연결됩니다. 비정적 멤버 클래스의 인스턴스 메서드 내에서는 바깥쪽 인스턴스의 메서드를 호출할 수 있습니다. 바깥쪽 클래스에서 독립적으로 비정적 멤버 클래스의 인스턴스는 주변 인스턴스 없이 생성될 수 없습니다.

    비정적 멤버 클래스의 인스턴스가 생성되면 해당 클래스와 주변 인스턴스 간의 연결도 설정되며 이 연결은 나중에 수정할 수 없습니다. 이 연관은 일반적으로 바깥쪽 클래스의 인스턴스 메서드가 비정적 멤버 클래스의 생성자를 호출할 때 발생합니다. 이 연관은 비정적 멤버 클래스 인스턴스의 공간을 소비하고 생성 시간 오버헤드를 증가시킵니다. 멤버 클래스가 주변 클래스 인스턴스에 액세스할 필요가 없다면 static 수식어를 추가하세요.

    public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {
     class ImageVH extends RecyclerView.ViewHolder {
               // 真是对外部类的实例持有,在Android开发中很大部分activity中的context的内存泄露因为这个原因。
        }
    }
  • 익명 클래스는 JAVA의 다른 구문 단위와 다릅니다. 익명 클래스에는 이름이 없습니다. 다른 멤버와 함께 선언되지는 않습니다. 선언과 인스턴스화가 동시에 사용됩니다. 익명 클래스는 표현식 이 존재하는 코드의 어느 곳에나 나타날 수 있습니다. 익명 클래스가 비정적 환경에 나타나는 경우에만 주변 인스턴스를 갖게 됩니다. 정적 환경에서 선언되더라도 정적 멤버를 가질 수 없습니다.

    imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       // 代码省略
                    }
                });
  • 로컬 클래스는 "로컬 변수를 선언할 수 있는" 모든 곳에서 선언됩니다. 또한 범위 규칙을 준수하십시오. 1. 로컬 클래스에는 재사용할 수 있는 이름이 있습니다. 2. 익명 클래스와 달리 로컬 클래스가 비정적 환경에서 정의된 경우에만 주변 인스턴스를 가질 수 있고 정적 멤버를 포함할 수 없습니다.

    아아아아
  • 위 내용은 Java 중첩 클래스 Android 개발에서 알아야 할 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.