객체 지향 프로그램은 객체로 구성되며, 각 객체에는 사용자에게 노출되는 특정 기능 부분과 숨겨진 구현 부분이 포함되어 있습니다. 객체 지향 프로그래밍(OOP)에서는 객체의 특정 구현에 대해 걱정할 필요가 없습니다. 전통적인 구조적 프로그래밍에서는 알고리즘이 먼저이고 데이터 구조가 그 다음입니다. 즉, 먼저 숫자를 연산하는 방법을 결정한 다음 연산을 용이하게 하기 위해 데이터를 구성하는 방법을 고려합니다. OOP는 이 순서를 뒤집어 데이터를 먼저 넣은 다음 데이터를 연산하기 위한 알고리즘을 고려합니다.
1. 클래스
클래스는 객체를 구성하기 위한 템플릿이자 청사진입니다. 일반인의 관점에서 클래스는 건축 도면과 동일하고 객체는 건물과 동일합니다. 클래스에서 객체를 생성하는 과정을 객체의 인스턴스 생성이라고 합니다.
Java에서 "클래스"는 클래스 키워드와 클래스 이름을 통해 정의됩니다. 예를 들어
class Person{ // 类的主体内容 }
는 Person 클래스를 정의합니다.
1. 필드 및 메소드
클래스를 정의할 때 클래스에 데이터 멤버와 멤버 함수라는 두 가지 유형의 요소를 설정할 수 있습니다. 데이터 멤버는 개체이며 모든 유형이 될 수 있습니다. 객체를 가리키는 핸들인 경우 핸들을 초기화하고 생성자를 통해 실제 객체에 연결해야 합니다. 기본 데이터 유형인 경우 클래스가 정의된 곳에서 직접 초기화할 수 있습니다.
각 개체는 자체 데이터 멤버를 위한 저장 공간을 유지합니다. 데이터 멤버는 개체 간에 공유되지 않습니다.
class Person{ String name; double salary; }
new 키워드를 통해 객체를 생성합니다. 예:
Person p = new Person();
(1) 메인 멤버의 기본값
특정 메인 데이터 유형은 클래스 멤버에 속하므로 그렇지 않습니다. 명시적으로 초기화됩니다. 또한 기본값을 얻는 것도 보장됩니다.
클래스의 멤버 변수로 변수를 사용하면 반드시 초기화된 값에 주의하세요. 지역 변수의 경우 다음과 같은 일부 임의의 값이 얻어집니다. int x는 자동으로 0으로 초기화되지 않습니다.
(2) 메소드
메소드의 기본 구성 요소에는 이름, 인수, 반환 유형 및 본문이 포함됩니다. 메소드의 기본 형식은 다음과 같습니다.
반환 유형 메소드 이름(/*인수 목록*/) {/*메서드 본문*/}
반환 유형은 반환을 나타냅니다. 메소드 숫자 유형을 호출한 후. 메소드 이름은 특정 메소드에 대한 식별 및 참조입니다. 인수 목록에는 메서드에 전달하려는 정보의 유형과 이름이 나열됩니다.
String s;여기에서는 핸들만 생성되고 객체는 생성되지 않습니다. s에는 연결된 개체가 없으므로 s가 호출되면 예외가 발생합니다. 따라서 생성시 초기화가 필요합니다.
String s = "hello";
String s = new String("hello");
1. 가장 빠른 저장 영역은 프로세서 내부에 있습니다. 레지스터는 크기가 제한되어 있으며 컴파일러에 의해 할당됩니다.
2.스택. 일반 RAM(Random Access Memory) 영역에 위치하며 "스택 포인터"를 통해 크기를 변경할 수 있습니다. 스택 포인터를 아래로 이동하면 새로운 메모리 공간이 생성되고 위로 이동하면 메모리 공간이 해제됩니다. 프로그램을 생성할 때 Java 컴파일러는 스택에 있는 모든 데이터의 "길이"와 "연한"을 정확히 알아야 하며, 이 데이터에서 컴파일러는 포인터를 이동하기 위한 적절한 코드를 생성합니다. Java 객체의 핸들은 여기에 저장되지만 Java 객체는 스택에 저장되지 않습니다.
3.힙. Java 객체를 보유하는 범용 메모리 풀입니다. 컴파일러는 "메모리 힙" 또는 "힙"에서 할당된 저장 공간의 양과 데이터가 보존되는 기간을 알거나 알 필요가 없습니다.
4. 정적 저장. 정적이란 고정된 위치(RAM)에 위치함을 의미합니다. 프로그램이 실행되는 동안 정적으로 저장된 데이터는 언제든지 불러올 수 있습니다. static 키워드는 객체의 특정 요소가 정적임을 나타냅니다. Java 자체는 정적 저장 공간에 배치할 수 없습니다.
5. 지속적인 보관. 상수 값은 일반적으로 프로그램 코드 내부에 배치되며 절대 변경되지 않습니다.
6. RAM이 아닌 스토리지. 데이터가 프로그램과 완전히 독립적인 경우 프로그램이 실행되지 않고 프로그램의 제어 내에 있을 때에도 존재할 수 있습니다. 예를 들어 스트리밍 개체와 고정 개체가 있습니다.
2. 객체
객체의 세 가지 주요 특징:
• 객체의 동작 - 객체에 적용할 수 있는 작업 또는 객체에 적용할 수 있는 메서드 ?
• 객체의 상태 - 해당 메소드가 추가되면 객체는 어떻게 반응합니까?
•객체 식별 - 동일한 동작과 상태를 가진 다양한 객체를 어떻게 식별합니까?
객체의 동작은 호출 가능한 메서드에 의해 정의됩니다. 각 객체는 현재 특성을 설명하는 정보를 저장합니다. 이것이 객체의 상태입니다. 객체의 상태는 자발적으로 변경되지 않습니다. 잘 설계된 클래스의 경우 메소드를 호출해야만 객체를 구현할 수 있습니다. 메소드를 호출하지 않고도 객체의 상태를 변경할 수 있다면 캡슐화가 손상되었음을 의미합니다.
캡슐화: 데이터와 동작을 패키지로 결합하고 객체 사용자에게 데이터 구현 방법을 숨깁니다. 캡슐화의 핵심은 클래스의 메서드가 다른 클래스의 인스턴스 필드에 직접 액세스해서는 안 된다는 것입니다. 프로그램은 객체의 메소드 필드를 통해서만 객체 데이터와 상호 작용합니다.
객체의 데이터를 인스턴스 필드 또는 속성이라고 합니다. 데이터를 조작하는 과정을 메소드(Method)라고 합니다. 각 특정 개체에는 특정 인스턴스 필드 값 집합(속성 값)이 있으며 이러한 값 집합이 개체의 현재 상태입니다.
클래스 간 관계
클래스 간 일반적인 관계:
• 종속성(“use-a”): 한 클래스의 메서드가 다른 클래스의 개체를 조작합니다.
•집계(“has-a”): 한 클래스의 객체는 다른 클래스의 객체를 포함합니다.
•상속(“is-a”): 특별한 것과 일반적인 것의 관계를 표현하는데 사용됩니다. 클래스 A가 클래스 B를 확장하는 경우(A가 B를 상속함) 클래스 A는 클래스 B의 메서드를 포함할 뿐만 아니라 메서드도 확장합니다.
객체는 실제로 객체를 포함하지 않고 객체만을 지칭합니다.
Java에서 객체 변수의 값은 다른 위치에 저장된 객체에 대한 참조입니다. new 연산자의 반환 값도 참조입니다.
위의 Java 클래스 및 객체에 대한 포괄적인 이해는 모두 편집자가 공유한 내용이므로 참고가 되기를 바라며 PHP 중국어 웹사이트를 지원해 주시길 바랍니다.
Java 클래스와 객체에 대한 포괄적인 이해와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!