class HelloJava { System.out.println(" 안녕하세요, 자바"); 안녕하세요, 자바 int table[][] = { { 1, 2, 3, 4, { 5, 6, 7, 8, { 9, 10, 11, 12 ; System.out.println(table.length); 3 int num = 3; if (num == 1) System.out.println("Good Morning, Java"); else if (num == 2) System.out.println("Good Afternoon, Java"); else if (num == 3) else System.out.println("Good Evening, Java"); System.out.println("Hello, Java"); System.out.println("Done.");
Good Evening, Java Done. 배열의 3번째항목인덱스는 2 이고, 7번째항목인덱스는 6 입니다. 그러므로다음과같이프로그램을 작성하면됩니다. int arr[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ; int total = 0; for (int cnt = 2; cnt < 7; cnt++) total += arr[cnt]; System.out.println(total); 50 int arr[] = { 435, 88, 67, 32, 88, -1, 6, 12, 7, 8, 45, 11 ; for (int cnt = 2; cnt < 7; cnt++) { 67 32 88 if (arr[cnt] == -1) break; System.out.println(arr[cnt]);
int total = 0; for (String str : args) { int num = Integer.parseInt(str); total += num; System.out.println(total); int total = 0; for (String str : args) { int num = Integer.parseInt(str); total += num; System.out.println(total); catch (java.lang.numberformatexception e) { System.out.println(" 명령행파라미터로는정수만입력할수있습니다.");
-37의내부표현을출력하는프로그램 class Answer1 { public static void main (String args[]) { String str; str = Integer.toBinaryString(-37); System.out.println(str); 11111111111111111111111111011011-5의내부표현을출력하는프로그램 class Answer2 { public static void main (String args[]) { String str; str = Integer.toBinaryString(-5); System.out.println(str); -5의내부표현을출력하는프로그램 11111111111111111111111111111011 public static void main (String args[]) { double num1 = -12.375, num2 = 12.375; long num3 = Double.doubleToRawLongBits(num1);
long num4 = Double.doubleToRawLongBits(num2); String str1 = Long.toBinaryString(num3); String str2 = Long.toBinaryString(num3); System.out.println(str1); System.out.println(str2); 1100000000101000110000000000000000000000000000000000000000000000 1100000000101000110000000000000000000000000000000000000000000000 public static void main (String args[]) { for (char ch = 12593; ch < 12687; ch++) System.out.println(ch); ㄱ부터 까지의한글자음, 모음이출력되는데, 이문자들을 Unicode 홈페이지의 12593(313116) 부터 12686(318E 16 ) 에해당하는문자들과비교하면해당문자들과일치함을확인할수있습니다.
class SignExample1 { [ 컴파일결과] short num1 = 100; short num2 = + num1; System.out.println(num2); class ConditionalOrExample1 { int num1 = 0, num2 = 0; if (++num1 > 0 ++num2 > 0) System.out.println("num1이 0보다크거나 num2가 0 보다큽니다."); System.out.println("num1 = " + num1); System.out.println("num2 = " + num2); num1이 0보다크거나 num2가 0 보다큽니다. num1 = 1 num2 = 1
StringBuffer obj; // obj = new StringBuffer("Hey, Java"); // obj.replace(1, 3, "i"); // System.out.println(obj); 객체를담을변수선언 객체를생성해서변수에대입 객체의메서드호출 Hi, Java GoodsStock obj; obj = new GoodsStock(); obj.goodscode = "52135"; obj.stocknum = 200; System.out.println(" 상품코드:" + obj.goodscode); System.out.println(" 재고수량:" + obj.stocknum); obj.addstock(1000); System.out.println(" 상품코드:" + obj.goodscode); System.out.println(" 재고수량:" + obj.stocknum); obj.subtractstock(1); System.out.println(" 상품코드:" + obj.goodscode); System.out.println(" 재고수량:" + obj.stocknum); 상품코드 :52135 재고수량 :200 상품코드 :52135 재고수량 :1200 상품코드 :52135 재고수량 :1199 // 재고정보클래스 class GoodsStock { String goodscode; int stocknum; GoodsStock(String code, int num) {
// goodscode = code; if (num < 0) else stocknum = 0; stocknum = num; void addstock(int amount) { stocknum += amount; int subtractstock(int amount) { if (stocknum < amount) return 0; stocknum -= amount; return amount; 재고정보클래스의객체를생성해서필드값을출력하는프로그램 GoodsStock obj; obj = new GoodsStock("12345", -50); System.out.println(" 상품코드:" + obj.goodscode); System.out.println(" 재고수량:" + obj.stocknum); 상품코드 :12345 재고수량 :0 Account obj1 = new Account("777-777-7777", " 연놀부", 10000000); System.out.println(obj1.balance); Account obj2 = new Account("000-000-000000", " 연흥부", -100000); System.out.println(obj2.balance); catch (Exception e) { String msg = e.getmessage(); System.out.println(msg);
* Account 객체를생성하는명령문을 try 됩니다. 문만두기만하면프로그램은위와다른방식으로작성해도 10000000 객체를생성할수없습니다. Account 클래스([ 예제 6-1]), CheckingAccount 클래스([ 예제 6-4]) 와함께실행했을때와똑같은결 과가나옵니다. 지불액 :47000 잔액 :53000 [ 컴파일결과] 다음과같이정상적으로컴파일됩니다. 하나의배열을두개의배열변수에대입해도배열자체는하나이기때문에 꾼두번째배열항목의값을다음과같이 1 2 3 1 7 3 arr2 arr1 변수를가지고출력해서볼수있습니다. 변수를이용해서바
class ArrayVarTest2 { int arr[] = { 1, 2, 3, 4, 5 ; printarray(arr); arr = null; printarray(arr); static void printarray(int arr[]) { 1 2 3 4 5 if (arr == null) return; for (int num : arr) System.out.println(num); enum Day { MONDAY(" 월"), TUESDAY(" 화"), WEDNESDAY(" 수"), THURSDAY(" 목"), FRIDAY(" 금"), SATURDAY(" 토 "), SUNDAY(" 일"); final private String name; Day(String name) { this.name = name; String value() { return name; import geometry.shape.square; Square obj = new Square(100, 200, 15); System.out.println("(" + obj.getx(0) + ", " + obj.gety(0) + ")"); System.out.println("(" + obj.getx(1) + ", " + obj.gety(1) + ")");
(100, 200) (115, 200) (115, 215) (100, 215) System.out.println("(" + obj.getx(2) + ", " + obj.gety(2) + ")"); System.out.println("(" + obj.getx(3) + ", " + obj.gety(3) + ")"); 뇌를자극하는 C 뇌를자극하는하드웨어 뇌를자극하는하드웨어입문 이결과를통해알수있는것은 replace, concat 메소드를이용하여문자열을조작해도원래 String 객체가가지고있던문자열의내용은바뀌지않는다는것입니다. 382 페이지의본문에서이야기하고 있듯이이두메소드는 String 객체가가지고있는문자열의내용을바꾸는것이아니라, 바뀐내용 을갖는새로운 String 객체를생성하기때문입니다. 0 13 0 13 37 13 13 13 어떤돌이내얼굴을물끄러미쳐다보는것만 어떤꽃이내얼굴을물끄러미치어다보는것만 만것는보다어치미러끄물을굴얼내이꽃떤어 import java.util.stringtokenizer;
StringTokenizer stok = new StringTokenizer(" 고슴도치, 앵무새 토끼", ", "); while (stok.hasmoretokens()) { 고슴도치 앵무새 토끼 String str = stok.nexttoken(); System.out.println(str); import java.util.*; import java.text.*; GregorianCalendar calendar = new GregorianCalendar(); printdatetime(calendar, " 뉴욕", "America/New_York"); printdatetime(calendar, " 홍콩", "Asia/Hong_Kong"); printdatetime(calendar, " 파리", "Europe/Paris"); static void printdatetime(gregoriancalendar calendar, String location, String timezone) { SimpleDateFormat dateformat = new SimpleDateFormat(" yyyy/mm/dd (E) aa hh:mm"); dateformat.settimezone(timezone.gettimezone(timezone)); String str = dateformat.format(calendar.gettime()); System.out.println(location + str); 뉴욕 2006/09/14 ( 목) 오전 12:45 홍콩 2006/09/14 ( 목) 오후 12:45 파리 2006/09/14 ( 목) 오전 06:45 * 위결과는우리나라시간으로 2006년 9월 14일오후 1시 45분에이프로그램을실행했을때의결과 입니다. import java.util.*;
Random random = new Random(); int headnum = 0; for (int cnt = 0; cnt < 100; cnt ++) { boolean ishead = random.nextboolean(); if (ishead) headnum++; System.out.println(" 앞면: " + headnum); System.out.println(" 뒷면: " + (100 - headnum)); 이프로그램을실행할때마다다른결과가나옵니다. 그러니까독자여러분의컴퓨터에서이프로그램을실행했을때는위와다른결과가나올수있습니다. import java.io.*; FileReader reader = null; reader = new FileReader("poem.txt"); while (true) { char arr[] = new char[80]; int num = reader.read(arr); if (num < 0) break; System.out.print(new String(arr)); catch (FileNotFoundException fnfe) { System.out.println(" 파일이존재하지않습니다.");
catch (IOException ioe) { System.out.println(" 파일을읽을수없습니다."); finally { reader.close(); catch (Exception e) { * 이프로그램의실행결과는 [ 예제 10-3] 과동일합니다. (p.436 [ 그림 10-5] 참조) FileDump 프로그램([ 예제 10-6]) 을작성했던디렉토리에서다음과같이실행하면됩니다. 또는 [ 예제 10-7] 의결과물인 output.dat 파일이있는디렉토리에서다음과같이실행해도됩니다. ( 부록참조) import java.io.*;
import java.util.stringtokenizer; System.out.println("*** 프로그램시작 ***"); ObjectOutputStream out = null; out = new ObjectOutputStream(new FileOutputStream("output.dat")); System.out.println(" 파일을열었습니다."); out.writeobject(new StringTokenizer(" 사과 딸기 배", " ")); System.out.println(" 파일로 StringTokenizer 객체를출력했습니다."); catch (IOException ioe) { System.out.println(" 파일로출력할수없습니다."); finally { out.close(); System.out.println(" 파일을닫았습니다."); catch (Exception e) { System.out.println("*** 프로그램끝 ***"); * 프로그램의어느곳에서에러가발생하는지알기위해일시적으로써놓은명령문은위에서처럼들 여쓰기를하지않고첫번째컬럼부터써두면, 나중에찾아서제거할때편리합니다. 이실행결과를통해알수있는것은 파일을열었습니다. 라는메시지를출력하는명령문과 파일 로 StringTokenizer 객체를출력했습니다." 라는메시지를출력하는명령문사이에서에러가발생하여 catch 블록으로프로그램실행흐름의제어가넘어갔다는것입니다. 두메시지출력명령문사이에 있는명령문은 다. writeobject 메소드호출문이므로그부분에서에러가발생했다는것을알수있습니
// 주간주가추이를파일에저장하는프로그램 import java.io.*; import java.util.gregoriancalendar; class Answer1 { // ObjectOutputStream out = null; out = new ObjectOutputStream(new FileOutputStream("output.dat")); out.writeobject(new GregorianCalendar(2006, 3, 10)); out.writefloat(1398.29f); out.writeobject(new GregorianCalendar(2006, 3, 11)); out.writefloat(1386.08f); out.writeobject(new GregorianCalendar(2006, 3, 12)); out.writefloat(1383.59f); out.writeobject(new GregorianCalendar(2006, 3, 13)); out.writefloat(1405.72f); out.writeobject(new GregorianCalendar(2006, 3, 14)); out.writefloat(1432.72f); catch (IOException ioe) { System.out.println(" 파일로출력할수없습니다."); finally { out.close(); catch (Exception e) { 주간주가추이를파일로부터읽어오는프로그램 import java.io.*; import java.util.gregoriancalendar; import java.util.calendar; class Answer2 { ObjectInputStream in = null; in = new ObjectInputStream(new FileInputStream("output.dat")); while (true) { GregorianCalendar calendar = (GregorianCalendar) in.readobject(); int year = calendar.get(calendar.year); int month = calendar.get(calendar.month) + 1; int date = calendar.get(calendar.date);
float kospi = in.readfloat(); System.out.println(year + "/" + month + "/" + date + " " + kospi); catch (FileNotFoundException fnfe) { System.out.println(" 파일이존재하지않습니다."); catch (EOFException ioe) { System.out.println(" 끝"); catch (IOException ioe) { System.out.println(" 파일을읽을수없습니다."); catch (ClassNotFoundException cnfe) { System.out.println(" 해당클래스가존재하지않습니다."); finally { in.close(); catch (Exception e) { 주간주가추이를파일에저장하는프로그램(Answer1) 을실행하면 output.dat 파일이생성되고, 주간 주가추이를파일로부터읽어오는프로그램(Answer2) 을실행하면그파일에있는데이터가다음과같 이출력됩니다. import java.io.*; class ReaderExample1 {
BufferedReader reader = null; reader = new BufferedReader(new FileReader("poem.txt")); while (true) { int data = reader.read(); if (data == -1) break; char ch = (char) data; System.out.print(ch); catch (FileNotFoundException fnfe) { System.out.println(" 파일이존재하지않습니다."); catch (IOException ioe) { System.out.println(" 파일을읽을수없습니다."); finally { reader.close(); catch (Exception e) { * 이프로그램의실행방법과실행결과는 [ 예제 10-3] 과동일합니다. (p.436 [ 그림 10-5] 참조) import java.io.*; class OutputStreamExample1 { BufferedOutputStream out = null; out = new BufferedOutputStream(new FileOutputStream("output.dat")); byte arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ; for (int cnt = 0; cnt < arr.length; cnt++) out.write(arr[cnt]); catch (IOException ioe) { System.out.println(" 파일로출력할수없습니다.");
finally { out.close(); catch (Exception e) { * 이프로그램의실행방법과실행결과는 [ 예제 10-5] 와동일합니다. (p.441 [ 그림 10-7] 참조) 복제가능클래스 Calendar GregorianCalendar TimeZone DataFormat SimpleDataFormat Date String StringBuilder StringBuffer StringTokenizer Math Random FileReader FileWriter FileInputStream FileOutputStream DataInputStream DataOutputStream 복제불가능클래스 ObjectInputStream ObjectOutputStream BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream LineNumberReader PrintWriter PrintStream File class WrapperExample2 { int total = 0; for (int cnt = 0; cnt < args.length; cnt++) { Integer obj = new Integer(args[cnt]); total += obj.intvalue(); System.out.println(total); catch (NumberFormatException e) { System.out.println(" 잘못된숫자포맷입니다.");
import java.util.*; LinkedList<String> list = new LinkedList<String>(); list.add(" 머루"); list.add(" 사과"); list.add(" 앵두"); list.add(" 자두"); list.add(" 사과"); int index1 = list.indexof(" 사과"); int index2 = list.lastindexof(" 사과"); System.out.println(" 첫번째사과: " + index1); System.out.println(" 마지막사과: " + index2); 첫번째사과 : 1 마지막사과 : 4 먼저장바구니에들어가는상품항목클래스를다음과같이선언해야합니다. // 장바구니상품항목클래스 class CartItem { String code; // 상품코드 int num; // 수량 int price; // 단가
CartItem(String code, int num, int price) { this.code = code; this.num = num; this.price = price; 위와같이선언된클래스를타입파라미터로삼아서리스트를만들면그리스트를장바구니로사용할 수있습니다. 그런데인터넷쇼핌몰의장바구니에는추가와삭제가빈번히일어날수있으므로리스 트클래스로는 ArrayList 클래스보다 LinkedList 클래스를사욯하는것이더적합합니다. 다음은그 런식으로장바구니를만들어서항목을추가하고삭제하는예를보여주는프로그램입니다. // 장바구니를리스트자료구조로표현하는예를보여주는프로그램 import java.util.*; class ShoppingProgram { * CartItem 해도됩니다. LinkedList<CartItem> list = new LinkedList<CartItem>(); list.add(new CartItem("50001", 2, 2000)); // list.add(new CartItem("73505", 1, 7000)); // 장바구니에 세개의항목을 list.add(new CartItem("88012", 3, 25000)); // 추가합니다. list.remove(1); // 장바구니에서두번째항목을제거합니다. System.out.println(" 상품코드수량가격"); System.out.println("-----------------------"); for (CartItem item : list) System.out.printf("%5s %8d %8d %n", item.code, item.num, item.price); 클래스를이욯하여리스트를만드는것을보여주기만하면프로그램은위와다르게작성 상품코드수량가격 ----------------------- 50001 2 2000 88012 3 25000 import java.util.*; LinkedList<Integer> stack = new LinkedList<Integer>(); stack.addfirst(new Integer(12)); stack.addfirst(new Integer(59));
stack.addfirst(new Integer(7)); while(!stack.isempty()) { 7 59 12 Integer num = stack.removefirst(); System.out.println(num); 먼저전화번호와주소필드를갖는다음과같은클래스를선언해야합니다. // 연락처클래스 class ContactInfo { String phoneno; // 전화번호 String address; // 주소 ContactInfo(String phoneno, String address) { this.phoneno = phoneno; this.address = address; 그리고나서이름(String 타입) 을키로삼고, 위클래스의객체를데이터로삼는해쉬테이블을만들 어서사용하면됩니다. 다음은그런예를보여주는프로그램입니다. // 이름을검색하는프로그램 import java.util.hashmap; HashMap<String, ContactInfo> hashtable = new HashMap<String, ContactInfo>(); hashtable.put(" 홍길동", new ContactInfo(" 산속오두막", "010-0000-0000")); hashtable.put(" 연흥부", new ContactInfo(" 강남", "02-300-0000")); hashtable.put(" 연놀부", new ContactInfo(" 청담동", "02-500-0000")); ContactInfo obj = hashtable.get(" 연놀부"); System.out.println(" 연놀부의연락처"); System.out.println(" 전화번호: " + obj.phoneno); System.out.println(" 주소: " + obj.address);
연놀부의연락처 전화번호: 청담동 주소 : 02-500-0000 [ 컴파일결과] ContactInfo 라는이름의로컬이너클래스를포함한 [ 예제 16-13] 을컴파일해보면다음과같은두개 의클래스파일이생성됩니다. 이중에서 NestedClassExample7$1ContactInfo.class라는이름의파일이로컬이너클래스인 ContactInfo 에해당하는클래스파일인데, 이이름은인클로징클래스의이름뒤에 $ 와 1이라는숫자 를붙이고, 그뒤에로컬이너클래스의이름을붙이고,.class 라는확장자를붙인이름입니다. 로컬 이너클래스의이름이이렇게인클로징클래스와이너클래스이름외에숫자를포함하는이유는하 나의인클로징클래스안에똑같은이름의로컬이너클래스가여러개있을수있기때문입니다. 예 를들어 NestedClassExample7라는클래스안에 ContactInfo라는이름의로컬이너클래스가하나더 있다면, 그클래스의클래스파일은 NestedClassExample7$2ContactInfo.class라는이름으로생길것 입니다. [ 컴파일결과] [ 예제 16-7] 을컴파일하면다음과같이 NestedClassExample10.class라는이름의클래스파일과 NestedClassExample10$1.class 라는이름의클래스파일들이생성되는데이중에서후자가로컬이너 클래스의클래스파일입니다.
이름없는이너클래스의경우에는이렇게인클로징클래스이름뒤에 $ 와숫자를붙이고, 그뒤에.class 라는확장자를붙인이름으로클래스파일이생성됩니다. 이숫자는같은클래스안에이름없 는이너클래스가여러개있을경우이를구분하기위해붙여지는숫자입니다. [ 예제 17-22] 의두 Rectangle 클래스는 getarea 메소드가있고없고의차이는있지만버전번호가같 기때문에어느 Rectangle 클래스를가지고 [ 예제 17-22] 의직렬화프로그램을실행하든, 역직렬화 프로그램을실행하든에러없이의도했던결과가출력됩니다. // main 메소드를포함하는클래스 class MultithreadExample3 { Thread thread = new Thread(new SmallLetters()); // thread.start(); // 쓰레드를시작 char arr[] = { ' ᄀ', ' ᄂ', ' ᄃ', ' ᄅ', ' ᄆ', ' ᄇ', ' ᄉ', for (char ch : arr) { ' ᄋ', ' ᄌ', ' ᄎ', ' ᄏ', ' ᄐ', ' ᄑ', ' ᄒ' ; System.out.print(ch); Thread.sleep(500); catch (InterruptedException e) { // 영문소문자를출력하는클래스 System.out.println(e.getMessage()); 쓰레드를생성
class SmallLetters implements Runnable { public void run() { for (char ch = 'a'; ch <= 'z'; ch++) { System.out.print(ch); Thread.sleep(700); catch (InterruptedException e) { System.out.println(e.getMessage()); 위와같이수정된프로그램을실행하면 Thread.sleep 자음과영문소문자가좀더고르게섞여서출력됩니다. 메소드호출로벌어진시간간격으로인해한글 * 이프로그램은멀티스레드프로그램이기때문에독자여러분의컴퓨터에서이프로그램을실행했을 때는위와똑같은결과가나오지않을수도있습니다. import java.awt.*; import javax.swing.*; class WindowExample1 { public static void main(string[] args) { JFrame frame = new JFrame(" 헬로자바프로그램"); frame.setlocation(500, 400); frame.setpreferredsize(new Dimension(300, 200)); Container contentpane = frame.getcontentpane(); JLabel label = new JLabel(" 헬로, 자바", SwingConstants.CENTER); contentpane.add(label); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); 다음과같은윈도우가모니터화면중앙에나타납니다.
윈도우의크기를늘이거나줄이면오른쪽버튼의폭과아래쪽라벨의높이를바뀌지않고, 는텍스트상자의크기는윈도우크기에따라서늘어들거나줄어듭니다. 중앙에있 // 윈도우로작동하는덧셈프로그램 import javax.swing.*; import java.awt.*; public static void main(string[] args) { JFrame frame = new JFrame(" 덧셈프로그램"); frame.setlocation(500, 400); Container contentpane = frame.getcontentpane(); JPanel pane1 = new JPanel();
// JPanel pane2 = new JPanel(); contentpane.add(pane1, BorderLayout.CENTER); contentpane.add(pane2, BorderLayout.SOUTH); pane1.setlayout(new FlowLayout()); JTextField text1 = new JTextField(5); JTextField text2 = new JTextField(5); JTextField text3 = new JTextField(5); pane1.add(text1); pane1.add(new JLabel("+")); pane1.add(text2); pane1.add(new JLabel("=")); pane1.add(text3); pane2.setlayout(new FlowLayout()); JButton button1 = new JButton(" 확인"); JButton button2 = new JButton(" 취소"); pane2.add(button1); pane2.add(button2); frame.setdefaultcloseoperation(jframe.exit_on_close); ConfirmButtonActionListener actionlistener1 = new ConfirmButtonActionListener(text1, text2, text3); CancelButtonActionListener actionlistener2 = new CancelButtonActionListener(text1, text2, text3); button1.addactionlistener(actionlistener1); button2.addactionlistener(actionlistener2); frame.pack(); frame.setvisible(true); 확인버튼을처리하는이벤트리스너크래스 import javax.swing.*; import java.awt.event.*; class ConfirmButtonActionListener implements ActionListener { JTextField text1, text2, text3; ConfirmButtonActionListener(JTextField text1, JTextField text2, JTextField text3) { this.text1 = text1; this.text2 = text2; this.text3 = text3; public void actionperformed(actionevent e) { int num1 = Integer.parseInt(text1.getText()); int num2 = Integer.parseInt(text2.getText()); int sum = num1 + num2; text3.settext(sum+"");
// 취소버튼을처리하는이벤트리스너크래스 import javax.swing.*; import java.awt.event.*; class CancelButtonActionListener implements ActionListener { JTextField text1, text2, text3; CancelButtonActionListener(JTextField text1, JTextField text2, JTextField text3) { this.text1 = text1; this.text2 = text2; this.text3 = text3; public void actionperformed(actionevent e) { text1.settext(""); text2.settext(""); text3.settext(""); * 이프로그램을좀더완벽하게만들려면세번째텍스트상자에키보드입력이안되도록만들어야 합니다. 그런일은이프로그램의 main 메소드에서윈도우를띄우는명령문전에다음과같은명령문 을써넣음으로써할수있습니다. text3.seteditable(false); 자동차그림이있는패널클래스만다음과같이수정하면됩니다. import javax.swing.*; import java.awt.*; class CarDrawingPanel extends JPanel { public void paint(graphics g) { g.setcolor(color.red); g.fillrect(100, 110, 200, 40); g.fillrect(150, 70, 100, 40); g.setcolor(color.black); g.filloval(125, 150, 30, 30); g.filloval(245, 150, 30, 30); g.drawline(50, 180, 350, 180);
[ 예제 19-11] 의 DrawingPanel의 paint 메소드마지막부분에 System.out.println("paint 메서드가호 출되었습니다."); 라는명령문을넣으면다음과같은일이일어날때마다 "paint 메서드가호출되었 습니다." 라는메시지가출력됩니다. - 윈도우가처음뜰때 - 그래프그리기버튼을눌렀을때 (repaint 메소드에의해간접적으로호출되는경우임) - 윈도우( 정확히말하면 DrawingPanel 부분) 의일부또는전부가가려졌다가다시나타날때 - - - - 윈도우가아이콘화되었다가다시나타날때 윈도우가최대화될때 윈도우가최대화되었다가다시원래의크기로돌아올때 윈도우의크기를크게또는작게변경할때 mysql 프로그램을이용하여 malldb 데이터베이스로들어간후다음과같은 create 문과 insert 문을 이용하여테이블을생성하고데이터를입력하면됩니다.
데이터가올바르게입력되었는지는다음과같은 select 문을이용하여확인할수있습니다. 실형결과는다음과같습니다.
mysql 프로그램을이용하여문제의 select 문을실행하면다음과같은결과가출력됩니다. import java.sql.*; Connection conn = null; Statement stmt = null; Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/malldb", stmt = conn.createstatement(); ResultSet rs = stmt.executequery( "root", ""); "select goodsinfo.code, name, num from goodsinfo, stockinfo " + "where goodsinfo.code = stockinfo.code;"); System.out.println(" 상품코드상품명 \t 재고수량"); System.out.println("----------------------------------------------"); while (rs.next()) { String code = rs.getstring("goodsinfo.code"); String name = rs.getstring("name"); int num = rs.getint("num"); System.out.printf("%8s %s \t%8d %n", code, tounicode(name), num); catch (ClassNotFoundException cnfe) { System.out.println(" 해당클래스를찾을수없습니다." + cnfe.getmessage()); catch (SQLException se) { System.out.println(se.getMessage()); finally { stmt.close(); catch (Exception ignored) { conn.close(); catch (Exception ignored) { private static String tounicode(string str) { // ISO-8859-1 문자열 -> Unicode 문자열 byte[] b = str.getbytes("iso-8859-1"); return new String(b); catch (java.io.unsupportedencodingexception uee) { System.out.println(uee.getMessage()); return null;
[ 예제 21-3] 14행의 executequery 문을다음과같이수정하면됩니다. ResultSet rs = stmt.executequery( "select code, name, price, maker + from goodsinfo where name like '" + tolatin1(args[0]) + "%';"); import java.sql.*; class JDBCExample4 { if (args.length!= 4) { System.out.println("Usage: java JDBCExample4 상품코드상품명가격제조사"); return; Connection conn = null; Statement stmt1 = null; Statement stmt2 = null; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/malldb",
stmt1 = conn.createstatement(); "root", ""); ResultSet rs = stmt1.executequery("select code from goodsinfo where code='" stmt2 = conn.createstatement(); if (rs.next()) { else { + tolatin1(args[0]) + "';"); int rownum = stmt2.executeupdate("update goodsinfo set " + "name:='" + tolatin1(args[1]) + "', " + "price:='" + tolatin1(args[2]) + "', " + "maker:='" + tolatin1(args[3]) + "' " + "where code = '" + tolatin1(args[0]) + "';"); System.out.println(rowNum + " 행이수정되었습니다."); int rownum = stmt2.executeupdate( "insert into goodsinfo (code, name, price, maker) values('" + tolatin1(args[0]) + "', '" + tolatin1(args[1]) + "', " + tolatin1(args[2]) + ", '" + tolatin1(args[3]) + "');"); System.out.println(rowNum + " 행이추가되었습니다."); catch (ClassNotFoundException cnfe) { System.out.println(" 해당클래스를찾을수없습니다." + cnfe.getmessage()); catch (SQLException se) { System.out.println(se.getMessage()); finally { stmt1.close(); catch (Exception ignored) { stmt2.close(); catch (Exception ignored) { conn.close(); catch (Exception ignored) {
private static String tolatin1(string str) { // Unicode 문자열 -> ISO-8859-1 문자열 byte[] b = str.getbytes(); return new String(b, "ISO-8859-1"); catch (java.io.unsupportedencodingexception uee) { System.out.println(uee.getMessage()); return null; 이프로그램으로기존에있던데이터와똑같은상품코드의데이터를입력했을때의결과는다음과 같습니다.