최근 퇴근하면서 Think in Java를 봤는데 처음 다시 읽었을 때와 느낌이 많이 달랐어요
다음으로 Java에서 객체와 참조의 관계에 대해 이야기해보겠습니다. 내부 클래스의 개념.
1. Java의 모든 것은 객체입니다.
Java의 객체를 제어하는 것은 무엇입니까? 대답은 C나 C++의 포인터와 같은 참조입니다.
참조가 있는 경우 지금 개체와 연결해야 합니다. 그렇지 않으면 참조가 상상한 대로 제어할 수 없게 됩니다. 예를 들어 문자열 참조를 생성하는 경우:
String s ;
은 이때 어떤 객체와도 연관되어 있지 않습니다. String의 일부 메소드를 호출하는 등의 작업을 수행하면 분명히 문제가 발생합니다(일부 기본 유형을 제외하면 초기 유형이 할당되기 때문입니다). 값을 정의할 때), 돈은 사용할 때 객체와 연결되어야 합니다:
String s = new String();
또는
String s = “my name is ajun”;
처럼 이것.
2. 객체와 연결하는 방법
Java에서 객체는 일반적으로 다음과 같이 참조와 연결하기 위해 new를 통해 생성됩니다.
String s = new String("my name is ajun")
객체는 참조 s와 연관되어 동시에 초기화되며, 동시에 자체 객체 유형을 생성할 수도 있습니다.
3. 저장 위치
(1) 스택: 일반적으로 스택 포인터를 상하로 이동하여 메모리를 할당하고 해제합니다.
기본형 변수는 적은 양의 메모리를 차지하기 때문에 new로 생성하기에 적합하지 않습니다.
(2) 힙: Java 객체를 저장하는 데 사용됩니다. 프로그램이 new를 실행할 때 힙은 이 객체에 공간을 할당합니다. 힙에 의한 메모리 할당 및 해제는 저장 및 해제보다 비용이 더 많이 듭니다. 즉, 기본형 변수는 가장 많이 사용되기 때문에 스택에 저장해야 하고, 메모리를 더 많이 소모하면 성능을 짐작할 수 있다.
4. 내부 클래스
(1) 내부 클래스에 대한 기본 지식:
일반적으로 자바 클래스 내부에 정의된 클래스는 내부 클래스가 된다.
내부 클래스는 메소드 본문 외부에 정의된 클래스, 클래스로 나눌 수 있다. 메소드 내부 정의, 정적 내부 클래스(메소드 외부에서만 정의 가능), 익명 내부 클래스
설명:
메소드 외부에서 정의된 클래스:
클래스의 멤버 변수(정적, 비정적) Access가 될 수 있습니다. 클래스의 멤버 변수가 올바르게 참조될 수 있도록 하려면 내부 클래스의 객체가 인스턴스화되기 전에 먼저 외부 클래스의 객체가 인스턴스화되어야 합니다.
액세스 권한은 무엇이든 될 수 있습니다. 클래스의 멤버 변수로 간주할 수 있으므로 이해하기가 훨씬 쉽습니다.
메서드 본문에 정의된 클래스;
클래스의 멤버 변수(정적 및 비정적)에 액세스할 수 있으므로 클래스의 멤버 변수를 올바르게 참조할 수 있습니다. 외부 클래스를 먼저 인스턴스화해야 합니다. 내부 클래스를 인스턴스화하는
개체는 액세스 권한을 가질 수 없습니다. 메서드의 로컬 변수로 취급하면 됩니다.
정적 내부 클래스:
클래스의 정적 멤버 변수에만 접근 가능
접근 권한 모두
익명 내부 클래스:
클래스의 멤버 변수(정적, 비정적)에 접근 가능 , 클래스의 멤버 변수를 올바르게 참조하려면 내부 클래스의 객체를 인스턴스화하기 전에 먼저 외부 클래스의 객체를 인스턴스화해야 합니다.
액세스 권한은
(2), 내부 클래스의 역할
내부 클래스는 클래스를 매우 잘 숨길 수 있습니다. 일반적으로 클래스에는 개인 보호 기본 접근 권한이 허용되지 않습니다.
내부 클래스는 다중 상속을 구현할 수 있으며, 이는 Java가 다중 상속을 가질 수 없다는 사실을 보완합니다.
(3), 예
package com.ajun.test.innerclass.example; /** * 水果内容 * @author Administrator * */ public interface Contents { String value(); } package com.ajun.test.innerclass.example; /** * 水果目的地 * @author Administrator * */ public interface Destination { //目的地 String readLabel(); } package com.ajun.test.innerclass.example; public class Goods { private String des="is ruit!!"; //方法外部 private class Content implements Contents{ private String name = "apple "+des; @Override public String value() { return name; } } //方法外部 private class GDestination implements Destination{ private String label ; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } //匿名内部类 public Destination getdestination(final String label){ return new Destination(){ @Override public String readLabel() { return label; } }; } public Destination dest(String s){ return new GDestination(s); } public Contents content(){ return new Content(); } public Destination dest2(String s){ class GDestination implements Destination{ private String label; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } return new GDestination(s); } } package com.ajun.test.innerclass.example; public class Test { public static void main(String [] a){ Goods gs = new Goods(); Contents c = gs.content(); Destination d = gs.dest("Beijing"); System.out.println(c.value()); System.out.println(d.readLabel()); Destination d1 = gs.getdestination("Shanghai"); System.out.println(d1.readLabel()); System.out.println(gs.dest2("Tianjin").readLabel()); } }
그 중 Content 와 Gdestination 은 잘 숨겨져 있어 외부에서 호출할 때 어떤 특정 클래스가 호출되는지 전혀 알 수 없기 때문에 이 클래스는 다중 상속의 특징을 가지고 있습니다.
apple is ruit!! Beijing Shanghai Tianjin
Java 객체지향 프로그래밍의 객체, 참조 및 내부 클래스에 대한 이해와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

Java는 플랫폼 별 문제를 어떻게 완화합니까? Java는 JVM 및 표준 라이브러리를 통해 플랫폼 독립성을 구현합니다. 1) Bytecode 및 JVM을 사용하여 운영 체제 차이를 추상화합니다. 2) 표준 라이브러리는 Paths 클래스 처리 파일 경로 및 Charset 클래스 처리 문자 인코딩과 같은 크로스 플랫폼 API를 제공합니다. 3) 최적화 및 디버깅을 위해 실제 프로젝트에서 구성 파일 및 다중 플랫폼 테스트를 사용하십시오.

java'splatformincendenceenhancesmicroservicesarchitectureDeploymentFlexibility, 일관성, 확장 성 및 포트 가능성

Graalvm은 Java의 플랫폼 독립성을 세 가지 방식으로 향상시킵니다. 1. 교차 언어 상호 운용성, Java는 다른 언어와 원활하게 상호 작용할 수 있습니다. 2. 독립적 인 런타임 환경, Java 프로그램을 GraalvMnativeImage를 통해 로컬 실행 파일로 컴파일합니다. 3. 성능 최적화, Graal Compiler는 Java 프로그램의 성능과 일관성을 향상시키기 위해 효율적인 기계 코드를 생성합니다.

ToEffectIallyTestJavaApplicationSforplatformcompatibility, followthesesteps : 1) setupAutomatedTestingAcrossMultiplePlatflatformsUsingCitools likeJenkinsorgitHubactions.2) 행동 관리자는 realHardwaretoCathissesnotfoundInvironmentments.3) Checkcross-Pla

Java Compiler는 소스 코드를 플랫폼 독립적 인 바이트 코드로 변환하여 Java의 플랫폼 독립성을 실현하여 JVM이 설치된 JVM 프로그램에서 모든 운영 체제에서 실행할 수 있습니다.

Bytecodeachievesplatformincendence는 executedbirtualmachine (vm)을 beenecutedbyavirtmachine (vm)을 허용합니다

Java는 100% 플랫폼 독립성을 달성 할 수 없지만 플랫폼 독립성은 JVM 및 바이트 코드를 통해 구현되어 코드가 다른 플랫폼에서 실행되도록합니다. 특정 구현에는 다음이 포함됩니다. 1. 바이트 코드로의 컴파일; 2. JVM의 해석 및 실행; 3. 표준 라이브러리의 일관성. 그러나 JVM 구현 차이, 운영 체제 및 하드웨어 차이, 타사 라이브러리의 호환성은 플랫폼 독립성에 영향을 줄 수 있습니다.

Java는 "Writ 2. 유지 보수 비용이 낮 으면 하나의 수정 만 필요합니다. 3. 높은 팀 협업 효율성은 높고 지식 공유에 편리합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
