최근에, 나는 Java에서 생각을 사용했을 때 퇴근했을 때 보았습니다. 나는 그것이 처음 본 것과는 매우 다르다고 느꼈다. Java의 객체와 참고 문헌의 관계와 내부 클래스의 개념에 대해 이야기 해 봅시다.
1. Java의 모든 것은 대상입니다
Java의 연산자 객체는 무엇입니까? 대답은 인용이며 C 또는 C ++의 포인터와 같습니다.
참조가있는 경우 현재 객체와 연관해야합니다. 그렇지 않으면 참조가 귀하가 생각하는대로 귀하의 통제에 남아 있지 않습니다. 예를 들어 문자열 참조를 만듭니다.
문자열 s;
현재 객체와 관련이 없습니다. 현재 문자열 메소드를 호출하는 것과 같은 일부 작업을 수행하는 경우, 일부 기본 유형을 제외하고 (일부 기본 유형을 제외하고, 초기 값에 할당되기 때문에) 사용될 때 객체와 돈을 연결해야합니다.
문자열 s = new String ();
또는
문자열 s =“내 이름은 Ajun”;
그냥 이렇게하십시오.
2. 객체와 연관시키는 방법
Java에서는 객체가 일반적으로 다음과 같은 참조와 관련시키기 위해 새로운 것을 통해 만들어집니다.
문자열 s = 새 문자열 ( "내 이름은 Ajun");
이것은 참조를 연관시키는 객체를 만들뿐만 아니라 동료들에게 초기화 할뿐만 아니라 우리 자신의 객체 유형을 만듭니다.
3. 스토리지 위치
(1) 스택 : 일반적으로 스택은 참조 및 기본 유형 변수를 저장합니다. 스택은 주로 스택 포인터를 위아래로 움직여 메모리를 할당하고 방출합니다.
기본 유형 변수는 메모리를 덜 차지하기 때문에 새로운 생성에 적합하지 않습니다.
(2) 힙 : 자바 물체를 저장하는 데 사용됩니다. 프로그램이 새로 실행되면 힙은이 객체에 공간을 할당합니다. 힙은 메모리를 저장하고 공개하기위한 스택보다 메모리를 할당하고 해제하기 위해 더 많은 시간을 사용합니다. 기본 유형 변수가 가장 자주 사용되는 메모리를 자주 저장하고 릴리스 할 때 기본 유형 변수를 스택에 저장 해야하는 이유입니다.
4. 내부 클래스
(1) 내부 범주에 대한 기본 지식 :
일반적으로 Java 클래스 내부에 정의 된 클래스는 내부 클래스가됩니다. 메소드 본문 외부에 정의 된 클래스, 메소드 내부에 정의 된 클래스 (메소드 외부에만 정의 됨), 익명 내부 클래스 설명 :
메소드 외부의 클래스를 정의하십시오.
클래스의 멤버 변수 (정적, 비 정적)에 액세스 할 수 있습니다. 클래스의 멤버 변수를 올바르게 참조 할 수 있으려면 먼저 내부 클래스의 객체 액세스 권한을 인스턴스화하기 전에 외부 클래스의 객체를 인스턴스화해야합니다. 클래스의 회원 변수로 취급 할 수 있으므로 훨씬 더 이해할 수 있습니다.
방법의 본문에 정의 된 클래스;
클래스의 멤버 변수 (정적, 비 정적)에 액세스 할 수 있습니다. 클래스의 멤버 변수를 올바르게 참조 할 수 있으려면 먼저 내부 클래스의 객체를 인스턴스화하기 전에 외부 클래스의 객체를 인스턴스화하고 액세스 권한을 가질 수 없으며 메소드의 로컬 변수로 취급해야합니다.
정적 내부 클래스 :
클래스의 정적 멤버 변수에 액세스 하여만 익명의 내부 클래스에 대한 액세스 :
클래스의 멤버 변수 (정적, 비 정적)에 액세스 할 수 있습니다. 클래스의 멤버 변수를 올바르게 참조 할 수 있도록 내부 클래스의 객체를 인스턴스화하기 전에 외부 클래스의 객체를 인스턴스화해야합니다 (2). 내면의 역할은 수업을 매우 잘 숨길 수 있습니다. 일반적으로 클래스는 개인 보호 기본 액세스를 허용하지 않습니다.
내부 클래스는 여러 상속을 구현하여 Java가 더 많은 상속을받을 수없는 특성을 보충 할 수 있습니다 (3).
패키지 com.ajun.test.innerclass.example; / ** * 과일 컨텐츠 * @Author 관리자 * */ public interface 컨텐츠 {String value (); } package com.ajun.test.innerclass.example; / ** * 과일 목적지 * @Author Administrator * */ public 인터페이스 대상 {// 대상 문자열 readLabel (); } package com.ajun.test.innerclass.example; 공공 계급 제품 {private String des = "is ruit !!"; // 메소드 외부 개인 클래스 내용은 내용을 구현합니다 {private String name = "Apple"+des; @override public String value () {return name; }} // 외부 개인 클래스 gdestination은 대상 {개인 문자열 레이블; 개인 gdestination (문자열 레이블) {this.label = label; } @override public String readLabel () {return label; }} // 익명의 내부 클래스 공개 대상 getDestination (최종 문자열 레이블) {return new Destination () {@override public String readLabel () {return label; }}; } public Destination Dest (String S) {return new Gdestination (s); } public contents content () {return new Content (); } 공개 대상 Dest2 (String S) {클래스 GDESTINATION을 구현 대상 {개인 문자열 레이블; 개인 gdestination (문자열 레이블) {this.label = label; } @override public String readLabel () {return label; }} 새로운 gdestination을 반환합니다. }} 패키지 com.ajun.test.innerclass.example; 공개 클래스 테스트 {public static void main (String [] a) {goods gs = new goods (); 목차 c = gs.content (); 목적지 d = gs.dest ( "베이징"); System.out.println (c.value ()); System.out.println (d.readlabel ()); 목적지 d1 = gs.getDestination ( "상하이"); System.out.println (d1.readlabel ()); System.out.println (gs.dest2 ( "tianjin"). readlabel ()); }}내용과 gdestination은 잘 숨겨져 있습니다. 외부를 호출 할 때 어떤 클래스가 호출되는지 알 수 없으므로이 클래스에 여러 상속 기능이 있습니다.
산출;
사과는 루트입니다 !! 베이징 상하이 티안진