[Java] Java 학습 노트 총화 (二)

16541 단어 자바 학습
2013-07-22
1. AWT 와 Swing 의 차이 점, look 설정 방법 and feel?어떻게 JFrame 에 구성 요 소 를 추가 합 니까?
 
답: AWT 추상 창 구성 요소 패키지 입 니 다. java 그래 픽 프로그램 을 만 드 는 데 사용 되 는 최초의 개발 패키지.Swing 해결 하기 위해 서 야. AWT 존재 하 는 문제점 을 새롭게 개발 한 가방 AWT 기초 적
 
설정 룩 and feel:
try{     UIManager. setLookAndFeel (외관 이름);   }catch(Exception e){}
방법 setLookAndFeel 의 일부 인자:
UIManager.getCrossPlatformLookAndFeelClassName()
-- 자바 의 인터페이스 외관, 모든 플랫폼 이 일치 합 니 다.
UIManager.getSystemLookAndFeelClassName()
-- 현재 플랫폼 으로 지 정 된 인터페이스 외관. 32 비트 윈도 플랫폼 에서 Windows 인터페이스 모양 만 들 기; Mac 에서 OS 플랫폼, Mac OS 인터페이스 외관; Sun 플랫폼 에서 CDE / Motif 인터페이스 모양 입 니 다.
"javax.swing.plaf.metal.MetalLookAndFeel"
-- 자바 로 지 정 된 인터페이스 외관 은 방법 UIManager. getCrossPlatformLookAndFeelClassName () 의 반환 값 입 니 다.
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
-- 윈도 우즈 로 지 정 된 인터페이스 외관 은 윈도 플랫폼 에서 만 작 동 합 니 다.
"com.sun.java.swing.plaf.motif.MotifLookAndFeel"
-- CDE / Motif 로 지 정 된 인터페이스 외관 은 모든 플랫폼 에서 역할 을 할 수 있 습 니 다.
"javax.swing.plaf.mac.MacLookAndFeel"
-- 맥 으로 지정 OS 의 인터페이스 외관, Mac 에서 만 OS 플랫폼 이 작 동 합 니 다.
 
 Swing 프로그램 용 JFrame 대상 이 창 을 만 들 었 습 니 다. JFrame 클래스 는 AWT Frame 클래스 의 키 클래스 입 니 다. 스윙 도 넣 었 습 니 다. 고유 한 특성. Frame 사용 이 매우 비슷 합 니 다. 유일한 차이 점 은 JFrame 에 구성 요 소 를 추가 할 수 없다 는 것 입 니 다. JFrame 에 구성 요 소 를 추가 하거나 추가 할 수 있 습 니 다. 콘 텐 츠 패 널 (콘 텐 츠 패 널) 새로운 콘 텐 츠 제공 pane (내용 패 널).
JFrame 에 구성 요 소 를 추가 하 는 방법 은 두 가지 가 있 습 니 다. 1) getContentPane () 방법 은 JFrame 의 콘 텐 츠 패 널 을 얻 고 구성 요소: frame 을 추가 합 니 다. getContentPane (). add (childComponent) 2) 는 Jpanel 이나 JDesktop Pane 같은 중간 용 기 를 만 들 고 구성 요 소 를 용기 에 추가 하 며 setContentPane () 방법 으로 이 용 기 를 JFrame 의 콘 텐 츠 패 널 로 설정 합 니 다: JPanel contentPane = new JPanel ();... / / 다른 구성 요 소 를 Jpanel 에 추가 합 니 다. frame. set ContentPane (contentPane); / / contentPane 대상 을 frame 의 콘 텐 츠 패 널 로 설정 합 니 다. 
 
2. 자주 사용 하 는 레이아웃 관리자 와 그 특징 을 말 합 니 다.
 
답: 자주 사용 하 는 레이아웃 관리자 와 그 특징:
가방 유형 특징  java.awt ---CardLayout--- 구성 요 소 를 카드 처럼 용기 에 놓 으 면 어느 순간 하나의 구성 요소 만 볼 수 있 습 니 다.  java.awt--- FlowLayout--- 구성 요 소 를 왼쪽 에서 오른쪽으로, 위 에서 아래로 순서대로 배열 하고 한 줄 을 다 놓 지 못 하면 다음 줄 로 접어 서 계속 배치 합 니 다.  java.awt ---GridLayout ---상자 가 없 는 표 와 같 습 니 다. 각각 셀 에 구성 요 소 를 넣 습 니 다.  java.awt ---BorderLayout ---구성 요 소 를 동, 남, 서, 북, 중 5 개 구역 에 따라 배치 하고 각 방향 은 최대 한 개의 구성 요소 만 배치 할 수 있 습 니 다.  java.awt--- GridBagLayout--- 구성 요소 가 설 치 된 구체 적 인 위치 와 셀 수 를 지정 할 수 있 습 니 다. 
 
3. Frame 과 Dialog 의 기본 레이아웃 관리 자 는 무엇 입 니까? Panel 은 무엇 입 니까?
 
답: Frame 의 기본 레이아웃 관리 자 는: BorderLayout 입 니 다.
Dialog 의 기본 레이아웃 관리 자 는: BorderLayout 입 니 다.
Panel 의 기본 레이아웃 관리 자 는: FlowLayout 입 니 다.
2013-07-23
IO 파일 쓰기 및 복사
//package com.app;



import java.io.*;



public class Test_IODemo {

	public static void main(String[] args) {

		ForFileWriter(" FileWriter    ", " FileWriter  .txt");

		ForBufferedWriter(" BufferedWriter    ", " BufferedWriter  .txt");

		FileCopy1(" .txt", "     .txt");

		FileCopy2(" .txt", "     .txt");

		FileCopy3(" .txt", "     .txt");

	}

	// FileWriter    

	public  static void ForFileWriter(String string,String fileName) {

		File file = new File(fileName);

		try {

			FileWriter fWriter = new FileWriter(file);

			fWriter.write(string);

			fWriter.close();

		} catch (Exception e) {

			// TODO: handle exception

			e.printStackTrace();

		}

	}

	// BufferedWriter    

	public static void ForBufferedWriter(String string,String desFile) {

		BufferedWriter bWriter = null;

		try {

			bWriter = new BufferedWriter(new FileWriter(new File(desFile)));

			bWriter.write(string.toString());

			bWriter.close();

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	//     

	public static void FileCopy1(String readfile,String writeFile) {

		try {

			FileReader input = new FileReader(readfile);

			FileWriter output = new FileWriter(writeFile);

			int read = input.read();		

			while ( read != -1 ) {

				output.write(read);	

				read = input.read();

			}			

			input.close();

			output.close();

		} catch (IOException e) {

			System.out.println(e);

		}

	}

	//     

	public static void FileCopy2(String readfile,String writeFile) {

		try {

			FileInputStream input = new FileInputStream(readfile);

			FileOutputStream output = new FileOutputStream(writeFile);

			int read = input.read();		

			while ( read != -1 ) {

				output.write(read);	

				read = input.read();

			}			

			input.close();

			output.close();

		} catch (IOException e) {

			System.out.println(e);

		}

	}

	//     

	public static void FileCopy3(String readfile,String writeFile) {

		BufferedReader bReader = null;

		BufferedWriter bWriter = null;

		String line = null; 

		try {

			bReader = new BufferedReader(new FileReader(new File(readfile)));

			bWriter = new BufferedWriter(new FileWriter(new File(writeFile)));

			while ((line = bReader.readLine())!=null) {

				bWriter.write(line);

				bWriter.newLine();

			}

			bWriter.close();

			bReader.close();

		} catch (Exception e) {

			// TODO: handle exception

			e.printStackTrace();

		}

	}

}

2013-07-24
1. Swing 과 IO 를 사용 하여 메모 장 프로그램 을 설계 합 니 다.
답: 자바 파일 은 Test Notepad. 자바 참조
http://blog.csdn.net/jueblog/article/details/9457517
실행 가능 한 파일 은 notepad. exe 참조
 
2. 대상 의 직렬 화 와 반 직렬 화 는 무엇 입 니까? 구체 적 으로 실 현 된 핵심 코드 를 말 해 보 세 요. Serializable 인 터 페 이 스 는 어떤 역할 을 합 니까?
답: 자바 대상 을 바이트 시퀀스 로 바 꾸 는 과정 을 대상 의 직렬 화 라 고 합 니 다. 바이트 시퀀스 를 자바 대상 으로 복원 하 는 과정 을 대상 의 반 직렬 화 라 고 합 니 다. 대상 의 직렬 화 는 주로 두 가지 용도 가 있 습 니 다. 1) 대상 의 바이트 시퀀스 를 하 드 디스크 에 영구적 으로 저장 하고 보통 파일 에 저장 합 니 다. 2) 네트워크 에서 전송 대상 의 바이트 시퀀스.
대상 서열 화:
 
  	public static void ser(Person p, String fileName){

  		ObjectOutputStream oos = null;

  		try {

  			oos = new ObjectOutputStream(new FileOutputStream(new File(fileName)));

  			oos.writeObject(p);

  		} catch (Exception e) {

  			// TODO Auto-generated catch block

  			e.printStackTrace();

  		}

  	}

 
대상 의 역 직렬 화:
 
	public static void unSer(String fileName){

		try {

			ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(fileName)));

			Person p = (Person)ois.readObject();

			System.out.println(p.getAge() + p.getName());

			} catch (Exception e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

	}

 
3. 하위 디 렉 터 리 나 파일 이름 을 출력 할 디 렉 터 리 를 지정 합 니 다.
답: 자바 파일 참조 Text_IO_File.java
 
import java.io.*;



//      ,             。

//                  



public class Text_IO_File {

	public static void main(String[] args) {

		File directory = new File("");

		String pathString = null;

		try{

		    pathString = directory.getCanonicalPath();//       

		}catch(Exception e){}

		System.out.println("          :");

		FileTest_List(pathString);

		System.out.println("        Java  :");

		FileTest_List_Choice(pathString, ".java");

	}

	//               。

	public static void FileTest_List(String fileName) {

		try {

			File f=new File(fileName);

			String[] arrStrings = f.list();

			for(String string : arrStrings){

				System.out.println(string);

			}

		} catch (Exception e) {

			// TODO: handle exception

			e.printStackTrace();

		}

	}

	//          choice    

	public static void FileTest_List_Choice(String fileName,final String choice) {

		try {

			File f=new File(fileName);

			String[] arrStrings = f.list(new FilenameFilter() {

				@Override

				public boolean accept(File dir, String name) {

					// TODO Auto-generated method stub

					return name.indexOf(choice) != -1;

				}

			});

			for(String string : arrStrings){

				System.out.println(string);

			}

		} catch (Exception e) {

			// TODO: handle exception

			e.printStackTrace();

		}

	}

}

 
4. a. txt 파일 의 단어 와 b. txt 파일 의 단 어 를 c. txt 파일 에 교체 합 쳐 a. txt 파일 의 단 어 를 리 턴 문자 로 구분 하고 b. txt 파일 에 서 는 리 턴 이나 빈 칸 으로 구분 하 는 프로그램 을 만 듭 니 다.
답: 자바 파일 참조 Test_Merge.java
//package com.app;



import java.io.*;



public class Test_Merge {

	public static void main(String[] args) {

		WordMarge("Word1.txt", "Word2.txt", "WordMarge.txt");

	}

	// readfile1       readfile2           writeFile   

	public static void WordMarge(String readfile1,String readfile2,String writeFile) {  

	    BufferedReader bReader1 = null;  

	    BufferedReader bReader2 = null;  

	    BufferedWriter bWriter = null;  

	    String line1 = null;   

	    String line2 = null;   

	    try {  

	        bReader1 = new BufferedReader(new FileReader(new File(readfile1))); 

	        bReader2 = new BufferedReader(new FileReader(new File(readfile2))); 

	        bWriter = new BufferedWriter(new FileWriter(new File(writeFile)));  

	        while ((line1 = bReader1.readLine())!=null | (line2 = bReader2.readLine())!=null) {

		        if(line1 != null) {  

		            bWriter.write(line1);  

		            bWriter.newLine();  

		        }  

		        if(line2 !=null) {  

		            bWriter.write(line2);  

		            bWriter.newLine();  

		        }

			}

	        bWriter.close();  

	        bReader1.close();  

	        bReader2.close();  

	    } catch (Exception e) {  

	        // TODO: handle exception  

	        e.printStackTrace();  

	    }  

	}  

}

2013-07-25
스 레 드 동기 화
//1package com.app;

/**

 * Java  :     

 */



import java.util.concurrent.*;



public class Test0725_Thread_Syn4 {

	public static void main(String[] args) {

		final ExecutorService exec = Executors.newFixedThreadPool(1);

		Callable<String> call = new Callable<String>() {

			public String call() throws Exception {

				//         

				int cash = 300;

				String name = "  ";

				System.out.println(name + "   " + cash + "   ");

				User u = new User(name, cash);

				String[] arr = { "  A", "  B", "  C", "  D", "  E", "  F",

						"  G", "  H", "  I", "  J" };

				for (int i = 0; i < 10; i++) {

					MyThread th = new MyThread(arr[i], u,

							(int) (Math.random() * 1000 - 500));

					th.start();

				}

				Thread.sleep(1000 * 5);

				return "      .";

			}

		};

		try {

			Future<String> future = exec.submit(call);

			String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); //           1  

			System.out.println("      :" + obj);

		} catch (TimeoutException ex) {

			System.out.println("
...."); System.exit(0); } catch (Exception e) { System.out.println(" ."); e.printStackTrace(); } try { Future<String> future = exec.submit(call); String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); // 1 System.out.println(" :" + obj); } catch (TimeoutException ex) { System.out.println(" ...."); ex.printStackTrace(); } catch (Exception e) { System.out.println(" ."); e.printStackTrace(); } exec.shutdown(); // /* int cash2 = 100; String name2 = " "; System.out.println(name2 + " " + cash2 + " "); User u2 = new User(name, cash); String[] arr2 = {" A"," B"," C"," D"," E"," F"}; for (int i = 0; i < 6; i++) { MyThread th2 = new MyThread(name2+arr2[i], u2, (int)(Math.random()*1000-500)); th2.start(); }*/ } } class MyThread extends Thread { private User u; private int x = 0; MyThread(String name, User u, int x) { super(name); this.u = u; this.x = x; } public void run() { u.oper(x); } } class User { private String code; private int cash; private int time = 0; User(String code, int cash) { this.code = code; this.cash = cash; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public int getCash() { return cash; } public void setCode(int cash) { this.cash = cash; } /** * * x */ public synchronized void oper(int x) { if ((this.cash +x >= 1000) && x > 0 ) { System.out.println(Thread.currentThread().getName() + " !"+" :" + this.cash + ", " +x + ", !"); try { Thread.yield(); // Thread.sleep(100); this.wait(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }else if (this.cash + x <0) { System.out.println(Thread.currentThread().getName() + " !"+" :" + this.cash + ", " +x +", !"); try { Thread.yield(); // Thread.sleep(100); this.wait(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(this.cash < 1000 && this.cash > 0 && (this.cash + x >= 0) && (this.cash + x <= 1000)){ this.cash += x; System.out.println(Thread.currentThread().getName() + " , “ " + x + " ”, :" + this.cash); time++; this.notifyAll(); } this.notifyAll(); } @Override public String toString() { return "User{" + "code='" + code + '\'' + ", cash=" + cash + '}'; } }

2013-07-26
1. 동기 화 에는 몇 가지 실현 방법 이 있다.
답: 자바 의 동기 화 는 synchronized 키워드 로 이 루어 집 니 다. 주로 두 가지 방법 이 있 습 니 다. sychronized 동기 화 코드 는 synchronized (obj) {} sychronized 동기 화 방법 과 같은 대상 을 연결 해 야 합 니 다. 예 를 들 어 Public void synchronized methodA(){}
 
2. 스 레 드 의 기본 상태 (수명 주기).
답: 자바 에서 모든 스 레 드 는 생 성, 준비, 운행, 차단 과 종료 다섯 가지 상 태 를 거 쳐 야 합 니 다. 스 레 드 는 생 성 에서 종료 까지 의 상태 변 화 를 생명 주기 라 고 합 니 다.
new 연산 자 와 Thread 클래스 또는 하위 클래스 로 스 레 드 대상 을 만 든 후 이 스 레 드 는 생 성 상태 에 있 습 니 다.
 
창설 --- > 준비: start () 방법 호출
준비 - > 실행: 준비 상태 에 있 는 스 레 드 가 CPU 를 받 으 면 실행 상태 에 들 어가 자신의 run () 방법 을 자동 으로 호출 합 니 다.
실행 --- > 차단: 실행 상태 에 있 는 스 레 드, sleep () 방법 을 실행 하거나 I / O 장치 자원 을 기다 리 며 CPU 를 내 보 내 고 자신의 실행 을 잠시 중단 하고 차단 상태 에 들 어 갑 니 다.
차단 - > 준비: 수면 시간 이 다 되 었 거나 기다 리 는 I / O 장치 가 비어 있 으 면 스 레 드 가 준비 상태 에 들 어가 서 다시 준비 대기 열 에서 CPU 를 기다 립 니 다. CPU 를 다시 얻 었 을 때 원래 중단 위치 부터 계속 실 행 됩 니 다.
실행 --- > 종료: (1) (정상 적 인 상황 에서) 스 레 드 작업 완료                 (2) (비정상적인 상황) 스 레 드 가 강제 적 으로 중단 되 었 습 니 다. 예 를 들 어 stop () 또는 destroy () 방법 을 실행 하여 스 레 드 를 종료 합 니 다.
 
3. synchronized 와 java. util. concurrent. locks. Lock 의 공통점 과 차이 점 을 약술 합 니 다.
답: 주요 공통점:
Lock 은 synchronized 가 실현 하 는 모든 기능 을 완성 할 수 있 습 니 다.
주요 차이 점:
1) Lock 은 synchronized 보다 더 정확 한 스 레 드 의미 와 더 좋 은 성능 을 가지 고 있다.
2) synchronized 는 자동 으로 자 물 쇠 를 풀 고 Lock 은 프로그래머 에 게 손 으로 풀 어 달라 고 요구 하 며 finally 에서 풀 어야 합 니 다.
 
4. 4 개의 스 레 드 를 설계 합 니 다. 그 중에서 두 스 레 드 는 매번 j 에 게 1 을 증가 하고 다른 두 스 레 드 는 j 에 게 매번 1 을 감소 합 니 다. 프로그램 을 작성 합 니 다.
답: 자바 코드 는 ThreadTest. 자바 참조
 
//package com.app;





public class ThreadTest {

	static int t = 10;

	static final int TIME = 5;

	public static void main(String[] args) {

		ThreadTest test = new ThreadTest();

		

		AddTest thread1 = test.new AddTest();

		MinusTest thread2 = test.new MinusTest();

		for (int i = 0; i < 2; i++) {

			new Thread(thread1).start();

			new Thread(thread2).start();

		}

	}

	

	private synchronized void Add() {

		t++;

		System.out.println(Thread.currentThread().getName() + "--  --" +t);

	}

	class AddTest implements Runnable{

		@Override

		public void run() {

			// TODO Auto-generated method stub

			for (int i = 0; i < TIME; i++) {

				Add();

			}

		}

	}

	

	private synchronized void Minus() {

		t--;

		System.out.println(Thread.currentThread().getName() + "--  --" +t);

	}

	class MinusTest implements Runnable{

		@Override

		public void run() {

			// TODO Auto-generated method stub

			for (int i = 0; i < TIME; i++) {

				Minus();

			}

		}

	}

}

좋은 웹페이지 즐겨찾기