중첩 클래스는 다른 클래스 내에 정의된 클래스를 의미합니다. 중첩 클래스는 주변 클래스에만 존재합니다. 중첩 클래스에는 정적 멤버 클래스, 비정적 멤버 클래스, 익명 클래스, 부분 클래스의 네 가지 유형이 있습니다.
정적 멤버 클래스는 가장 간단한 종류의 중첩 클래스입니다. 다른 클래스 내부에 우연히 정의된 일반 클래스로 생각하는 것이 더 좋습니다. 정적 멤버 클래스는 비공개 변수 를 포함하여 바깥쪽 클래스의 모든 멤버에 액세스할 수 있습니다. 정적 멤버 클래스도 접근성 규칙을 준수합니다. 비공개로 배치되면 바깥쪽 클래스 내에서만 액세스할 수 있습니다.
public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> { static class ImageVH extends RecyclerView.ViewHolder { //代码省略 } }
Android에서 가장 친숙한 listview의 ViewHolder는 우리가 일반적으로 공개 보조 클래스로 사용하는 정적 멤버 클래스입니다. Listview의 캐시 변수로 뷰의 레이아웃을 캐시합니다.
주변 클래스가 나타내는 객체 의 구성 요소를 나타내는 데 사용되는 전용 정적 멤버 클래스입니다.
코드는 다음과 같습니다
비정적 멤버 클래스와 정적 멤버 클래스의 구문적 차이는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!