레이블이 java Object Serializing인 게시물을 표시합니다. 모든 게시물 표시
레이블이 java Object Serializing인 게시물을 표시합니다. 모든 게시물 표시

2013년 8월 9일 금요일

[OracleJavaCommunity,오라클자바커뮤니티]이번 강좌에서는 자바에서의 main 메소드에 대해 자세히 알아 보도록 하겠습니다

이번 강좌에서는 자바에서의 main 메소드에 대해 자세히 알아 보도록 하겠습니다. main 앞에 왜 static이 붙으며 왜 public이 붙는지등에 관한 것을 공부해 보도록 하겠습니다. 잘 알아두시기 바랍니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



main 메소드의 특징 

메인 메소드는 JVM에 의해 자바 프로그램을 실행 할 때 처음 호출되는 메소드 입니다.
메인 메소드는 객체 생성을 위한 첫 실행 메소드 이다. 그러므로 어느 클래스에서 접근이 가능해야 하므로 public 이라는 접근 제어자를 사용 합니다.
해당 클래스로 부터 생성된 모든 객체에서 접근이 가능해야 한다. (static) --> static이라는 말이 붙으면 객체와 관련이 있는 것이 아니라 클래스와 관련이 있으며 초기화가 한번만 일어나며, 클래스가 실행되기 위해 메모리로 로딩되는 시점에 한번만 초기화가 일어 납니다. 즉 전역변수등에 사용되며...등등 [자바기초다지기#7]변수-인스턴스변수, 클래스변수 강좌에서 이미 공부 했던 부분 입니다.
Return 값을 가지지 않습니다.(void)
또한 실행 될 때 인자 값을 받아 들일 수 있습니다.

자바 인터프리터는 Java Application에 주어지는 각 명령형 인자들을 main(String[] args) 메소드에 매개변수로 넘겨 줍니다.
각 명령행 인자는 공백문자(whitespace)로 구분 하며, C/C++에서 메인 함수의 매개변수 개수를 나타내는 argc와 명령형 매개 변수 들을 문자열 배열로 받아 들이는 argv는 결국 Java의 args.length, args로 대체 될 수 있습니다.

[예제]

class ArgTest
{
public static void main (String[] args)
{
for(int i = 0; i < args.length; ++i) //이 프로그램을 실행할때 넘어 오는 아규멘트의 갯수 만큼 루프를 돕니다. >
System.out.println( "args[" + i + "] = " + args[i] );
}
}



[결과1]

java ArgTest test 100 이라고 실행시

args[0] = test
args[1] = 100


[결과2]

java ArgTest "test 100" 이라고 실행시

args[0] = test 100

(java array)자바에서의 배열에 대해 알아 보기로 하겠습니다. ORACLEJAVANEW.KR

자바에서의 배열에 대해 알아 보기로 하겠습니다.  자바에서의 배열을 잘 공부해 두시면 닷넷등에서도 비슷하게 사용 되니 닷넷을 공부 할때 도움이 되실 겁니다.  열공!!


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


 

배열이란? 배열도 객체 이며 ,,, 그래서 Memory Heap에 메모리가 할당 됩니다. 동일한 자료형을 갖는 자료의 배열이며, 배열 선언은 선언할때 크기 명시 안 한다는곳 기억 하시구요..

int[] a; ( 혹은 int a[];)

배열에 Access 하기 위한 첨자는 int 형 이며 long 인 경우에는 Type Casting을 해야 합니다.

배열 생성
a = new int[3];
int[] a = {1, 2, 3};
int[] a; a = new int[] {1, 2, 3};

배열 길이
a.length

배열의 재사용
int[] a = {1, 2, 3};
a = new int[50]; //이때 이전의 배열a의 내용은 버려지며 새로운 메모리 공간이 할당 됩니다.

[예제]

class ArrayTest {
public static void main( String[] args ) {
int[] a = {1, 2, 3}; // int형 배열 선언 및 값 할당
int a2[]; // int형 배열 선언
a2 = new int[] {7, 8, 9, 10, 11}; // 이름 없는 배열 생성
System.arraycopy(a, 0, a2, 3, 2); //배열을 복사(a라는 배열의 0번째를 a2라는 배열의 3번째 인덱스 부터
//2개 복사하라는 의미 입니다. a2는 7,8,9,1,2가 되겟네요...
System.out.println( a.length ); // 3
for(int i = 0; i < a.length; ++i) >
System.out.print( a[i] + " "); // array

// 스트링 객체의 참조값의 배열 생성
String[] as = { "i", "am", "boy", };
String[] as2 = { "me", "to", };

System.out.println("\n" + as.length ); // 3
for(int i = 0; i < as.length; ++i) >
System.out.print( as[i] + " "); //i am boy

as = as2;

System.out.println("\n" + as.length ); // 2
for(int i = 0; i < as.length; ++i) >
System.out.print( as[i] + " " ); //me to
as2 = null;
}
}


[결과]
3
1 2 3
3
i am boy
2
me to



배열의 배열 ( 다차원 배열 ) 

배열은 또 다른 배열을 포함 할 수 있으며 하위 배열은 모두 다른 크기를 가질 수 있습니다. 이를 자바에서는 배열의배열의 형태로 다룰 수 있습니다. 예를들면 1행은 열이 2개, 2행은 열이 3개,,, 이런게 가능하다는 이야기죠^^;;;

[예제]

class MultiArrays {
public static void main(String[] args) {
String[][] 자동차 = {
{"그랜져","소나타","아반테"},
{"매그너스","누비라"},
{"카니발","세피아"}
};

for(int i=0; i<자동차.length; i++) { >
System.out.print(자동차[i].length + ":");
for(int j=0; j<자동차[i].length; j++) { >
System.out.print(자동차[i][j] + " ");
}
System.out.print("\n");
//System.out.println();
}
}
}


[결과]
3:그랜져 소나타 아반테
2:매그너스 누비라
2:카니발 세피아




배열의 예외 

NegativeArraySizeException : 음수크기를 갖는 배열 객체를 만들고자 할때 발생 합니다.
ArrayStoreException : 배열의 자료형과 틀린 자료값을 저장 할려고 하는 경우에 발생 합니다. 예를들면 int형 배열을 선언하고 3.3 이라는 값등을 넣을때 나는 오류 입니다.
ArrayIndexOutOfBoundsException : 배열의 첨자 범위를 벗어 났을때 발생 합니다. A라는 배열을 방2개짜리로 만들면 인덱스는 0, 1을 가질수 있는데 A[2]라는 형태로 사용하는 경우 나는 오류 입니다.
NullPointException : null 값을 갖는 배열 객체 참조 변수를 참조하려고 할때 발생 합니다.

2013년 8월 8일 목요일

오라클자바커뮤니티 강좌, jQuery를 입력 양식 이벤트 change 이론및 실습입니다.

오라클자바커뮤니티 강좌, jQuery를 입력 양식 이벤트 change 이론및 실습입니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



change : 상태가 변경 될 때 이벤트 발생

<html>
<head>
<meta charset="utf-8"/>
<script src="/ajaxjquery/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
 $(document).ready(function() {
  //ALL 체크박스가 변동되면,
  $("#mychk").change(function() {
   if (this.checked) {
    //check_item아래 전체 체크박스를 true
    $("#check_item").children().attr("checked",true);   
   } else {
    $("#check_item").children().attr("checked",false);
   }
  });
 });
</script>
<body>   
 <form id="myform">
  <input type="checkbox" id="mychk"/>
  <label>ALL</label><!-- 여기 체크하면 아래전무 체크되거나 해제됨 -->
  <div id="check_item">
   <input type="checkbox"/>
   <label>A</label>
   <input type="checkbox"/>
   <label>B</label>
   <input type="checkbox"/>
   <label>C</label>
  </div>
 </form>
</body>
</html>

 

2013년 8월 6일 화요일

(오라클자바커뮤니티, 자바교육, 오라클교육)Struts Exception Handler

ㅍException Handler

Action은 검사를 마친 예외들의 전부 혹은 일부를 ActionServlet으로 돌려 보내며 예외들을 처리하게 됩니다.

만약 ActionServlet이 예외를 처리 한다면 서블릿은 예외의 타입이나 상위 타입을 위한 Handler가 등록되었는지 검사 합니다.

ActionMapping 클래스의 지역 Exception Handler를 먼저 확인하고 그 다음 전역(global) 예외들을 검색 합니다.

ExceptionHandler는 exception 요소를 사용하여 다음과 같이 등록 합니다.

<exception
        type = “org.apache.struts.webapps.example.ExpiredPasswordException”
        key = “expired.password”
        path = “/changePWD.jsp” />

만약 ExpiredPasswordException이 발생 한다면 디폴트 핸들러는 특정 키와 특정 경로의 ActionForward를 사용하여 ActionError를 생성 합니다. 그러면 모듈안의 / changePWD.jsp로 포워드 됩니다.

이 순간 JSP는 메시지 리소스 번들로부터 expired.password라는 키에 해당 하는 메시지를 출력 할 것입니다. 만약 path 속성을 생략하게 되면 디폴트 핸들러는 ActionMapping의 input 속성을 이용 합니다.

ExceptionHandler 클래스는 반드시 org.apache.struts.action.ExceptionHandler의 하위 클래스이어야 합니다. 처음 실행되는 메소드는 execute() 메소드 입니다.

Action의 execute() 메소드처럼 작업이 끝나면 ActionForward를 반환하면 됩니다.

org.apache.struts.config.ExceptionConfig 빈은 struts-config.xml에서 exception 요소를 나타내며 특별한 프로퍼티 집합이 필요하면 ExceptionConfig의 서브 클래스를 만든 다음 <set-property> 요소를 사용하여 설정 파일로부터 속성을 초기화 하면 됩니다. 

2013년 8월 2일 금요일

JAVA DataInputStream/DataOutputStream – 예제

import java.io.*;

class InputStreamTest {
  public static void main(String[] args) throws IOException {
    FileInputStream fis=new FileInputStream(args[0]);
    DataInputStream dis=new DataInputStream(fis);
    //BufferedReader dis = new BufferedReader(new InputStreamReader(fis));

    String s;
    while( (s=dis.readLine()) !=null) {  //readLine은 Deprecated 된 Method
                                //ReadLine을 사용하기 위해선 위의 주석된것을 사용
                                //하는것이 바람직하다.
System.out.println(s);
}
    fis.close();
  }
}




===================



import java.io.*;

class OutputStreamTest {
  public static void main(String[] args) throws IOException  {
FileOutputStream fos = new FileOutputStream("test.txt");
DataOutputStream dos=new DataOutputStream(fos);

dos.writeChars("하하하");
//dos.write("홍길동".getBytes()); //Default문자인코디을 따라 byte[]로 만듬
dos.writeUTF("256-1234");
os.writeInt(30);

dos.close();

  }

2013년 8월 1일 목요일

java.util.HashTable 클래스 – 예제

java.util.HashTable 클래스 – 예제 import java.util.*;
public class HashtableTest { 
  public static void main(String[] args) { 
      Hashtable hash = new Hashtable(); 
      hash.put("Name", new String("jclee")); 
      hash.put("Age", new Integer(100)); 

      String name = (String)hash.get("Name"); 
      if (name != null) { 
        System.out.println("Name = " + name); 
      } 
      Integer age = (Integer)hash.get("Age"); 
      if (age != null) { 
        System.out.println("Age = " + age.intValue()); 
      } 
  } 
}  

java.util.HashMap 클래스 – 예제

import java.util.*; 
public class HashMapTest { 
  public static void main(String args[]) { 
    Map map = new HashMap(); 
    Integer hana = new Integer(1); 
    for (int i=0, n = args.length; i<n; i++) { 
      String key = args[i]; 
      Integer freq = (Integer)map.get(key); 
      if (freq == null) { 
        freq = hana; 
      } 
    else { 
        int value = freq.intValue(); 
        freq = new Integer(value + 1); 
      } 
      map.put(key, freq); 
    } 
    System.out.println(map); 
    Map sortedMap = new TreeMap(map); 
    System.out.println(sortedMap); 
  } 


(JAVA OBJECT Serialize,Object Serializing)자바 객체직렬화

객체는 클래스를 통해 팔요한 시기에  생성되며 프로그램이 종료하지 않더라도  소멸된다. 물론 프로그램이 종료하면 사라진다. 실행시간에 유지하고 있던 객체 내부의 정보와 객체 자신의 정보를 어디엔가 기록해 놓고 나중에 필요한 시기에 다시 볼수 있는 방법을 제공하는것이 객체직렬화 이다.
 정보를 연속된 바이트 단위로 기록하는데 이를 객체 직렬화라고 한다.
 직렬화의 과정은 인스턴스 변수의 값을 저장하는 일인데 만약 인스턴스 변수가 다른 객체를 참조하고 있는 참조형의 변수일 경우 그 변수가 가리키는 객체 또한 직렬화 되어야 한다. 이렇게 직렬화는 복잡한 Tree형태로 계속 진행된다.
 (만약 참조형 변수가 가리키는 객체가 Serializable, Externalizable을 구현 하지 않았다면 직렬화가 되지 않으므로 이경우에는 readObject 메소드및 writeObject를 적절히 프로그램 내부에 기록해 줌으로서 제한적이지만 가능한 방법을 제시한다.)
 Static 필드, transient로 명시적으로 직렬화 하지 말라고 선언된 변수등은 직렬화 되지 않는다.
 직렬화를 담당하는 클래스는 java.io.ObjectInputStream, java.io.ObjectOutputStream
 적절히 writeObject, readObejct 메소드를 구현한다.

 객체를 생성한후 그 인스턴스를 a.dat 파일에 쓰는 경우
  FileOutputStream fos = new FileOutputStream(“”a.dat);
  ObjectOutputStream oos = new ObjectOutputStream(fos);
  oos.writeObject(“MyString…”);
  oos.writeObject(new Date());
  oos.flush(); 
 복구하는 방법
  FileInputStream fis = new FileInputStream(“”a.dat);
  ObjectInputStream ois = new ObjectInputStream(fis);
  String myString = (String)ois.readObejct();
  //return형이 Object이므로 타입캐스팅이 필요
  Date d = (Date)ois.readObject();


 
// MySerializationWrite.java
import java.io.*;
public class MySerializationWrite extends MySuperClass implements Serializable {
int i;
public MySerializationWrite(int i) {
this.i = i;
j=i*2;
}
          public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("imsi.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new MySerializationWrite(2000));
oos.close();
System.out.println("객체 쓰기 완료...");
}
}
class MySuperClass implements Serializable {
int j;
}




객체직렬화(Object Serializing) –예제(복원하기)

import java.io.*;

public class MySerializationRead implements Serializable{
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream("imsi.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
MySerializationWrite m = (MySerializationWrite)ois.readObject();
ois.close();

System.out.println("읽은후 MySerializationWrite(i) :" + m.i);
System.out.println("읽은후 MySerializationWrite(j) :" + m.j);
}
}