달력

11

« 2017/11 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

'자바'에 해당되는 글 2

  1. 2008.10.15 자바 유의할 점.
  2. 2008.09.08 자바 ROBOT 클래스의 사용
2008.10.15 11:46

자바 유의할 점. 2012 이전/참고자료2008.10.15 11:46

1. 변수 초기화 안하고 사용할 시, 컴파일 에러 발생

2. shift 연산자(>>,<<,>>>) 는 32비트 단위로 수행된다. 따라서 a>>34 와 같은 코드가 있다면, 실제로는 34 % 32 의 계산 결과인 2비트만 오른쪽으로 이동시키게 된다.

3. 기본 shift 연산자중 하나인 >>의 경우는 각 비트를 오른쪽으로 이동시키고 빈 공간에는 원래 값의 부호 비트를 채운다. 음수일 경우에는 1이 채워지고, 양수일 경우에는 0이 채워지게 된다.

4. 상위 클래스와 하위 클래스(상속 클래스)의 대입
상위 클래스(이하 상위) = 상위 클래스 ; 성공
상위 = 하위 클래스(이하 하위) ; 성공
하위 = 하위 ; 성공
하위 = 상위 ; 컴파일 에러
상위 = (하위) 상위 ; 런타임 에러
상위 = (상위) 하위 ; 성공
하위 = (하위)상위 ; 런타임 에러
하위 = (상위)하위 ; 컴파일 에러

5. 자바의 스레드 구현 방법에는 이미 정의된 Thread 클래스를 이용하는 것과, Runnable 인터페이스를 구현하는 2가지 방법이 있다.

■ Thread 클래스를 상속하는 방법
class A extends Thread
{
public void run()
{

System.out.println("thread);
}
}
public class Test
{
public static void main(String args[])
{
A a = new A();
a.start();
}
}
■ Runnable 인터페이스를 구현하는 방법
class A implements Runnable
{
public void run()
{
System.out.println("thread");
}
}
public class Test
{
public static void main(String args[])
{
A a = new A();
Thread t = new Thread(a);

t.start();
}
}

※ 위의 굵게 표시된 부분은 다음과 같이 작성해도 된다.
Thread t = new Thread(new A()); t. start();
new Thread(new A()).start();


6. 자바의 타입끼리의 계산은 하위에서 상위로 올라가며 된다. 구체적으로 알아보자.

 계산식  형 변환
결과형
byte * byte
int * int
 int
short*byte
int*int
 int
 byte/int  int/int  int
 flaot*int  float*float  float
 long/byte  long/long  long
 long*double  double*dobule  double


7. 접근 제한자에 대해 알아보자.
public : 같은 패기지 안의 모든 클래스나 다른 패키지의 모든 클래스도 접근 가능
protectd : 같은 패키지 내의 모든 클래스나 다른 패키지에서 상속한 클래스만 접근 가능
default : 같은 패키니 내의 클래스만 접근 가능
private : 모든 패키지 클래스는 접근 불가. 해당 클래스만 접근 가능

final
1. 클래스에 선언될 경우 : 이 클래스는 상속 불가.
2. 메소드에 선언될 경우 : 다른 클래스에서 이 메소드 재정의 불가
3. 변수에 선언될 경우 : C에서 상수 변수와 같은 역할. 값 변경이 불가핟.

abstract
메소드나 클래스의 내용을 해당 클래스나 메소드 선언시에 정의하지 않고, 상속한 하위 클래스에서
정의하고 싶을 때 사용한다. 이 제한자가 메소드에 적용되면 추상메소드, 클래스에 적용되면 추상클래스라고 한다.

추상 메소드 : 내용이 정의되지 않은 메소드.  추상메소드가 하나라도 포함된 클래스는 반드시 추상클래스로 선언되어야 하며, 상속받는 하위 클래스는 추상클래스의 모든 추상메소드를 구현하여야 한다.

추상 클래스 vs. 인터페이스
- 보통 인터페이스는 호출한 쪽과 객체 간의 타입을 맞추기 위해 사용되며, 추상 클래스는 상속   
  을  통하여 공통된 부모 클래스를 제공하기 위해 사용된다.

static
메소드나 변수를 메모리에 적재시켜 여러 인스턴스가 공유할 수 있게 하기 위한 제한자이다.
이 제한자가 선언된 메소드나 변수는 객체를 생성하지 않고도 접근 가능하다.
static 제한자가 붙은 메소드는 상속 받은 클래스에서도 static 제한자가 붙어야 한다.(static없이 오버라이딩불가)
그리고 일반 메소드를 하위 클래스에서 static을 붙일수도 없다.
static 멤버는 가장 외부 클래스나 static제한자로 선언된 클래스에서만 서언될 수 있다.
class OuterA
{
static int outer  = 0;

public class InnerA
{
static int inner = 0 ; // 에러
}
}

지역 변수에 선언될 경우에도 에러 발생.
class OuterA
{
static int outer  = 0;

public void abc()
{
static int inner = 0 ; // 에러
}
}



신고
TAG 자바
Posted by 에어림
로봇 클래스는 자바 프로그램이 임시적으로 운영체제 수준의 키보드 & 마우스 제어 권한을 획득할 수 있게 해준다.
아래의 예제를 실행하기 위해서는 해상도가 1024 * 768 로 조정되어야 한다. 

public class Robot04{
  public static void main(String[] args)throws AWTException{

    Robot robot = new Robot();
    robot.mouseMove(1005,10); // 마우스 포인터를 모니터의 가로 1005픽셀, 세로 10픽셀의 위치로 옮긴다.
    robot.mousePress(InputEvent.BUTTON1_MASK); // 마우스 왼쪽 버튼 클릭.
    robot.mouseRelease(InputEvent.BUTTON1_MASK); // 마우스 왼쪽 버튼 클릭 상태를 해제 함으로써 한 번의 클릭을 완성한다.
  }//end main

}//end class Robot04

위의 프로그램은 윈도우 응용 프로그램의 창의 X버튼을 클릭하게 하는 프로그램이다.
기본적인 로봇 클래스의 지원 메소드는
mouseMove - 특정 위치로 마우스 포인터를 이동시킨다.
mousePress - 마우스 버튼을 누르는 동작 수행
mouseRelease - 눌렀던 버튼 동작을 해제하는 메소드
keyPress - 키보드 누름 동작
keyRelease - 키보드 누르기 해제 동작
이 있다. 이 이외에도 다양한 메소드를 지원하고 있다(자바 API 참조)

mousePress와 mouseRelease는 InputEvent 클래스를 인자로 받아 어떤 마우스 버튼이 클릭 했는지를 나타낸다.

InputEvent.BUTTON1_MASK  // 왼쪽 마우스 버튼
InputEvent.BUTTON2_MASK  // 오른쪽 마우스 버튼
InputEvent.BUTTON3_MASK  // 휠(? 확실치 않음)


신고
Posted by 에어림