얼마 전 동료와 이에 대해 대화를 나눴습니다.
생성자를 사용하는 것이 당연하지만 다른 방법에는 어떤 것이 있을까요?
자바 객체를 만들 수 있는 4 가지 방법:
MyObject object = new MyObject();
MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();
MyObject anotherObject = new MyObject();
MyObject object = (MyObject) anotherObject.clone();
ObjectInputStream inStream = new ObjectInputStream(anInputStream );
MyObject object = (MyObject) inStream.readObject();
Here 그들을 구하사 읽을 수 있습니다.
여러 가지입니다.
자바 가상 머신 (jvm) 에, 객체를 생성할 수 있는 다양한 방법 5 가지
1. 구성자를 '새' 라는 키워드를 사용하여 확보하십시오.
Employee emp1 = new Employee();
2. '클래스' ' ()' 라는 방법을 사용하여 네윈스턴스 구성자를 확보하십시오.
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")
.newInstance();
또한 쓸 수 있다
Employee emp2 = Employee.class.newInstance();
3. ' ()' '' 라는 방법을 사용하여 네윈스턴스 구성자를 구성자를 확보하십시오.
Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
4. 아니요 구성자를 방법을 사용하여 clone () '' 콜
Employee emp4 = (Employee) emp3.clone();
5. 아니요 구성자를 호출하십시오 역직렬화를 사용하여
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
첫 세 가지 방법 모두 '새' 키워드 ' ()' 에는 두 개의 복제 및 역직렬화를 구성자를 네윈스턴스 호츨 나중에는 객체를 만들 방법을 없이 구성자를 부른다.
위의 모든 방법이 다른 바이트코드 연관되어, 읽기 jave 객체를 만들 수 있는 다양한 방법을 통해 예 의 사례, 예를 들어, 이 모든 방법은 바이트코드 변환되게 자세한 설명.
그러나 한 어레이나 문자열 객체를 생성할 수 있는 방법을 객체에는 생성하기에 것이라고 주장하고 있지만 역시 이러한 일들이 좀 더 구체적인 일부 클래스만 직접 만들 수 있는 모든 클래스의 객체를 및 처리됩니까 JVM, 비록 우리가 이러한 5 가지 방법을 사용하여.
> 설정이므로 댁이라면 구성자를 통해 가장 파생됨 비사양 시리얼화가 가능합니다 수퍼. 한 때 발생하며, 해당 클래스를 주님으로부터그에게 인수가 없습니다 구성자를 린발리드클래스엑스티온 빛위에 드 직렬화하지.
제발 지켜보리니 Tom& # 39 의 완벽한 치료를 문제에 대한 모든 경우에; -)
A[] array = new A[len];
또는
A[] array = new A[] { value0, value1, value2 };
구조상 유사한 것으로, 이는 통화 및 내부 셀명 숀 한다고 구성자를 것은 훨씬 더 많은 할당 및 제로 초기화중 (또는 초기화중 명시성 컨텐트에서 함께 두 번째 경우) 와 일부 헤더입니다 나타내십시오 메모리 블록, 유형 및 디스테이징하는.
한 때 반군지역 인수만 바라리스 방법 배열은 좁히어 생성되는가 (및 접수됨), 고쳐주렴 상태이다.
네 번째 운행에서어떠한 약간만이라도
A[] array = (A[]) Array.newInstance(A.class, len);
물론 여기서 작동됨 복제 및 데즈리얼리징.
그러나 그들은 여러 가지 방법으로 표준 API 생성하는 어레이에는 하나 (또는 그 이상) 에 모두 사용하는 것은 다음과 같은 방법으로.
다른 방법은 우리가 가능성도 있다.
답 - 수 - 요약하십시오 object& # 39 를 호출하여 구성자를 하나의 주 운행에서어떠한; s 클래스.
업데이트: 다른 답을 나열되는지 수반하지 않는 두 가지 방법을 사용하여 구성자를 - 데지레이제이션 및 클론한.
자바 객체를 만들 수 있는 다양한 방법을 5 개가 있다.
h3> <; 1. '새' 를 사용하여 keyword:< /h3>;
이것은 가장 일반적인 방법은 객체를 생성할 수 있는 것으로 나타났습니다. 거의 99% 의 객체는 이렇게 만든.
MyObject object = new MyObject();//normal way
<, h3>, 2. 팩터리의 사용하여 Method:< /h3>;
ClassName ObgRef=ClassName.FactoryMethod();
RunTime rt=Runtime.getRunTime();//Static Factory Method
<, h3>, 3. 클론한 사용하여 Concept:< /h3>;
클론 (clone () '를 사용하여' () ',' 기존 객체에는 복제본입니다 만드는 데 사용할 수 있습니다.
MyObjectName anotherObject = new MyObjectName();
MyObjectName object = anotherObjectName.clone();//cloning Object
<, h3>, 4. 클라스윈포나미 () ',' 사용하여 :< /h3>.
만약 우리가 이름을 아는 클래스용 &. 이런 식으로 공용 기본 구성자를 있으면 객체를 생성할 수 있습니다.
MyObjectName object = (MyObjectNmae) Class.forName("PackageName.ClassName").newInstance();
String st=(String)Class.forName("java.lang.String").newInstance();
<, h3>. 5. Deserialization:< 사용하여 객체에는 /h3>;
그러나 역직렬화를 객체에는 객체를 만드는 것이 변경분이 시리얼화된 양식.
ObjectInputStreamName inStream = new ObjectInputStreamName(anInputStream );
MyObjectName object = (MyObjectNmae) inStream.readObject();
방법 1
새 키워드를 사용하여. 이것은 가장 일반적인 방법은 객체를 생성할 수 있는 것으로 나타났습니다. 거의 99% 의 객체는 이렇게 만든.
Employee object = new Employee();
방법 2
Flexlm*용 클라스윈포나미 (). 클래스 객체에는 반사 클라스윈포나미 () 를 사용하면 유용하게 사용할 수 있다. 이 방법을 쓸 수 없는 이 객체에는 정의됩니까 자바로 프로그래머용 의해 구분된다. 이들은 같은 각 클래스. () 에 해당 클래스의 인스턴스를 호출하는 네윈스턴스 수 있는 (즉 카링클레스윈포나미 (", ExampleClass") 에 해당하는 것은 새로운 에스타 플레클레스 호출하십시오. 윈스턴스 () ()), 수 있는 클래스 eventtest security. 메서드입니다 액세스하십시오 가시적입니다 필드용 상술합니다.
Employee object2 = (Employee) Class.forName(NewEmployee).newInstance();
클라스윈포나미 () 은 항상 사용하는 반면, 다른 클라슬로이더 클라슬로데르드러드클레스 () 의 요청자에게 클라슬로이더 지정할 수 있습니다. 내가 믿고 있는 반면, 클라슬로데르드러드클레스 초기화되는지 클라스윈포나미 () 는 로드됨 클래스용 외곽진입 싫어하겠어 할 뿐만 아니라 바로 (초기화되었습니다 때까지 처음 사용된 것은 아닙니다).
다른 읽어야 함.
Java: 스레드할 스테이드 소개 및 예 간단한 예를 jave 이넘
방법 3
Flexlm*용 clone (). 기존 객체에는 복제본입니다 clone () 를 만드는 데 사용할 수 있습니다.
Employee secondObject = new Employee();
Employee object3 = (Employee) secondObject.clone();
방법 4
네윈스턴스 () 메서드를 사용하여
Object object4 = Employee.class.getClassLoader().loadClass(NewEmployee).newInstance();
메서드입니다 5
역직렬화를 사용하여 객체에는. 그러나 역직렬화를 객체에는 객체를 만드는 것이 변경분이 시리얼화된 양식.
// Create Object5
// create a new file with an ObjectOutputStream
FileOutputStream out = new FileOutputStream("");
ObjectOutputStream oout = new ObjectOutputStream(out);
// write something in the file
oout.writeObject(object3);
oout.flush();
// create an ObjectInputStream for the file we created before
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("crunchify.txt"));
Employee object5 = (Employee) ois.readObject();