logo

Java에서 객체를 생성하는 방법

그만큼 물체 의 기본 빌딩 블록이다 OOP 언어. ~ 안에 자바 , 우리는 생성 없이는 어떤 프로그램도 실행할 수 없습니다. 물체 . 방법은 다양해요 생성하다 자바의 객체 이 섹션에서 논의하고 배울 내용은 다음과 같습니다. Java에서 객체를 생성하는 방법.

자바 객체를 생성하는 다섯 가지 방법을 제공합니다.

  • 사용 새로운 예어
  • 사용 클론() 방법
  • 사용 새로운 인스턴스() 의 방법 수업 수업
  • 사용 새로운 인스턴스() 의 방법 건설자 수업
  • 사용 역직렬화

새 키워드 사용

사용하여 새로운 키워드는 클래스의 객체나 인스턴스를 생성하는 가장 널리 사용되는 방법입니다. new 키워드를 사용하여 클래스의 인스턴스를 생성하면 새로 생성된 클래스에 대해 메모리(힙)를 할당합니다. 물체 그리고 또한 참조 그 기억에 그 물건을. new 키워드는 배열을 만드는데도 사용됩니다. 객체를 생성하는 구문은 다음과 같습니다.

 ClassName object = new ClassName(); 

new 키워드를 사용하여 객체를 생성하는 프로그램을 만들어 보겠습니다.

CreateObjectExample1.java

 public class CreateObjectExample1 { void show() { System.out.println('Welcome to javaTpoint'); } public static void main(String[] args) { //creating an object using new keyword CreateObjectExample1 obj = new CreateObjectExample1(); //invoking method using the object obj.show(); } } 

산출:

 Welcome to javaTpoint 

new 키워드를 사용하면 클래스의 생성자(기본값 또는 매개변수화됨)를 호출할 수도 있습니다.

CreateObjectExample2.java

C++의 상속
 public class CreateObjectExample2 { //constructor of the class CreateObjectExample2() { System.out.println('Welcome to javaTpoint'); } public static void main(String[] args) { //creating an object using new keyword CreateObjectExample2 obj = new CreateObjectExample2(); } } 

산출:

 Welcome to javaTpoint 

clone() 메소드 사용

그만큼 클론() 방법은 ~의 방법이다 물체 수업. 객체의 복사본을 만들고 동일한 복사본을 반환합니다. 그만큼 JVM clone() 메소드가 호출되면 새 객체를 생성합니다. 이전에 생성된 객체의 모든 내용을 새로운 하나의 객체로 복사합니다. 생성자를 호출하지 않습니다. 우리는 다음을 구현해야 합니다. 복제 가능 clone() 메소드를 사용하는 동안 인터페이스. 메소드는 던진다 CloneNotSupportedException 객체의 클래스가 Cloneable 인터페이스를 지원하지 않는 경우 예외가 발생합니다. clone() 메서드를 재정의하는 서브클래스는 인스턴스를 복제할 수 없는 경우 예외를 발생시킬 수 있습니다.

참고: 이 메서드는 새 개체가 아닌 개체의 복사본을 만듭니다.

통사론:

 protected Object clone() throws CloneNotSupportedException 

다음 명령문을 사용하여 새 개체를 만듭니다.

 ClassName newobject = (ClassName) oldobject.clone(); 

CreateObjectExample3.java

Sklearn 정확도 점수
 public class CreateObjectExample3 implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { //invokes the clone() method of the super class return super.clone(); } String str = 'New Object Created'; public static void main(String[] args) { //creating an object of the class CreateObjectExample3 obj1 = new CreateObjectExample3(); //try catch block to catch the exception thrown by the method try { //creating a new object of the obj1 suing the clone() method CreateObjectExample3 obj2 = (CreateObjectExample3) obj1.clone(); System.out.println(obj2.str); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } 

산출:

 New Object Created 

Class 클래스의 newInstance() 메소드 사용

그만큼 새로운 인스턴스() Class 클래스의 메소드는 객체를 생성하는데도 사용됩니다. 기본 생성자를 호출하여 객체를 생성합니다. 객체가 나타내는 클래스의 새로 생성된 인스턴스를 반환합니다. 내부적으로 Constructor 클래스의 newInstance() 메서드를 사용합니다.

통사론:

 public T newInstance() throws InstantiationException, IllegalAccessException 

그것은 던진다 불법접근예외, InstantiationException, ExceptionInInitializerError 예외.

다음과 같은 방법으로 객체를 생성할 수 있습니다:

 ClassName object = ClassName.class.newInstance(); 

또는

 ClassName object = (ClassName) Class.forName('fully qualified name of the class').newInstance(); 

위의 진술에서, 이름() Class 클래스의 정적 메서드입니다. 매개변수를 구문 분석합니다. 클래스 이름 문자열 유형입니다. 정규화된 이름을 가진 클래스의 개체를 반환합니다. 클래스를 로드하지만 객체를 생성하지는 않습니다. 그것은 던진다 ClassNotFoundException 클래스를 로드할 수 없고 연결 오류 연결이 실패하는 경우.

10ml는 얼마인가요?

객체를 생성하기 위해 우리는 새로운 인스턴스() Class 클래스의 메소드. 클래스 이름을 알고 클래스에 공개 기본 생성자가 있는 경우에만 작동합니다.

다음 프로그램에서는 newInstance() 메서드를 사용하여 새 객체를 생성했습니다.

CreateObjectExample4.java

 public class CreateObjectExample4 { void show() { System.out.println('A new object created.'); } public static void main(String[] args) { try { //creating an instance of Class class Class cls = Class.forName('CreateObjectExample4'); //creates an instance of the class using the newInstance() method CreateObjectExample4 obj = (CreateObjectExample4) cls.newInstance(); //invoking the show() method obj.show(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } 

산출:

 A new object created. 

생성자 클래스의 newInstance() 메소드 사용

이는 다음과 유사합니다. 새로운 인스턴스() 의 방법 수업 수업. 이는 객체를 생성하는 반사적 방법으로 알려져 있습니다. 이 방법은 건설자 클래스는 클래스입니다java.lang.reflect패키지. 매개변수화된 생성자와 전용 생성자를 호출할 수도 있습니다. 새로운 인스턴스() 방법. Class 클래스의 newInstance() 메서드와 비교하여 널리 선호됩니다.

통사론:

 public T newInstance(Object... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException 

이 메서드는 개체 배열을 인수로 구문 분석합니다. 적절한 유형의 래퍼 Object에 래핑된 기본 유형의 값입니다. 생성자를 호출하여 생성된 새 개체를 반환합니다. 그것은 던진다 IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, ExceptionInInitializerError 예외 .

다음과 같은 방법으로 객체를 생성할 수 있습니다:

 Constructor constructor = Employee.class.getConstructor(); Employee emp3 = constructor.newInstance(); 

newInstance() 메서드를 사용하여 객체를 생성하는 프로그램을 만들어 보겠습니다.

CreateObjectExample5.java

 import java.lang.reflect.*; public class CreateObjectExample5 { private String str; CreateObjectExample5() { } public void setName(String str) { this.str = str; } public static void main(String[] args) { try { Constructor constructor = CreateObjectExample5.class.getDeclaredConstructor(); CreateObjectExample5 r = constructor.newInstance(); r.setName('JavaTpoint'); System.out.println(r.str); } catch (Exception e) { e.printStackTrace(); } } } 

산출:

 JavaTpoint 

역직렬화 사용

자바에서는 직렬화 객체를 바이트 스트림 시퀀스로 변환하는 프로세스입니다. 직렬화의 역방향 프로세스(바이트 스트림에서 객체로)를 호출합니다. 역직렬화 . JVM은 객체를 직렬화하거나 역직렬화할 때 새 객체를 생성합니다. 객체를 생성하기 위해 생성자를 사용하지 않습니다. 역직렬화를 사용하는 동안 직렬화 가능 인터페이스(마커 인터페이스)는 클래스에 구현되어야 합니다.

패딩 CSS
Java에서 객체를 생성하는 방법

직렬화: 그만큼 쓰기객체() 의 방법 객체출력스트림 클래스는 객체를 직렬화하는 데 사용됩니다. 객체를 출력 스트림으로 보냅니다.

통사론:

 public final void writeObject(object x) throws IOException 

역직렬화: 방법 읽기객체() ~의 객체입력스트림 클래스는 객체를 역직렬화하는 데 사용됩니다. 스트림 외부의 개체를 참조합니다.

통사론:

 public final Object readObject() throws IOException,ClassNotFoundException 

참고: 필드를 개체의 일부로 포함하지 않으려면 필드를 정적 또는 임시로 만드세요. 직렬화 프로세스에는 포함되지 않습니다.

프로그램을 통한 직렬화와 역직렬화를 이해해 봅시다.

Employee.java

 import java.io.Serializable; public class Employee implements Serializable { int empid; String empname; public Empoyee(int empid, String empname) { this.empid = empid; this.empname = empname; } } 

우리는 이름이 붙은 클래스를 만들었습니다. 직원 해당 객체는 직렬화 및 역직렬화됩니다.

Java 객체 직렬화:

다음 프로그램에서는 Employee 클래스의 객체를 직렬화했습니다. 쓰기객체() ObjectOutputStream 클래스의 메서드입니다. 객체의 상태는 다음 위치에 저장됩니다. 직원.txt 파일.

이진 검색을 위한 Python 프로그램

직렬화Example.java

 import java.io.*; class SerializationExample { public static void main(String args[]) { Try { //Creating the object Employee emp = new Employee(198054,'Andrew'); //Creates a stream and writes the object FileOutputStream fout=new FileOutputStream('employee.txt'); ObjectOutputStream out=new ObjectOutputStream(employeeout); out.writeObject(emp); out.flush(); //closes the output stream out.close(); System.out.println('Successfully Created'); } catch(Exception e) { System.out.println(e); } } } 

산출:

 Successfully Created 

Java 객체의 역직렬화:

다음 프로그램에서는 위 프로그램에서 직렬화한 개체를 역직렬화하겠습니다.

역직렬화Example.java

 import java.io.*; class DeserializationExample { public static void main(String args[]) { try { //Creating a stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('employee.txt')); Employee e=(Employee)in.readObject(); //prints the data of the serialized object System.out.println(e.empid+' '+e.empname); //closing the input stream in.close(); } catch(Exception e) { System.out.println(e); } } } 

산출:

 198054 Andrew 

위의 5가지 방법에서 우리는 새로운 키워드와 둘 다 새로운 인스턴스() 메소드는 생성자를 사용하여 객체를 생성하는 반면 나머지 두 메소드는 생성자를 사용하지 않습니다.