IT

ObjectInputStream,ObjectOutputStream 클래스를 사용 하기 위해서는
대상 클래스를 Serializable 인터페이스를 상속받아야 한다.

//예제 대상클래스
package day14;

import java.io.Serializable;
import java.util.Scanner;

public class Friend1 implements Serializable{
 private String name;
 private String jumin;
 private String tel;
 private String addr;
 transient Scanner s; //객체화 시킬때 제외하라는 키워드
  
 public Friend1() {
  super();
  // TODO Auto-generated constructor stub
  s = new Scanner(System.in);
  System.out.print("name=");
  name=s.nextLine().trim();
  
  System.out.print("jumin=");
  jumin=s.nextLine().trim();
  
  System.out.print("tel=");
  tel=s.nextLine().trim();
  
  System.out.print("addr=");
  addr=s.nextLine().trim();
 }
 
 public String getName() {
  return name == null ? "" : name.trim();
 }
 public String getJumin() {
  return jumin == null ? "" : jumin.trim();
 }
 public String getTel() {
  return tel == null ? "" : tel.trim();
 }
 public String getAddr() {
  return addr == null ? "" : addr.trim();
 }
  
}

//메인클래스
package day14;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

public class Friend1_Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Friend1_Main fm = new Friend1_Main();
  fm.file_use();
 }

 private void file_use() {
  // TODO Auto-generated method stub
  try {
   File dir = new File("src\\day14");
   File file = new File(dir,"myfriend.txt");
   Scanner key = new Scanner(System.in);
   ArrayList<Friend1> arr = new ArrayList<Friend1>();
   if(file.exists())
   {
    ObjectInputStream obj = new ObjectInputStream(new FileInputStream(file)); 
    arr=(ArrayList<Friend1>)obj.readObject();
    obj.close();
   }else{
    file.createNewFile();
   }
   while(true){
    
    System.out.println("1.친구등록  2.전체보기  3.친구찾기  4.종료");
    
    int num = key.nextInt();
    if(num==1){   //친구등록
     Friend1 f = new Friend1();
     arr.add(f);
     System.out.println("친구 1명 등록");
    } else if(num==2){ //전체보기
     for (Friend1 f : arr){
      System.out.println("이름 : "+f.getName()); 
      System.out.println("주민 : "+f.getJumin());
      System.out.println("전화 : "+f.getTel());
      System.out.println("주소 : "+f.getAddr());
     }
    } else if(num==3){ //친구찾기
     
    } else if(num==4){ //종료&저장
     ObjectOutputStream oos =
      new ObjectOutputStream(new FileOutputStream(file));
     oos.writeObject(arr);
     oos.close();
     System.exit(0);
    } else{    //입력오류
     System.out.println("입력오류");
    }
   }
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
 }

}


Posted by sinpk

String s1 = "Hello Java";
String s2 = "Hello Java";
/*
리터럴 값을 가지는 String 객체를 생성할 때 이미 같은 문자열 값을 가진 String이 메모리상에 존재하면
같은 문자열 주소를 가지게 된다.
*/  

String s3= new String("Hello Java");
String s4= new String("Hello Java");
/*
new 연산자를 이용하여 String 객체를 생성할 때 이미 같은 문자열 값을 가진 String객체가 메모리상에 존재해도
새로운 객체를 생성하므로 서로 다른 객체를 참조한다.
*/

'소프트웨어 > Java' 카테고리의 다른 글

AWT 이벤트 처리  (0) 2011.06.02
ObjectInputStream,ObjectOutputStream 클래스  (0) 2011.06.02
instanceof 연산자  (0) 2011.05.25
[객체 형변환] 상속된 클래스의 오버라이딩 메소드  (0) 2011.05.25
== 와 equals  (0) 2011.05.19
Posted by sinpk

package day08;
class Box{
 
}

class PaperBox extends Box{
 
}

class GoldPaperBox extends PaperBox{
 
}

public class InstanceOfTest {
 public static void wrapBox(Box box){
  System.out.println("GoldPaperBox:"+(box instanceof GoldPaperBox));
  System.out.println("PaperBox:"+(box instanceof PaperBox));
  System.out.println("Box:"+(box instanceof Box));
  System.out.println();
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Box box1 = new Box();
  PaperBox box2 = new PaperBox();
  GoldPaperBox box3 = new GoldPaperBox();
  
  wrapBox(box3);
  wrapBox(box2);
  wrapBox(box1);
 }
}
-----------------------------------------------------------
결과
GoldPaperBox:true
PaperBox:true
Box:true

GoldPaperBox:false
PaperBox:true
Box:true

GoldPaperBox:false
PaperBox:false
Box:true
-----------------------------------------------------------
instanceof 연산자는 상위 클래스와 자기 자신 클래스까지 허용한다.

'소프트웨어 > Java' 카테고리의 다른 글

ObjectInputStream,ObjectOutputStream 클래스  (0) 2011.06.02
String 클래스 객체 생성  (0) 2011.05.25
[객체 형변환] 상속된 클래스의 오버라이딩 메소드  (0) 2011.05.25
== 와 equals  (0) 2011.05.19
Java DOC 생성  (0) 2011.05.18
Posted by sinpk

A a = new A();
B b = new B();
a = b;
-------------------
A a = new B(); 와 같다.

● 객체참조변수와 객체와의 관계

  1) 부모클래스(A)로 객체참조변수(a)를 생성하여 부모클래스의 생성자로 만들어진 객체의
     주소 저장 => 가능
     : 참조변수 => 부모클래스의 메소드만 사용 가능
     : A a=new A();

  2) 자식클래스(B)로 객체참조변수(b)를 생성하여 자식클래스의 생성자로 만들어진 객체의
     주소 저장 => 가능
     : 참조변수 => 부모클래스의 메소드와 자식클래스의 메소드 사용 가능
     : B b=new B();

  3) 자식클래스(B)로 객체참조변수(b)를 생성하여 부모클래스(A)의 생성자로 만들어진 객체의
     주소 저장 => 불가능(Error)
     : B b=new A();   // Error


  4) 부모클래스(A)로 객체참조변수(a)를 생성하여 자식클래스(B)의 생성자로 만들어진 객체(b)의
     주소 저장 => 가능
     : 참조변수 => 부모클래스의 메소드 사용 가능
                   객체형변환을 사용하면 자식클래스의 메소드(c) 사용 가능
     : A a=new B();
     : ((B)a).c();

package day08;
class A{
 int var = 10;
 public void method(){
  System.out.println("A"+var);
 }
}
class B extends A{
 int var = 20;
 public void method(){
  System.out.println("B"+var);
 }
}

public class test {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  A a = new B();
  
  System.out.println(a.var);
  System.out.println(((B)a).var);   //강제캐스팅을 사용하여 자식클래스의 멤버변수를 사용할수 있다.
  a.method(); 
 }
}


'소프트웨어 > Java' 카테고리의 다른 글

String 클래스 객체 생성  (0) 2011.05.25
instanceof 연산자  (0) 2011.05.25
== 와 equals  (0) 2011.05.19
Java DOC 생성  (0) 2011.05.18
이클립스 단축키  (0) 2011.05.17
Posted by sinpk

== 와 equals

2011. 5. 19. 11:29 : 소프트웨어/Java

자바 변수 기본형에서 (int,char..) == (int,char..) 은 값을 비교 하지만

참조 변수(객체)에서 객체 == 객체는 주소를 비교 한다.

참조 변수(객체)에서 값을 비교하기 위해서는 equals 메소드를 사용한다.

'소프트웨어 > Java' 카테고리의 다른 글

String 클래스 객체 생성  (0) 2011.05.25
instanceof 연산자  (0) 2011.05.25
[객체 형변환] 상속된 클래스의 오버라이딩 메소드  (0) 2011.05.25
Java DOC 생성  (0) 2011.05.18
이클립스 단축키  (0) 2011.05.17
Posted by sinpk