private abstract array
이 튜토리얼에서는 Java의 Private 생성자, Abstract, String, Array, Interface 및 Destructor와 같은 특수 생성자에 대해 설명합니다.
Java의 생성자에 대한 지난 튜토리얼에서 Java의 생성자와 관련된 중요한 개념을 배웠습니다. 생성자를 만드는 방법과 생성자를 정의하는 규칙, 생성자 유형 등을 논의했습니다.
생성자 오버로딩과 생성자 체이닝도 배웠습니다. 이제 Java의 개인 생성자, 추상 생성자 및 문자열 및 배열 생성자와 같은 특정 특수 생성자에 대해 설명하겠습니다. 그런 다음 Java의 소멸자에 대해 논의하고 마지막으로 메서드와 생성자의 차이점을 살펴볼 것입니다.
=> 여기에서 Java Beginners Guide를 살펴보십시오.
Java의 Private Constructor부터 시작하겠습니다.
학습 내용 :
- 자바의 개인 생성자
- 자바의 추상 클래스 생성자
- 자바의 인터페이스 생성자
- 자바의 문자열 생성자
- 자바의 배열 생성자
- 자바의 소멸자
- Java의 생성자 대 메소드
- 자주 묻는 질문
- 결론
- 추천 도서
자바의 개인 생성자
이미 언급했듯이 Java 클래스의 생성자는 연관된 액세스 지정자를 가질 수 있습니다. 따라서 개인 또는 공용 생성자를 가질 수 있습니다. 이후 튜토리얼에서 액세스 지정자에 대해 더 자세히 논의하고 생성자를 다시 살펴볼 것입니다.
생성자가 private으로 선언되면 클래스 내에서만 액세스 할 수 있습니다. 다른 클래스를 통해 파생 클래스에 액세스 할 수 없습니다. 따라서이 공용 메서드가 개인 생성자에 액세스 할 수 있도록 개인 생성자가있는 클래스에 공용 메서드를 제공해야합니다.
Java에서 개인 생성자는 다음 상황에서 사용할 수 있습니다.
- 싱글 톤 구현 용.
- 공장 방법을 통합합니다.
- 정적 멤버 (변수 및 메서드) 만있는 클래스의 경우.
- 최종 멤버가있는 클래스 용. (상수 – 최종 및 정적).
- 형식이 안전한 열거를 사용합니다.
예로서 , 싱글 톤 수업을 들어 봅시다. 싱글 톤 클래스는 한 번에 하나의 객체 만 허용하는 클래스입니다. 개인 생성자를 사용하여 둘 이상의 개체를 만들 수 없도록 할 수 있습니다.
아래 프로그램은 개인 생성자를 사용하여 싱글 톤 클래스를 구현합니다.
class SingleTonClass { //Static Class Reference private static SingleTonClass obj=null; private SingleTonClass(){ System.out.println('SingleTonClass::Private constructor'); } public static SingleTonClass create_object(){ //logic to create only one instance if(obj==null){ obj= new SingleTonClass(); } return obj; } public void display(){ System.out.println('This is SingleTonClass !!'); } } class Main { public static void main(String args()){ //cannot call private constructor directly. SingleTonClass myobject= SingleTonClass.create_object(); myobject.display(); } }
산출:
위의 프로그램은 싱글 톤 클래스를 선언합니다. 개인 생성자에 액세스하고 개체 수를 하나로 제한하기 위해 개인 생성자와 공용 메서드를 제공했습니다. 메인 메소드에서 우리는 싱글 톤 클래스 객체를 생성하기 위해 public 메소드를 실행합니다.
자바의 추상 클래스 생성자
Java의 추상 클래스는 C ++와 달리 Java에 추상 클래스를 선언하는 데 사용되는 추상 키워드가 있다는 점을 제외하면 C ++로 Java에서 클래스입니다. Java의 추상 클래스는 생성자를 가질 수 있습니다. 이 추상 클래스 생성자는 (추상 클래스를 상속하는) 구현 클래스의 인스턴스를 만들 때 호출됩니다.
순서도를 만드는 최고의 소프트웨어
추상 클래스 생성자의 다음 예제를 고려하십시오.
//abstract class declaration abstract class BaseClass { BaseClass() { System.out.println('BaseClass::Constructor Called'); } abstract void func1(); } class DerivedClass extends BaseClass { DerivedClass() { System.out.println('DerivedClass::Constructor Called'); } void func1() { System.out.println('DerivedClass::func1() called'); } } class Main { public static void main(String args()) { DerivedClass d = new DerivedClass(); } }
산출:
추상 클래스는 인스턴스화 할 수 없으므로이 추상 클래스에서 새 클래스를 상속합니다. 프로그램의 출력은 우리가 main 메서드에서 파생 클래스의 객체를 만들 때 추상 클래스의 생성자가 먼저 호출 된 다음 파생 클래스 생성자가 호출됨을 보여줍니다.
자바의 인터페이스 생성자
Java의 인터페이스는 추상 클래스와 유사합니다. 인터페이스는 기본적으로 공개 추상이며 메서드 프로토 타입 만 있습니다. 그런 다음 이러한 프로토 타입은 인터페이스를 구현하는 클래스에서 구현됩니다.
인터페이스에 생성자가 있습니까?
아니요. 인터페이스에는 생성자가 없습니다. 이는 인터페이스의 메서드가 프로토 타입 일 뿐이므로 전혀 사용하지 않을 것이므로 인터페이스의 객체를 인스턴스화하거나 생성 할 필요가 없기 때문입니다. 따라서 인터페이스에 생성자를 가질 필요가 없습니다.
아래의 Java 프로그램은이 논리를 보여줍니다.
//interface declaration interface Interface_Add{ public int addNumbers(int num1, int num2); //method prototype } class AddClass implements Interface_Add{ public int addNumbers(int num1, int num2){ //method implementation int result= num1+num2; return result; } } class Main{ public static void main(String args()) { AddClass obj= new AddClass(); System.out.println('Result of addition:' + obj.addNumbers(2, 3)); } }
산출:
여기에는 'addNumbers'프로토 타입 하나가있는 인터페이스 'Interface_add'가 있습니다. 그런 다음‘AddClass’클래스가이 인터페이스와 addNumbers 메소드를 구현합니다.
메인 메서드에서 클래스가 인스턴스화되고 메서드가 실행됩니다. 따라서이 인터페이스에는 생성자가 필요하지 않습니다.
이제 Java와 유사한 String 및 Array에있는 기존 클래스의 생성자에 대해 설명하겠습니다.
자바의 문자열 생성자
Java의 문자열 객체는 String 클래스의 객체로 정의 할 수 있습니다. String 클래스는 String 개체를 만들고 초기화하기 위해 다음 생성자를 제공합니다.
이러한 생성자 중 일부는 아래에서 설명합니다.
# 1) 문자열 (byte () myArray)
주어진 바이트 배열에서 새로운 String 객체를 생성합니다. 문자열 객체를 구성하기 위해 기본 플랫폼 문자 집합을 사용하고 바이트 배열을 디코딩합니다.
예:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) 문자열 (byte () myArray, Charset char_set)
이 생성자는 생성자 호출에 지정된 char_set을 사용하여 바이트 배열을 디코딩하여 새 문자열 개체를 생성합니다.
예:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) 문자열 (char () myArray)
문자 배열에서 String 객체를 생성 할 수 있습니다.
예:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) 문자열 (char () myArray, int start_index, int count)
여기서는 start_index에서 카운트까지의 문자 수를 포함하여 문자 배열에서 String 객체를 생성합니다.
예:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) String (int () intArray, int offset, int count)
위의 생성자는 int 배열에서 새 String 객체를 할당합니다. 문자열의 문자 수는 오프셋 및 개수로 정의됩니다.
예:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) 문자열 (StringBuffer strbuffer)
이 생성자에서 새 String 개체는 StringBuffer 개체에서 생성됩니다.
예:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) 문자열 (StringBuilder strbuilder)
새로운 String 객체는 StringBuilder 객체를 사용하여 생성됩니다.
예:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
자바의 배열 생성자
배열은 생성자를 사용하여 아래와 같이 새 키워드를 사용하여 배열을 만들고 초기화합니다.
int() data = new int(4);
위의 문은 4 개 요소의 배열을 기본값 0으로 초기화합니다.
배열을 초기화하는 또 다른 방법은 다음과 같습니다.
int() data = new int(){2, 4, 6, 8};
자바의 소멸자
지금까지 우리는 객체를 생성하는 Java 생성자를 보았습니다. 개체가 작업을 마치고 더 이상 필요하지 않으면 개체에 할당 된 메모리를 해제하거나 할당을 해제해야합니다. 이것은 Java에서 소멸자의 작업입니다.
Java에서 가비지 콜렉터는 더 이상 사용되지 않거나 도달 할 수 없게 된 오브젝트를 해제해야합니다. Java의 소멸자는 종료 자 (finalizer)라고하며 실행될 것이라고 보장 할 수없는 비 결정적입니다.
Java에서는 소멸자에 대해 걱정할 필요가 없습니다. 소멸자는 Java에서 특정 구문이 없습니다. 객체는 소멸되지만 C ++에서 호출하는 방식으로 소멸자를 호출하지 않습니다.
위에서 언급했듯이 소멸자의 작업은 가비지 수집기가 호출하는 종료 자에 의해 수행됩니다.
Java의 종료 자 메서드는 참조 용으로 아래에 설명되어 있습니다.
class Main { public static void main(String() args) { Main dm = new Main(); //create object dm = null; System.gc(); //call garbage collector System.out.println('Main Mathod'); } protected void finalize() //finalize method { System.out.println('Finalize method :: object is garbage collected'); } }
산출:
위의 프로그램에서 우리는 클래스 객체를 생성합니다. null로 설정 한 다음 System.gc () 메서드를 호출합니다. 이제 해당 개체에 연결할 수없고 finalize 메서드 (소멸자)가 암시 적으로 호출됩니다.
자바의 메소드에 배열을 전달하는 방법
Java의 생성자 대 메소드
Java에서 생성자와 메소드의 차이점을 표로 정리해 보겠습니다.
생성자 | 방법 |
---|---|
새 개체를 만듭니다. | 이미 존재하는 개체에서 작동합니다. |
객체를 만들 때 클래스 멤버를 초기화하는 데 사용되는 코드 블록입니다. | 실행시 결과를 생성하는 프로그래밍 문 모음입니다. |
개체 초기화를 수행하는 데 사용됩니다. | Java에 의해 실행되는 일련의 명령문입니다. 초기화 루틴을 포함하거나 포함하지 않을 수 있습니다. |
암시 적으로 호출됩니다. | 프로그램에서 명시 적으로 호출해야합니다. |
new 키워드를 사용하여 새 개체를 만들 때 호출됩니다. | 프로그래머가 메서드를 호출 할 때 호출됩니다. |
클래스 이름과 동일합니다. | 프로그래밍 언어에서 허용하는 모든 이름을 가질 수 있습니다. |
반환 유형이 없습니다. | 반환 유형이 있어야합니다. 그렇지 않으면 void를 반환해야합니다. |
클래스에는 오버로드 된 생성자가 많이있을 수 있습니다. | 클래스에는 오버로드 된 메서드와 별개의 메서드가있을 수 있습니다. |
자식 클래스에 상속 될 수 없습니다. | 자식 클래스에서 상속 할 수 있으며 재정의 할 수도 있습니다. |
자주 묻는 질문
Q # 1) 생성자는 비공개가 될 수 있습니까?
대답: 예. Java의 생성자는 비공개 일 수 있습니다. 추상 클래스를 포함한 모든 클래스는 개인 생성자를 가질 수 있습니다. 개인 생성자를 사용하여 클래스가 인스턴스화되는 것을 방지하거나 해당 클래스의 개체 수를 제한 할 수 있습니다.
Q # 2) Java에서 Abstract Class Constructor의 사용은 무엇입니까?
대답: 추상 클래스 생성자는 추상 클래스를 상속하는 파생 클래스의 개체를 만들 때 호출됩니다. 추상 클래스에 멤버 변수가있는 경우 외에도 추상 클래스 생성자에서 초기화 할 수 있습니다.
Q # 3) Java의 Abstract 클래스에서 매개 변수화 된 생성자를 정의 할 수 있습니까?
대답: 예, 추상 클래스에서 매개 변수화 된 생성자를 가질 수 있습니다. 그런 다음 super () 호출을 사용하여 추상 클래스를 상속 한 파생 클래스에서이 생성자를 호출 할 수 있습니다.
Q # 4) Java에 Destructor가없는 이유를 알고 있습니까?
대답: Java에는 가비지 수집기가 있으므로 특정 소멸자가 필요하지 않습니다. 이 가비지 수집기는 연결할 수없는 개체를 파괴하고 메모리를 해제합니다. finalize라는 메서드는 비 결정적으로 실행되고 리소스 해제 등과 같은 소멸자 기능을 수행하는 가비지 수집기의 일부이기도합니다.
Q # 5) 추상 클래스는 본문을 가질 수 있습니까?
대답: 아니요. 추상 클래스는 메서드 선언과 생성자 만 가질 수 있습니다. 그 방법은 구현되지 않았습니다. 이 추상 클래스를 상속하는 클래스가 메서드를 구현합니다. 프로토 타입이나 선언 외에도 가시성 또는 액세스 지정자를 가질 수 있습니다.
결론
이것으로 Java의 생성자에 대한 자습서가 완료되었습니다. 여기에서는 생성자의 정의, 생성 및 유형에 대해 설명했습니다. 또한 Java의 생성자 오버로딩 및 생성자 체인에 대해서도 논의했습니다.
Java에서 추상 및 개인 생성자를 탐색하고 인터페이스가 생성자를 가질 수없는 이유를 배웠습니다. 배열 및 문자열 클래스에 사용되는 생성자를 보았습니다.
또한 생성자의 기능과 반대되는 기능을 수행하는 Java의 소멸자에 대해서도 논의했습니다. 생성자는 객체를 생성하고 소멸자는 객체를 파괴합니다. Java에서 소멸자 기능은 가비지 콜렉션 중에 실행되는 종료 자에 의해 수행됩니다.
따라서 Java에는 특정 소멸자가 없으며 C ++에서하는 방식으로 정의 할 필요가 없습니다. 또한 메서드와 생성자의 차이점에 대해서도 논의했습니다. 우리는 생성자가 메소드와 같지 않다는 것을 알고 있지만 생성자를 특별한 메소드로 볼 수 있습니다.