Etc2007.11.09 10:33

마이플렛폼 교육자료로 받은 것중에....

동적으로 객체 생성 및 삭제 하기...

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

// Create()
function btn_create_OnClick(obj)
{
 Create(           // Component를 동적으로 생성
   "Static", // Component이름
   "Static0", // Component ID
   "Text='sample' Left='100' Top='100' Width='100' Height='100'"); // Property설정
}

// Object()
function btn_object_OnClick(obj)
{
 alert(Object("Static0").Text); // Static0에 해당하는 Component ID찾기
}

// Destroy()
function btn_destroy_OnClick(obj)
{
 Destroy("Static0"); // Static0에 해당하는 Component제거
}
============================================================================================

스크립트 부분입니다...

Posted by is윤군

댓글을 달아 주세요

제2 외국어 영역2007.11.07 09:25

System.out.print() 가 있다..


음... 이것이 무엇인데;; () 안에 값을 넣으면 콘솔창에 값이 찍히는걸까;;


작년 java 교육을 받을 때 강사가 했던 말이 문득 생각이 나는데..


강사 왈 : System.out.print()를 이해하면 객체지향에 대해선 다 이해한거나 다름 없다~ ;;


라는 말을 했다...


뭐 물론..... 그땐  정말 그런줄 알았다.. ㅋ


그렇다고 아니라는 이야기는 아니고..ㅋ


 System.out.print() .. 이놈... 음... 뭐가 닷트(.) 을 한개도 아니고 두개씩 찍었다..


처음 이걸 보면 뭐야 이거... 그냥 이렇게 쓰면;; 찍히니까;; 아무 생각없이 썼을 것이다..



나도 ... 그냥 책에 나와 있으니;; 그냥 썼고... 의식하지 않으면 그냥 넘어갈 수 있는 것이고..


구지 왜 저렇게 되는거라는걸 이해 하지 않아도 된다.. 왜냐면 그냥 쓰면 콘솔창에 찍히고..


다들 아무런 의심없이 그냥 쓰니까.... 그냥... 그냥... 쓰니까..


그래도 알고가면... 괜찮을것 같아서... 잘 알지는 못하지만... 아는데로 적어본다... ㅋㅋ


System 객체는 아마도 ~ 자바 머신이 돌아가고 있는


시스템을 객체화 시켜놓은 클래스 같다라는 생각이 든다..(이건 단순 제생각이에요^^;;ㅋ 믿거나 말거나..ㅋ)


API 에서 System 클래스를 찾아보면..

----------------------------------------------------------------------------------------------------------------

System 클래스에 의해 얻을 수 있는 기능에는 표준 입력, 표준 출력 및 에러 출력 스트림, 외부적으로 정의된 프로퍼티 및 환경

 변수에의 액세스, 파일 및 라이브러리의 로딩 방법, 배열의 일부를 재빠르게 카피하는 유틸리티 메서드가 있습니다.

----------------------------------------------------------------------------------------------------------------

이런문구가 있다... 우리가 오늘 보고자 하는건 많은 기능들중.. 표준출력에 대해서 알아보는거니까..


out 필드에 초점을 맞추려고 한다.. 표준 출력.. 이러면 꼭 메소드 같은데.. out은..


System클래스의 메소드가 아니라 필드(변수)이다...


System.java를 까보면


public final static PrintStream out = nullPrintStream(); 요렇게 System의 상수라는걸 알수 있다..


그러고 out의 타입은 PrintStream ......


(클래스이름.변수이름 이 가능한건 static으로 선언되어 있기때문에.. 클래스 생성할 필요 없이 접근이 가능한건 알고 계시겟죠?)


PrintStream객체는 자바 io에 양대 산맥 InputStream과 OutputStream중 OutputStream의 손자벌 되는 객체이다..


PrintStream의 아부지는 FliterOutputStream이고 FliterOutPutStream의 아무지는 OutputStream 이니까;; 손자 인듯 싶다..


이걸 보아선 PrintStream은.. 출력하는것이다.. (자세한 기능들은 API에서 PrintStream을 쳐보세요..ㅋㅋ)


잠깐 다른길로 빠졌는데..


무튼 out은 PrintStream 타입이므로 (out은 단지 이름일 뿐이고 실질직인 PrintStream을 담는 통이다.. )


out.메서드  이런식으로 하면.. printStream의 메소드가 호출 되는것이다..


String a = "JAVA";


a.toString();  요것이 가능하듯이.. out.print() 가 가능한것이다.. 


다시 말해서 PrintStream이라는 객체를 만들어서 out이라는 곳에 담아 놓것 뿐이다.. 


out.print() 이건 실질적인 PrintStream의 print()의 메소드를 부르는것 뿐이다..


그러고 out에 담겨 잇는 PrintStream의 출력 대상은 FileOutputStream 인데 이 FileOutputStream의 대상파일은


FileDescriptor 이라는 건데 이건..


/*

[운영 체계에서 파일을 사용할 때 각 파일에 대한 정보를 유지하는 기억 장치의 한 영역 또는 그 정보 ]


(네이버 사전참조) 이런 의미가 있다네요.. 요건 OS의 파일기술자와 관련 있는 부분이에요~

*/


이런거랍니다..


주절주절 적은듯 한다..


이제 결론을 내자면...


System.out ==> 요렇게 하면 Sun에서 구현해놓은데로 System객체가 초기화 되면서..


FileDescriptor을 이용 하여 OS의 표준출력으로 출력 타켓을 잡은 PrintStream이 생성이 됩니다.


그러고 나서 print()메소드를 호출하면..


PrintStream이 생성되면서 타켓으로 잡힌 파일(표준출력도 특정한 파일이라고 이해하시면 되요..)에다가


Write를 하게 되는 거죠..


그래서 System.out.print("JAVA"); 이렇게 하면


콘솔창에  JAVA라는 글씨가 찍히게 되는거랍니다..


----------------------------------------------------------------------------------------------------------------

System 초기화 되면서 FileDescriptor를 통해 PrintStream의 타켓을 운영체제 File Descriptor 잡아줌.
그러고 PrintStream에 있는 print 메소드들을 통해서 OS 표준출력에다가 출력 문구들을 쏘아줌.. 
콘솔창에 원하는 문구 출력..ㅋㅋ
----------------------------------------------------------------------------------------------------------------

** PrintStream의 타켓 잡히는 부분..
... 생략..
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
... 생략..

요런식으로 잡힌답니다..

첨에는 쉽게 생각하고 글을 적기 시작했는데;; 결국 FileDescriptor에 막혀서 한시간이 넘게 걸려 버렸네요..

우리 싸부의 도움으로 글을 마무리 지을수 있었어요..ㅋ  (언제나 컨설트 비용은 안주냐면서 ... 구박을 하지만..ㅋㅋ)


별첨~! 도움말.. ㅋㅋ


싸부 이름 --> 허 진 영 ㅋ

허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
사실 모든 입출력(소켓통신을 포함해서)은
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
파일에 쓰는 것과 비슷하지
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
어찌보면 특정 파일에 쓴다라고 보는게 맞을 듯
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
그 파일에 쓰면 해당하는데로 전송되는건데..
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
System.out 은
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
표준 출력이라는 특별한 파일에 쓰기를 하는거야
OS 에서.. 파일에 입출력을 하려고 파이을 열때, 혹은 소켓통신을 위해 소켓을 열때..
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
파일 디스크립터라는 것을 생성하지.
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
뭐 그냥 번호 같은 거야.
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
몇번째.
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
돈 내.
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
건당 만원이잖아
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
여태까지 얼마야.
허진영 ( [진영]없는사람 취급해주세요.. ㅋㅋㅋ ) 님의 말 :
ㅋㅋㅋ

Posted by is윤군

댓글을 달아 주세요

  1. 흐켱

    잘읽었습니다.

    2014.08.01 09:59 [ ADDR : EDIT/ DEL : REPLY ]

제2 외국어 영역2007.11.06 13:23
원문 : http://blog.naver.com/sj99yang/140002147454

JDK 1.5 has some very useful enhancements.  Thanks to Josh Bloch of Sun Microsystems for helpful hints.

Early Access: there is an interactive version of this page here where you can post your code fragments to the community at large.


--------------------------------------------------------------------------------------
1.Autoboxing
Java's distinction between primitive types and their equivalent Object types was painful. Fortunately, with the advent of autoboxing, that will become a fading memory.

        // automatically convert one type to another
Integer integer = 1;
System.out.println(integer);

// mix Integer and ints in the same expression
int i = integer + 3;
System.out.println(i);
 
Sample output:
1
4

--------------------------------------------------------------------------------------

2.Collections
The collections framework is greatly enhanced by generics, which allows collections to be typesafe.

        LinkedList<String>  stringList  = new LinkedList<String>();
stringList.add("of");
stringList.add("course");
stringList.add("my");
stringList.add("horse");

Iterator<String> iterator = stringList.iterator();
   for (String s : stringList)
       System.out.print(s + " ");
 

Sample output:

of course my horse


--------------------------------------------------------------------------------------

3. Enhanced for loop
 

        int array[] = {1, 2, 3, 4};
int sum = 0;
for (int e : array)  // e is short for element; i would be confusing
    sum += e;
System.out.println(sum);
 

Sample output:

10

--------------------------------------------------------------------------------------

4.Enums
Java programmers rejoice with the availability of enums.

        enum Suit { clubs, diamonds, hearts, spades };
for (Suit suit : Suit.values())
    System.out.println(suit);
 

Sample output:

clubs
diamonds
hearts
spades
Here is a more complex example.

        enum Coin {
    penny(1), nickel(5), dime(10), quarter(25);
    Coin(int value) { this.value = value; }
    private final int value;
    public int value() { return value; }
};
for (Iterator<Coin> i = Arrays.asList(Coin.values()).iterator();
     i.hasNext(); ) {
    Coin coin = i.next();
    System.out.print(coin + " ");
}
 

Sample output:

penny nickel dime quarter

--------------------------------------------------------------------------------------

5. Formatted Output
Developers now have the option of using printf type functionality to generated formatted output.  Most of the common C printf formatters are available.

        System.out.printf("name count\n");
String user = "fflintstone";
int total = 123;
System.out.printf("%s is %d years old\n", user, total);

--------------------------------------------------------------------------------------

6. Importing Static Members
No longer is it necessary to write

Math.abs(x)     Math.sqrt(x)    Math.max(a, b)
We can now import once and write it like this:

        import static java.lang.Math.*;

public class Import {
   public static void main(String[] args) {
      double x = 16.0, a = 2.2, b = 3.3;
      System.out.println(abs(x));
      System.out.println(sqrt(x));
      System.out.println(max(a, b));
   }
}
 

Sample output:

16.0
4.0
3.3

--------------------------------------------------------------------------------------

7. Improved Diagnostic Ability
This is one of Calvin Austin's code examples.

Generating Stack traces has been awkward if no console window has been available. Two new APIs, getStackTrace and Thread.getAllStackTraces provide this information programmatically.

        StackTraceElement e[]=Thread.currentThread().getStackTrace();
for (int i=0; i <e.length; i++) {
     System.out.println(e[i]);
    }
System.out.println("\n"+Thread.getAllStackTraces());
Sample output:

java.lang.Thread.dumpThreads(Native Method)java.lang.Thread.getStackTrace(Thread.java:1333)Class2005.main(Class2005.java:5)
{Thread[Reference Handler,10,system]=[Ljava.lang.StackTraceElement;@130c19b,
 Thread[main,5,main]=[Ljava.lang.StackTraceElement;@1f6a7b9,
 Thread[Signal Dispatcher,10,system]=[Ljava.lang.StackTraceElement;@7d772e,
 Thread[Finalizer,8,system]=[Ljava.lang.StackTraceElement;@11b86e7}

--------------------------------------------------------------------------------------

8. Metadata
This is one of Calvin Austin's code examples.

        import java.lang.annotation.*;
import java.lang.reflect.*;
                                                                               
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @interface debug  {
    boolean  devbuild() default false;
    int counter();
}
                                                                               
public class MetaTest {
    final boolean production=true;

    @debug(devbuild=production,counter=1) public void testMethod()  { }
                                                                              
    public static void main(String[] args) {
        MetaTest mt = new MetaTest();
        try {
            Annotation[] a = mt.getClass().getMethod("testMethod").getAnnotations();
            for (int i=0; i<a.length ; i++)  {
                 System.out.println("a["+i+"]="+a[i]+" ");
             }
         } catch(NoSuchMethodException e) {
             System.out.println(e);
         }
     }
 }

--------------------------------------------------------------------------------------

9. Monitoring and Manageability
This is one of Calvin Austin's code examples.

Monitoring and Manageability is a key component of RAS (Reliability, Availability, Serviceability) in the Java platform.  The following code reports the detailed usage of the memory heaps in the Hotspot JVM. This feature isn't quite working yet, as you can see.

        import java.lang.management.*;
import java.util.*;
import javax.management.*;

public class MemTest {
    public static void main(String args[]) {
      List pools =ManagementFactory.getMemoryPoolMBeans();
      for(ListIterator i = pools.listIterator(); i.hasNext();) {
            MemoryPoolMBean p = (MemoryPoolMBean) i.next();
            System.out.println("Memory type="+p.getType()+" Memory usage="+p.getUsage());
        }
    }
}


Sample output:

Memory type=Non-heap memory Memory usage=initSize = 163840, used = 494144, committed = 524288, maxSize = 33554432Memory type=Heap memory Memory usage=initSize = 524288, used = 166440, committed = 524288, maxSize = -1Memory type=Heap memory Memory usage=initSize = 65536, used = 0, committed = 65536, maxSize = -1Memory type=Heap memory Memory usage=initSize = 65536, used = 0, committed = 65536, maxSize = 0Memory type=Heap memory Memory usage=initSize = 1441792, used = 0, committed = 1441792, maxSize = 61997056Memory type=Non-heap memory Memory usage=initSize = 8388608, used = 84360, committed = 8388608, maxSize = 67108864Memory type=Non-heap memory Memory usage=initSize = 8388608, used = 5844808, committed = 8388608, maxSize = 8388608Memory type=Non-heap memory Memory usage=initSize = 12582912, used = 6010560, committed = 12582912, maxSize = 12582912## An unexpected error has been detected by HotSpot Virtual Machine:##  SIGSEGV (0xb) at pc=0x42073770, pid=24776, tid=1073993792## Java VM: Java HotSpot(TM) Client VM (1.5.0-beta-b31 mixed mode)# Problematic frame:# C [libc.so.6+0x73770]  __libc_free+0x70## An error report file with more information is saved as /tmp/hs_err_pid24776.log## If you would like to submit a bug report, please visit:#   http://java.sun.com/webapps/bugreport/crash.jsp#

--------------------------------------------------------------------------------------

10. Variable Arguments
This is just using ellipses as syntactic sugar for arrays.

        public class Test {
  // main() looks different, doesn't it?
  // try changing the runtime arguments above and rerun
  public static void main(String... args) {
     System.out.println(args.length + " arguments");
  }
}
 

Sample output:

3 arguments
Challenge: Here is a program that reads the name of a class from the command line, followed by a method name.  It instantiates an object of the specified type, and invokes the method. For example, if fed a command line like java.util.Date toString, this program will print the current date and time.  Of course, this class only works with methods that don't require arguments.  The challenge is to use ellipses to specify the variable arguments to invoke.

        import java.lang.reflect.Method;

public class Test {
    public static void main(String[] args) {
        try {
            Class klass = Class.forName(args[0]);
            Object instance = klass.newInstance();
            Method method = klass.getDeclaredMethod(args[1], new Class[] {} );
            Object object = method.invoke(instance, new Object[] {} );
            System.out.println(object);
        } catch (java.lang.InstantiationException ie) {
            ie.printStackTrace();
        } catch (java.lang.IllegalAccessException iae) {
            iae.printStackTrace();
        } catch (java.lang.reflect.InvocationTargetException ite) {
            ite.printStackTrace();
        } catch (NoSuchMethodException nsme) {
            nsme.printStackTrace();
        } catch (Exception e) {  // in case method.invoke() throws
            e.printStackTrace();
        }
    }
}
 --------------------------------------------------------------------------------------

11. Word Frequency Counter
This is Josh Bloch's new and improved word frequency counter.

        import java.text.*;
import java.util.*;

public class Freq {
   public static void main(String[] args) {
      Map<String, Integer> m = new TreeMap<String, Integer>();
      for (String word : args) {
          Integer freq = m.get(word);
          m.put(word, (freq == null ? 1 : freq + 1));
      }
      System.out.println(m);
   }
}
--------------------------------------------------------------------------------------
 

12. Grep
This is one of Sun's NIO examples.  This program has a bug: instead of working from a directory name or accepting wildcards, the only way it works is to specify the exact filename that you are looking for... which defeats the purpose.  Perhaps you'd like to figure out the fix?

We have placed files in the JDK 1.5 shared sandbox called /usr/share/fileXX.data, where XX runs from 1 to 10.  These files have privileges that allow them to be read by users, so this example will be able to generate viewable results.  If you attempt read a file for which you do not have privilege, a java.io.FileNotFoundException error will result.

        /* Search a list of files for lines that match a given regular-expression
 * pattern.  Demonstrates NIO mapped byte buffers, charsets, and regular
 * expressions. */

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.util.regex.*;

public class Grep {

    // Charset and decoder for ISO-8859-15
    private static Charset charset = Charset.forName("ISO-8859-15");
    private static CharsetDecoder decoder = charset.newDecoder();

    // Pattern used to parse lines
    private static Pattern linePattern
  = Pattern.compile(".*\r?\n");

    // The input pattern that we're looking for
    private static Pattern pattern;

    // Compile the pattern from the command line
    //
    private static void compile(String pat) {
    try {
      pattern = Pattern.compile(pat);
    } catch (PatternSyntaxException x) {
       System.err.println(x.getMessage());
        System.exit(1);
    }
    }

    // Use the linePattern to break the given CharBuffer into lines, applying
    // the input pattern to each line to see if we have a match
    //
    private static void grep(File f, CharBuffer cb) {
    Matcher lm = linePattern.matcher(cb);   // Line matcher
    Matcher pm = null;          // Pattern matcher
 int lines = 0;
 while (lm.find()) {
        lines++;
       CharSequence cs = lm.group();   // The current line
        if (pm == null)
        pm = pattern.matcher(cs);
      else
       pm.reset(cs);
      if (pm.find())
     System.out.print(f + ":" + lines + ":" + cs);
      if (lm.end() == cb.limit())
        break;
 }
    }

    // Search for occurrences of the input pattern in the given file
    //
    private static void grep(File f) throws IOException {

    // Open the file and then get a channel from the stream
    FileInputStream fis = new FileInputStream(f);
  FileChannel fc = fis.getChannel();

    // Get the file's size and then map it into memory
 int sz = (int)fc.size();
   MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);

   // Decode the file into a char buffer
  CharBuffer cb = decoder.decode(bb);

   // Perform the search
  grep(f, cb);

  // Close the channel and the stream
    fc.close();
    }

    public static void main(String[] args) {
    if (args.length < 2) {
      System.err.println("Usage: java Grep pattern file...");
      return;
    }
  compile(args[0]);
  for (int i = 1; i < args.length; i++) {
     File f = new File(args[i]);
        try {
      grep(f);
       } catch (IOException x) {
      System.err.println(f + ": " + x);
        }
  }
    }
}
 

Sample output

This is file #1
This is file #2
This is file #3
This is file #4
This is file #5
This is file #6
This is file #7
This is file #8
This is file #9
This is file #10
Posted by is윤군

댓글을 달아 주세요