추상클래스는 절대 new할 수 없다.
-> 대신 Sub class를 이용하여 생성할 수있다.
ex) Calendat cal = new GregorianCalendar();
메소드 생성
ex) Calendat cal = Calendat.getInstance();
익명 Inner class
$1도 같이 생성 된다.
인터페이스
implements 하면 모든 추상메소드를 Override를 써준다,
대신 Override를 해주는 클래스로 생성
Collection coll = new ArrayList();
Map map = new HashMap();
메소드를 이용하여 해준다.
Iterator it = coll.iterator();
PreparedStatement pstmt = conn.preparedStatement();
package nested;
public abstract class AbstractTest {
// POJO형식 , 추상메소드를 가진 클래스 여서 추상 클래스로 만들어 줌.
String name;
public String getName() { // 메소드의 구현 부
return name;
}
public abstract void setName(String name); // 추상메소드
}
--------------------------------------------------------------
public abstract class AbstractExam {
// 추상클래스라고 추상메소드가 있을 필요는 없다.
public void cc() {}
}
--------------------------------------------------------------
public class AbstractMain {
public static void main(String[] args) {
AbstractTest at = new AbstractTest() { // 익명 Inner class
// 추상 클래스라서 생성(new) 불가, {} - 흑기사(잠깐 사용) 대신 오버라이딩 걸어줘야해
@Override
public void setName(String name) {
this.name = name;
}
};
at.setName("홍길동");
System.out.println(at.getName());
InterA in = new InterA() {
public void aa() {}
public void bb() {}
};
AbstractExam ae = new AbstractExam() {};
// 추상메소드가 없기 때문에 원하는 메소드를 선택해서 Override
-> 추상메소드가 없는 추상 클래스 like 두끼
}
}
: 객체를 정렬하는데 필요한 메소드가 정의되어 있다
: 비교대상자가 더 크면(<) -1, 같다면(==) 0, 작으면(>) 1을 반환시켜줍니다. : 이 값을 비교하여 정렬을 할 수 있다. 일반적인 int, char, double 같은 타입의 배열이라면 다음 함수들을 이용
Collections(또는 Arrays).sort() : 정렬
Collectoins(또는 Arrays).reverse() : 뒤집기
implements Comparable<Integer>
객체 정렬
package collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class PersonSort {
public static void main(String[] args) {
String[] ar = {"orange", "apple", "banna", "pear", "peach", "applemango"};
System.out.print("정렬 전 = ");
for(String data : ar) {
System.out.print(data+" ");
}
System.out.println();
Arrays.sort(ar); // 배열에 관련된 모든 메소드를 가진 클래스 - sort는 static으로 선언되어 있다.
System.out.print("정렬 후 = ");
for(String data : ar) {
System.out.print(data+" ");
}
System.out.println();
System.out.println("----------------------");
PersonDTO aa = new PersonDTO("홍길동", 25);
PersonDTO bb = new PersonDTO("프로도", 40);
PersonDTO cc = new PersonDTO("어피치", 35);
ArrayList<PersonDTO> list = new ArrayList<PersonDTO>();
list.add(aa);
list.add(bb);
list.add(cc);
System.out.println("정렬 전");
for(PersonDTO personDTO : list) {
System.out.println(personDTO);
}//for
System.out.println();
System.out.println("이름으로 오름차순");
Comparator com = new Comparator<PersonDTO>() {
@Override
public int compare(PersonDTO o1, PersonDTO o2) { //구현
return o1.getName().compareTo(o2.getName() ); // 오름차순
// return o1.getName().compareTo(o2.getName()) * -1; // 내림차순
}
};
// 나이는 정렬이 되지만 이름도 같이 움직이게 하기 위해 / collection이라는 객체 안에 들어 있어서
Collections.sort(list,com);
System.out.println("정렬 후");
for(PersonDTO personDTO : list) {
System.out.println(personDTO);
}//for
System.out.println();
}
}
입출력 처리
출력 시 파일 없으면 자동으로 파일 생성
입력 시 파일 없으면 Error (FileNotFoundException)
: 객체는 파일이나 네트워크로 전송이 안된다
: 객체를 byte[ ] 변환시켜서 전송해야한다
: Serializable
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataStream {
public static void main(String[] args) throws IOException{
DataOutputStream dos = new DataOutputStream(new FileOutputStream("result.txt"));
dos.writeUTF("홍길동");
dos.writeInt(25);
dos.writeDouble(185.3);
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream("result.txt"));
String name = dis.readUTF();
int age = dis.readInt();
double height = dis.readDouble();
System.out.println("이름 = " + name);
System.out.println("나이 = " + age);
System.out.println(" 키 = " + height);
dis.close();
}
}
파일을 읽어 오려고
ByteStream.java
package io;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ByteStream {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("data.txt")));
// System.out.println(bis.read());
// A라는 첫번째 글짜 한개를 가져오는데 아스키 코드로 읽어옴
// System.out.println(bis.read());
// System.out.println(bis.read());
// 더이상 읽을 문자(숫자 X, 기호 X)없으면 -1 값을 출력함
int data;
while((data=bis.read()) != -1) {
System.out.print(data);
}
}
}
엔터는 2byte \r\n
문자로 출력해 보기
int data;
while((data=bis.read()) != -1) {
System.out.print((char)data);
크기 구하기
package io;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ByteStream2 {
public static void main(String[] args) throws IOException {
File file = new File("data.txt");
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int size = (int)file.length();
// 배열.length 파일의 크기 구하기
byte[] b = new byte[size];
bis.read(b, 0, size);
System.out.println(new String(b));
}
}
java.io.NotSerializableException 객체 직렬화 오류
package io;
import java.io.Serializable;
public class PersonDTO implements Serializable{ // DTO는 1인분 클래스
private String name;
private int age;
private double height;
public PersonDTO(String name, int age, double height) {
super();
this.name = name;
this.age = age;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
public class PersonDTO implements Serializable
implements Serializable을 해줘야지 직렬화 준비 완료
package io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectMain {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("result2.txt"));
PersonDTO dto = new PersonDTO("홍길동", 25, 185.3);
oos.writeObject(dto);
oos.close();
// DataStream 처럼 한개씩 보내는게 아닌 한번에 뭉쳐서 보내는 방법.
System.out.println("-----------------------------");
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("result2.txt"));
PersonDTO dto2 = (PersonDTO)ois.readObject(); // 자식 = 부모
System.out.println("이름 = " + dto2.getName());
System.out.println("나이 = " + dto2.getAge());
System.out.println("키 = " + dto2.getHeight());
ois.close();
}
}
객체는 파일이나 네트워크로 전송이 안되기 때문에
갖고 있는 객체를 byte[ ] 바이트 배열로 조각내어 변환시켜서 전송해야한다.
Serializable
단, 파일로 들어갈 땐 뭉쳐서 보내줘야 한다.(Serializable 이것만 잡으면 자바가 알아서 해줌 )