728x90
연산자

-산술연산자

  - 실수하기 쉬운 문제들..
   5 / 2 = 2   ,  5/2. = 2.5   , 3%7 = 3  

   int =5;
   int b = 3;
   int c = ++a + b++;  // c의 값은 9이다.  왜냐면 b는 계산이 다 끝나고 1증가하기때문에.. 
      ++a는 전위연산    b++는 후위연산  //후위연산은 한 라인 계산이 다 끝나고 증가한다.

   int a = 5;
   int b = ++a + ++a;
    =>b의 값은 13이다..  // C언어 에서는 14 가 나온다.  (레지스터 하나 사용) 변수a의 기억장소가 같다.

 -관계연산자
    a > b   // a를 기준으로 한다.
     >     <       >=    <=     ==       !=  
   초과  미만  이상  이하  같다  같지않다     // 실수조심   =<, =>  이런 표현은 오류..

-논리연산자 
    비트논리연산자 -> & (and) , | (or)  , ^ (xor)  ,  ~(not)      // xor  - 1의 개수가 짝수개면 0  홀수개면 1 이다.
    일반논리연산자 -> && (and)  ,  || (or)  ,   ! (not) 
    
    관계연산자와 논리연산자를 같이 사용하면 관계연산자가 먼저 연산된다.
      =>  5>3 && 10>7   true

-SHIFT연산자
   << : left shift (한 비트씩 좌로 이동, 우측은 0으로 채움                                                                  ---> X*2^n
   >> : right shift (한 비트씩 우로 이동, 좌측은  sing bit로 채움  // sing bit   양수는 0 , 음수는 1로 채움 .---> X/2^n
   >>>: 한 비트씩 우로 이동 , 좌측은 무조건 0으로 채움                                                                   ---> X/4^n

-대입연산자
    연산자     표현        의미
      +=         a+=2       a=a+2    
      -=         a-=2       a=a-2
      *=         a*=2       a=a*2
      /=         a/=2       a=a/2
     %=         a%=2      a=a%2
     &=          a&=2      a=a&2  - 대입연산 가능
     <<=        a<<=2    a=a<<2 - 시프트연산 가능

-형변환연산자
---------------------------------------------------------------------------
  int a=5, b=3;
  System.out.println("a/j=>"+(a/b));
  System.out.println("(float)a/b)" +(float)a/b);      //a만 float형으로 형변환
  System.out.println("(float)(a/b)" +(float)(a/b));  // a/b연산 결과를 float으로 형변환
  System.out.println((int)3.789);  
  System.out.println((char)65.7);
  ---------------------------------------------------------------------------
 결과값
   (float)a/b)1.6666666
   (float)(a/b)1.0
    3
    A

-조건연산자
  조건 ? A : B   // 조건이 참이면 A를 실행 , 조건이 거짓이면 B를 실행
---------------------------------------------------------------------------
  int a=5, b=3;
  System.out.println( 5>3 ? 100 : 50);
  System.out.println(10<7 ? 70 : 80);
---------------------------------------------------------------------------
  실행결과   100
                  80

비교

    ==              :  기본 데이터형 비교에 사용한다. 
    equals()     :  문자열 비교에 사용한다.
    instanceOf  :  객체를 비교에 사용한다.

-문자열 비교

    String str = "hello";
    System.out.println(str.equals("hello");                      // true
    System.out.println(str.equals("Hello");                      // false
    System.out.println(str.equalsIgnoreCase("Hello");      // true   equalsIgnoreCase은 대소문자 구별안함..

-객체 비교

 객체  instanceof  클래스        오른쪽이 상위이거나 같을때 참
      
       str   <   Object   -> true
       str   =   String    -> true
       obj  >  String     ->false  (객체 obj가 클래스 String보다  상위라서 false) 
----------------------------------------------------------------------------
  String str = new String("MBC");
  Object obj = new Object();
  
  System.out.println(str instanceof Object);
  System.out.println(str instanceof String);
  System.out.println(obj instanceof String);
----------------------------------------------------------------------------  
실행결과   true
               true
               false

제어문

if문

----------------------------------------------------------------------------
class IfTest_2
{
 public static void main(String args[])
 {
  int a =Integer.parseInt(args[0]);
  if(a%2 == 0)
  {
   System.out.println(a + "는 짝수입니다");
  }else
  {
   System.out.println(a + "는 홀수입니다.");
  }  
 }
}
----------------------------------------------------------------------------
        
switch ~ case문
----------------------------------------------------------------------------
class Switch_1
{
 public static void main(String args[])
 {
  int num = Integer.parseInt(args[0]);
  
  switch(num%2)  //변수나 수식만 사용
  {
  case 1: //정수값만 사용해야됨 If문처럼 논리식 쓰면 안됨.
   System.out.println(num + "는 홀수입니다.");
   break;
  case 0:
   System.out.println(num  + "는 짝수입니다.");
   break;   
  }
 }
}
----------------------------------------------------------------------------
----------------------------------------------------------------------------
/*
제어문 예제 switch ~case
월(달)을 입력받아 그달의 날짜 출력하기
*/
import java.io.*;
class Switch_5
{
 public static void main( String [] args ) throws IOException
 {
  String monthStr;
  int month;
  int days=0;  // days를 초기화를 안해주면 값이 아에 안들어갈 수도 있기 때문에(switch문안에 값을받음)컴파일 에러
  
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  
  System.out.print("월(달) 을 입력하세여  :");
  monthStr = br.readLine();
  month = Integer.parseInt(monthStr);
  
  switch(month)
  {
  case 1:  case 3:  case 5:  case 7:  case 8:  case 10:  case 12:
   days=31;
   break;
  case 2:
   days=28;
  case 4:  case 6:  case 9:  case 11:
   days=30;
   break;
  }
  System.out.println(month +"월(달)은 " + days + "까지 있습니다.");
 }// end main
}
----------------------------------------------------------------------------
728x90

주석 프로그래머가 참고할 내용을 기재, 실행하고는 무관하다.
//참고내용
/*  참고내용  */

개행문자
  \n => new line (줄만 바꿈, 커서위치 그대로)
     ex)  kim
                lee
                    kook

  \r => carrgae return ( 커서를 그 줄의 처음으로 위치시킨다. )
  \t => 일정 간격을 띄운다 (보통 8칸)
   보통 \n\r을 같이 쓴다...

OOP의 4대특징
 1. 캡슐화 ({}) ,은닉화 (클래스 내용은 모르고 사용법만 아는것... 사용자는 복잡하게 알 필요가 없다.)
 2. 상속성(모든 클래스는 Object 클래스를 상속받는다.)  class Test8 extends Object
 3. 다형성
     overloading - 하나의 클래스 안에 같은 이름의 메소드가 여러개 존재하는것. ( 구분은 매개변수로 가능)
     overriding -  상속받은 메서드 내용을 재정의
 4. 추상화 : 복잡한 것(개발자 입장)을 단순화(사용자 입장) 시키는 것.

명령줄인수

  자바 응용프로그램에는 main()이라는 정적 메소드를 포함하고 있다.
  이 메서드는 String 객체배열 인수한개를 받는다. 
  이 객체들은 사용자가 명령줄에 입력할 수 있는 모든 인수를 표현한다.
  명령줄 인수의 갯수는 int형으로 args.length 를 통해 구할 수 있다.
  인수는 args[0]args[1] args[2] 순으로 읽어 들여 진다.
--------------------------------------------------------------
class CmdLineArg_1
{
 public static void main(String args[])
 {
  System.out.println("인수갯수 : " + args.length);
  System.out.println("args[0] =>"  + args[0]);
  System.out.println("args[1] =>"  + args[1]);
  System.out.println("args[2] =>"  + args[2]);
 }
}
-------------------------------------------------------------
  실행(도스창에서) C:\_java\01_java\02>java CmdLineArg_1 kim lee park
  실행(jpadpro)  실행버튼 누른후 using application parameters에 다가 인수를 넣어도 된다.
    인수갯수 : 3
     args[0] =>kim
     args[1] =>lee
     args[2] =>park

  이 방법은 매개변수에 숫자를 입력해도 숫자를 문자로 인식한다..

  문자를 숫자로 변환하는 방법
--------------------------------------------------------------------
class CmdLineArg_2
{
 public static void main(String args[])
 {
  int a = Integer.parseInt(args[0]);
  int b = Integer.parseInt(args[1]);

  
  System.out.println("a :"+a);
  System.out.println("b :"+b);
  System.out.println("합:"+(a+b));
 }
}
---------------------------------------------------------------------
실행결과
  C:\_java\01_java\02>java CmdLineArg_2 10 20
  a :10
  b :20
  합:30

 숫자를 문자로 변환하는 방법   ->    ""+7 

class

- class란 객체지향 프로그램에서 가장 기본이 되는 클래스를 정의하는 키워드(예약어)
- 자바프로그램은 클래스를 하나 이상 가지게 된다.
- 주 클래스는 main()이 포함되어 있는 것을 말한다.
- 주 클래스 이름이 프로그램 이름이 된다(저장이름)

main 메소드
 - 자바 프로그램 실행시 최초로 수행되는 메서드 이다.
 - 자바에서는 함수라는 이름대신 메서드라는 말을 사용한다.
 - public : 접근 제한자
 - static : 이 클래스 내에 main()를 소속시킨다.  static은 메인함수 메모리 해제시에 같이 헤제된다.
 - main() 호출은 java.exe 실행시 JVM이 호출한다.
 - main()는 항상 다음과 같은 형식으로 써야 한다. 
    public static void main(String args[]) {}

접근 제한자
----------------------------------------------------------------
접근 제한자      같은 클래스      같은 패키지     상속관계    관련없는클래스 
---------------------------------------------------------------- 
 public                0                     0                0                  0         // 어디서나 접근가능
 protected           0                     0                0                  x         //자신의 클래스와, 파생클래스에서만 접근가능
 생략할경우           0                     0                x                  x         //같은 패키지 내에서, 같은 폴더에서만 사용가능함
 private               0                     x                x                  x         //자산의 클래스 내에서만 사용가능
----------------------------------------------------------------
    * 변수는 private으로 메서드는 public 으로 선언을 권유한다.

 1.private      :  자신의 클래스 내에서만 접근 가능
 2.생략(packge) : 같은 패키지 내에서 접근 가능
 3.protected    : 자신의 클래스와 파생 클래스 에서만 접근 가능
 4.public       : 어디서나 접근 가능

  전역변수 : 메서드 외부, 클래스 내부에 선언된 변수
  지역변수 : 메서드 내부에서 선언한 변수

---전역변수에서 ---
  은폐필드 : private 으로 선언된 필드(변수)
  보호필드 : protected  으로 선언된 필드
  공개필드 : public 으로 선언된 필드

예제 1
-----------------------------------------------------------
class VariScope
{
 static int global;// 전역변수
 
 public static void mm(){
  int local = 123;
  global = 456;
  System.out.println(local);
  System.out.println(global);
  
 }
 public static void main(String argsp[])
 {
  int local = 100;
  
  mm();
  
  System.out.println(local); // local -> 100; mm함수의 지역변수랑 혼동 하지 말것.
  System.out.println(global);
 }
}
-----------------------------------------------------------
예제 2
-----------------------------------------------------------
class PanMae
{
 public String pum;  //어디서나 사용가능
 int su; //생략은 같은 패키지(폴더) 내에서만 접근 가능
 private int dan; // 은폐필드, 자신의 클래스 에서만 사용가능
 
 public PanMae(String pum, int su, int dan){   //생성자  
  this.pum= pum;
  this.su = su;
  this.dan = dan;
 }
 public void disp(){
  System.out.println(pum + "~~~~" + su + "~~~~" + dan);
 }
}

class VariScope_2
{
 public static void main(String args[])
 {
  PanMae A =new PanMae("사과",2, 2000);  //객체 생성시 생성자 호출
  A.disp();
  
  A.pum = "감"; //공개필드에서는 서로 무관한 클래스에서도 사용가능
  A.disp();
  
  A.su = 100; //같은 패키지라서 접근 가능하다.

  A.disp();
  
  // A.dan = 500; // Error!!!    private 이라서 접근 불가

  A.disp();  
 }
}
-----------------------------------------------------------


자료형

기본 자료형     - 수치 자료형 - 정수 자료형 byte -> 1byte
                                                        char -> 1byte
                                                        short -> 2byte
                                                        int -> 4byte
                                                        long -> 8byte

                                      - 실수 자료형 float -> 4byte
                                                        double -> 8byte

                    - 논리 자료형 - boolen  - true or false

레퍼런스 자료형  - 클래스    ex) String은 원래 클래스이나.. 자료형처럼 사용가능..
                       - 인터페이스
                       - 배열
  byte < short  = char < int < long < float < double

식별자 Identifier

식별자는 변수명, 메서드명, 클래스명, 상수명 등을 말한다.
변수명 : 데이터를 넣을 기억장소

 *변수이름을 만드는 규칙
   1. 영문자, 숫자 조합하여 사용 (첫문자가 숫자불가능)
   2. 키워드(예약어)는 사용할 수 없다.
   3. 공백사용 불가.
   4. 특수문자 사용불가 (단, _,$ 는 사용가능)
       예)  int $a = 20;
             int _a = 30;
  Literal 상수 ==> 데이터
   1. 정수상수 ( 10 , 10L, 0xA, 014)  default - int형
   2. 실수상수 ( 12.4, 12.5f, 12.E+01) default  - double형
   3. 문자상수 ( 'A', '1', '\n')
   4. 문자열상수 ("A", "ABC")

int i =10;
i+"" =>문자열로 변환됨
i+'' =>code값으로 변환됨
i+'A' =>code값으로 변환됨

형변환

자동 형변환
  double d = 12.5f;
  long a =10;
  큰 자료형으로 변환된다.

강제 형변환(casting)
  float b = (float)12.5;   //double형 12.5을  float 으로 강제 형변환
  char ch = (char)65; 

전역변수와 지역변수
  전역변수 : 클래스안, 메서드 밖에서 선언된 변수   ->  값을 안넣어주면 자동으로 1로 초기화
  지역변수 : 메서드 안에서 선언된 변수                ->  자동초기화 안됨

--------------------------------전역변수----------------------------------
class Test{
 int a;
 char ch;
 double d;
 String str;
 Boolean b;
 //전역변수 초기화 x
 public void disp()
 {
  System.out.println("a:" +a);
  System.out.println("ch:" +ch);
  System.out.println("d:" +d);
  System.out.println("b:" +b);
  System.out.println("str:" +str);
 }
}

class VarTest_5
{
 public static void main(String args[])
 {
  Test A = new Test();
  A.disp();
 }//end main
}// end class
-------------------------------------------------------------------------

결과값:  a:0
           ch:
           d:0.0
           b:null
           str:null



----------------------------지역변수--------------------------------------
class Test2
{
 public void disp()
 {
  //지역변수 초기값 x
  int a;
  double d;
  String str;

  System.out.println("a:"+a);
  System.out.println("d:"+d);
  System.out.println("str:"+str);
 }
}
class VarTest_6
{
 public static void main(String []args)
 {
  
 }
}
---------------------------------------------------------------------------

오류메시지 : 
     variable a might not have been initialized
     variable d might not have been initialized
     variable str might not have been initialized


728x90

-자바설치-

  1. jdk설치 
      a. http://www.sun.com/download/ 로 가서 jdk를 다운받는다.
      b. OK만 조낸 누른다.
      c. 끝.

  2. 환경변수 설정

    - 내텀퓨터->고급->환경변수->path변수 수정(앞부분에 삽입,기존내용 놔둠)
          (C:\Program Files\Java\jdk1.5.0_09\bin;)  //  경로는 약간씩 틀릴수도 있음.. 

   - 시스템변수 새로만들기 클릭
      - 변수이름 : classpath
      - 변수값 : .;C:\Program Files\Java\jdk1.5.0_09\lib\tools.jar(개발툴)  // 경로는 약간씩 틀릴수도 있음...

      
  3. 테스트

       C:\Users\kook>java -version
         java version "1.6.0_18"
         Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
         Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

      ----------------------------------------------------------------------------------------------
       class Test
        {
            public static void main(String args[])
              {
                System.out.println("2010년 1월 18일 자바 과정 화이팅!!");
              }
       }
     ----------------------------------------------------------------------------------------------
       a. Test.java 파일 생성(메모장으로)
                저장이름 "Test.java"

       b.  C:\  javac Test.java  -------(컴파일과정) 
             아무내용 없으면 OK !

       c.  C:\ java Test     ----------------(실행)
             2010년 1월 18일 자바 과정 화이팅!!   OK !


-용어설명-
  JDK( java development kit) 자바 프로그램 개발 도구
  API( Application Programming Interface) :  클래스, 메서드 도움말
  J2SE( Java2 Standard Edition): 기본코어
  J2EE( Java Enterprise Edition): EJB
  J2ME(Java2 Micro Edition) : Mobile PDA의 자바 p.g
  .java -> 자바의 소스파일    
   .jar -> java achive file (class를 압축 해 놓은 것)
  .war -> web achive file ( jsp, 웹서비스 , 그래픽등을 압축 해 놓은 것)
  .ear -> Enterprise achive (class, web program, EJB까지 압축 해 놓은 것)
  javac.exe -> 자바 컴파일러
  java.exe -> 자바 실행파일
  appletviewer.exe -> 자바 에플릿 실행파일
  JVM(자바 가상머신 -> 소프트적인 CPU이다.    -> 1. JDK를 설치하면 된다.
       2. 자바파일을 읽고 실행하는 컴파일러 역할을 한다.

java 기초
 - Application 독립적으로 실행가능 (JVM이 메인함수를 호출해서 실행한다.)
 - Applet  웹을 통해서 실행

 Applet 작성
------------------------------------------------------------------------------------
import java.awt.*;//GUI(그래픽)
import java.applet.*;// 에플릿

public class Test4 extends Applet
{
   public void paint(Graphics g)
   {
      g.drawString("Welcome!!",200,100); //x200 y100위치에 찍어라
   }
}
-------------------------------------------------------------------------------------
javac Test4.java   컴파일

Test4.html 작성
-------------------------------------------------------------------------------------
<html>
  <body>
     <applet code ="Test4.class" width="500" height="500">
     </applet>
  </body>
</html>
-------------------------------------------------------------------------------------
appletviewer Test4.html  실행

+ Recent posts