728x90
반응형

연산자

 연산자 :: 어떠한 기능을 수행하는 기호

 피연산자 :: 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)

연산자의 종류

 1. 단항 연산자 :: -(음수), ++, --, ~, !

 2. 이항 연산자 :: 산술 : +, -,  *, /, %, <<, >>

                         비교 : >, <, >=, <=, ==, !=

                         논리 : &&, ||, &, ^, |

 3. 삼항 연산자 :: 조건식 ? 식1 : 식2

 4. 대입 연산자 :: =

 

연산자의 우선순위

 

 

연산자의 우선순위

 괄호의 우선수위가 제일높다.

 산술 > 비교 > 논리 > 대입

 단항 > 이항 > 삼항

 연산자의 연산 진행방향 : 왼쪽에서 오른쪽 (→)

 단항 연산자와 대입 연산자의 진행방향 : 오른쪽에서 왼쪽(←)

 

예) 3*4*5 : 3*4가 먼저 계산되고, 3*4의 결과인 12*5가 계산된다.

예) x=y=3 : y에 3이 먼저 저장되고, y의 값(3)이 x에 저장된다.

예) -x+3 : 단항이 이항보다 먼저 계산된다.

예)x+3*y : 곱셈과 나눗셈이 덧셈과 뺄셈보다 먼저 계산된다.

예) x+3>y-2 : 산술 연산자가 비교 연산자보다 먼저 계산된다.

예)x>3&&x<5 : 비교 연산자가 논리 연산자보다 먼저 계산된다.

예)int result=x+y*3 : 대입 연산자는 맨 뒤에 대입된다.

 

주의 해야 할 연산자의 우선순위 :: 아래와 같은 수식은 괄호를 사용하여 우선순이를 구분하는 것이 좋다.

 1. 쉬프트 연산자 ( >>, <<, >>> ) 는 덧셈연산자보다 우선순위가 낮다.

      예) x<<2+1 → x<<(2+1)과 같다.

 2. ||, |(OR)는 &&, &(AND)보다 우선순위가 낮다.

      예) x<-1 || x>3 && x<5  → x<-1 || (x>3 && x<5)와 같다.

 

 

 

증감 연산자

증가 연산자(++) :: 피연산자의 값을 1 증가시킨다.

감소 연산자(__) :: 피연산자의 값을 1 감소시킨다.

 

예) int i=2;

     int j=0;

     전위형 : j= ++i; → i=3,j=3

     후위형 : j= i++; → i=3,j=2

 ※ ++i와 i=i+는 같은 결과를 얻지만, ++i가 속도가 더 빠르고 코드를 간결하게 작성할 수 있기 때문에 더 많이 사용한다.

 

 

 

비트 전환 연산자

 비트 연산자 : ~

 2진수 표현에서 1은 0으로, 0은 1로 바꾸는 연산자

 정수형에서만 사용 가능하다

 

<양의 정수를 음의 정수로 표현하는 방법>

 

 

 

 

이항 연산자

 - 이항 연산자의 특징 : 이항 연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.

 - int보다 크기가 작은 타입은 int로 변환한다 : (byte, char, short) → int

 피연산자 중 표현번위가 큰 타입으로 형변환한다.

     byte + short → int

     char + int → int

     float + int → float

     long + float → float

     float + double → double

 

예) byte + byte → int

     byte a = 10;

     byte b = 20;

     byte c = a+b;   //오류

     int c = a+b;      //정상

 

 

 

 

쉬프트 연산자

 << (왼쪽 쉬프트), >> (오른쪽 쉬프트)

 쉬프트 연산자는 2의 n승으로 곱하거나 나눈 결과와 같다.

 사칙연산의 곱셈이나 나눗셈보다 연산 속도가 빠르다.

 예) x<<n = x*2^n

      x>>n = x/2^n

      8<<2 = 8*2^2

      8>>2 = 8/2^2

 

728x90
반응형
728x90
반응형

특수문자를 표현하는 방법

 특수문자                리터럴

  tab                   \t

    backspace                \b

    new line(줄바꿈,개행)           \n

    carriage return(커서를 맨 앞으로)      \r

    역슬래쉬(\)               \\

    작은 따옴표                \'

    큰 따옴표                 \"

    유니코드(16진수) 문자           \u 유니코드 (예:char a='\u0041')





 

< 문자와 문자열 >








정수의 오버플로우(Overflow)

 byte b=127;

 b = b+1; //b에 저장된 값을 1증가, b의값은-128

 byte b=128; //오류






<오버플로우와 언더플로우>








형 변환

 -값의 타입을 다른 타입으로 변환하는 것이다.

 -boolean을 제외한 7개의 기본형은 서로 형변화이 가능하다.

예) float f=1.6f;   //float형 변수 f에 1.6저장

     int i=(int)f;    //f에 저장된 1.6을 int형으로 변환하여 1로 변경되어 변수 i에 저장




형 변환을 생략하는 경우

 byte(1바이트) -> int(4바이트)

 byte b=10;

 int i=b;   // (int)는 생략가능


 int(4바이트) -> byte(1바이트)

 int i2=300;

 byte b2=(byte)i2;  //(byte) 생략불가

※ 바이트크기가 큰쪽->작은쪽은 생략불가하고, 작은쪽->큰쪽은 생략 가능하다. 큰쪽->작은쪽은 값손실이 생기기때문.



<형변환>

 숫자끼리 형변환

 1. byte -> int 로 형변환 : (int)b

 2. int -> byte 로 형변환 : (byte)i

 3. byte -> double 로 형변환 : (double)b

 4. int -> double 로 형변환 : (double)i


 문자열과 숫자의 형변화

 1. 문자열 -> 정수형으로 변환

   Integer.parseInt(변수명);

 2. 정수형 -> 문자열로 변환

   Integer.toString(변수명);

 3. 문자열 -> 더블형으로 변환

   Double.parseDouble(변수명);

 4. 더블형 -> 문자열로 변환

   Double.toString(변수명);






< 문제 >

  각 변수들을 선언하고 초기화하여 아래와 같이 출력하시오.

 [변수 선언]

 num(번호)  name(이름)  kor,mat,eng(국,수,영)  sum(double형 총점)  avg(float형 평균)


 


<정답>

public static void main(String[] args)

{

int num=2014001;

String name="김나라";

int kor=100,mat=98,eng=99;

double sum=kor+mat+eng;  //합계 계산식

float avg=(float)sum/3;   //평균 계산식 double형 sum을 float형으로 형변환


System.out.println("번호:"+num);

System.out.println("이름:"+name);

System.out.println("국어 점수:"+kor);

System.out.println("수학 점수:"+mat);

System.out.println("영어 점수:"+eng);

728x90
반응형
728x90
반응형

JAVA 개요

- 자바는 썬 마이크로 시스템즈(현재는 Oracle로 인수됨) 에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어

- 웹 브라우저인 넷스케이프에서 사용할 수 있는 객체 지향 프로그래밍 언어로서 보안성이 뛰어나며 컴파일한 코드는 다른 운영체제에서 사용할 수 있도록 클래스(class)로 제공된다. 객체 지향 언어인 C++언어의 객체 지향적인 장점을 살리면서 분산 환경을 지원하며 더욱 효율적이다.

 

JAVA의 역사

- 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체지향적 프로그래밍 언어이며, 썬 마이크로시스템즈에서 무료로 제공했다.

- 1991년 그린 프로젝트라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다.

- 자바는 유닉스 기반의 배경을 가지고 있기 때문에 문법적인 특성은 C언어와 비슷하다.

자바를 다른 컴파일언어와 구분짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 실행하기 위해서 JVM(자바 가상 머신, Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU나 운영체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.

 

JAVA의 특징

간단하여 배우기 쉽다.

 - 자바 언어는 C++를 기반으로 개반되었음에도 C++에서 혼란을 일으키는부분을 제거했다.

객체지향 언어이다.

 - 소프트웨어를 개발할 때 재활용 측면에서 많은 장점을 가진다.

 - 다양한 기종의 컴퓨터와 다양한 플랫폼(윈도우,솔라리스,매킨토시 등의 운영체제)에서 실행 가능하다.

보안에 강하다.

 - 자바는 바이러스가 침투하지 못하는 구조를 가지고 메모리에서 데이터접글을 제한할 수 있다.

이식성이높다.

자동 메모리 관리지원

네트워크와 분산처리 지원

멀티쓰레드 지원

동적 로딩지원


JVM(Java Virtual Machine) 자바 가상 기계

 - 자바 바이트 코드와 컴퓨터의 운영 시스템 간의 번역기 역할을 한다.

 JVM을 이용하여 사용자는 매킨토시,윈도우, 유닉스 등 다양한 컴퓨터 플랫폼에서 자바를 실행시킬 수 있다.

 - 사용자가 JAVA파일을 생성한 후 JDK의 컴파일을 거쳐 바이트코드(class)가되어 JVM을 거치면 컴퓨터가 사용할 수 있는 기계언어로 변경해주는 역할을 한다.

 - 자바 실행 흐름 :: 소스코드(*.java)생성 -> JDK컴파일 -> 클래스 파일(*.class)생성 -> JVM -> 실행




변수의 종류

 값  -  문자 -> char

      -  숫자 -> 정수(byte, short, int, long)  실수(float, double)

      -  논리 -> boolean


변수의 타입

 기본형 - 8개(boolean, char, byte, short, int, long, float, double)

           - 실제 값을 저장하는 변수


 참조형 - 기본형을 제외한 나머지 (String, System 등)


< 기본형 >

 논리형

 - true와 false중 하나를 값으로 가지며, 조건식과 논리적 계산에 사용된다.

  -> boolean (1byte)

 문자형

 - 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

  -> char (4byte)

 정수형

 - 정수 값을 저장하는데 사용된다. 주로 사용하는 것음 int 와 long이며, byte는 이진데이터를 다루는데 사용되며, short는 c언어와의 호환을 위해 추가되었다.

  -> byte(1byte), short(2byte), int(4byte), long(8byte)

 실수형

 - 실수 값을 저장하는데 사용된다. float와 double이 있다.

  -> float(4byte), double(8byte)



자료형의 크기와 범위

 논리 :: boolean   1byte    false        false,true

 문자 :: char        2byte    \u0000    0 65,535

 정수 :: byte        1byte      0            -128 ~ 127

            short       2byte      0            -32,768 ~ 32,767

            int           4byte      0            -2,147,483,648 ~ 2,147,483,647

            long        8byte      0            -9,223,370,036,854,775,808 ~ 9,223,372,036,854,775,807      

 실수 :: float        4byte      0.0f         -3.4E38 ~ +3.4E38

            double    8byte      0.0          -1.7E308 ~ +1.7E308


변수의 선언방법

선언형식 : 변수타입(자료형) 변수명

 예) int score;         //정수형 변수 선언

      score = 100;     //변수 초기화

      int score =100;  //정수형 변수 선언과 초기화

      String str = new String("abc");   //문자열 변수 선언과 초기화


명명규칙

 1. 대소문자가 구분되며 길이에 제한이 없다.

    -> True와 true는 서로 다른 것으로 간주된다.

 2. 예약어를 사용해서는 안된다. (int,false,long,double,for,char 등등...)

    -> true는 예약어라 사용할 수 없지만, True는 가능하다.

 3. 숫자로 시작해서는 안 된다.

    -> top10은 허용하시만, 7up은 허용되지 않는다.

 4. 특수문자는 '-'와 '$'만을 허용한다.

    -> $harp은 허용되지만 S#arp는 허용되지 않는다.


명명규칙 < 권장사항 >

 1. 클래스 이름의 첫 글자는 항상 대문자로 한다.

    -> 변수와 메서드 이름의 첫 글자는 항상 소문자로 한다.

 2. 여러 단어의 조합은 단어의 첫 글자를 대문자로 한다.

    -> LastIndexOf,StringBuffer

 3. 상수의 이름은 대문자로 한다. 단어는 '_'로 구분한다.

   -> PI, MAX_NUMBER



<변수 선언 규칙>






<변수, 상수, 리터럴>

  변수(variable) :: 하나의 값을 저장하기 위한 공간, 변하는 수

  상수(constant) :: 한 번만 값을 저장할 수 있는 공간, 변하지 않는 수

  리터럴(literal) :: 그 자체로 값을 의미하는 것



728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

java 연산자  (0) 2018.08.29
java 문자열 오버플로우 형변환 특수문자  (0) 2018.08.29
java 예외 try catch finally  (0) 2018.08.29
JAVA Method 클래스  (0) 2018.08.29
Spring PostConstruct 어노테이션  (0) 2018.08.29
728x90
반응형

예외 (exceptional event)

- 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의해 발생하는 오류

- 예) 0으로 나누는 것과 같은 잘못된 연산이나 배열의 인덱스가 한계를 넘을 수도 있고, 디스크에서는 하드웨어 에러가 발생할 수 있다.

- 대부분의 경우, 예외가 발생하면 프로그램이 종료된다. 그러나 무조건 종료하는 것보다 프로그램에서 사전에 오류를 처리하도록 한 후에 실행한다면 더 나은 프로그램이 될 수 있다. 이것을 예외처리라고 한다.


프로그램 오류

- 컴파일 에러 : 컴파일할 때 발생하는 에러

- 런타임 에러 : 실행할 때 발생하는 에러

JAVA의 런타임 에러 - 에러(error)와 예외(exception)


에러는 어쩔 수 없지만, 예외는 처리해야 한다.

 에러(error) -> 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

 예외(exception) -> 프로그램 코드에 의해서 수습될 수 있는 미약한 오류


예외처리의 정의와 목적

 정의 -> 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것

 목적 -> 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

 

<강제 예외>

 고의적으로 0으로 나누어서 강제적으로 예외를 발생시킨다.



예외 처리기

 try 블럭은 예외가 발생할 수 있는 위험한 코드이고, catch블럭은 예외를 처리하는 코드이다.


예외 처리기의 기본 형식

 try {

      // 예외가 발생할 수 있는 코드

  } catch (예외종류 참조변수) { 

       // 예외를 처리하는 코드

  }

  finally {

       // 여기 있는 코드 try 블록이 끝나면 무조건 실행된다. 생략이 가능하다.

  }


<예외처리 1>

 0으로 나누는 예외를 발생시켜 예외처리한다.





<예외처리 2>

 배열의 크기를 벗어나는 경우에 발생되는 예외를 처리한다.




<예외처리 3>

 예외가 발생하지 않은 경우 (Exception : 정확한 예외의 이름은 모를 경우에 사용)




​<예외처리 4>

- try블럭에서 예외가 발생하면, 발생한 예외를 처리할 catch블럭을 찾는다. 첫번째 catch블럭부터 순서대로 찾고, 일치하는 catch블럭이 없으면 예외는 처리되지 않는다.

- 예외의 최고 조상인 Exception을 처리하는 catch블럭은 모든 종류의 예외를 처리할 수 있다. (반드시 마지막 catch블럭이어야 한다.)




finally 블럭

- 오류 발생과 상관없이 항상 실행되어야 하는 코드는 finally 블럭에 넣는다.

- 선택적으로 사용할 수 있으며, try-catch-finally의 순서로 구성된다.

- 예외가 발생한 경우 : try -> catch -> finally의 순서로 실행

- 예외가 발생 안한 경우 : try -> finally의 순서로 실행

- try 또는 catch블럭에서 return문을 만나도 finally블럭은 수행된다.




<finally 블럭 1>

  예외가 발생한 경우




<finally블럭 2>

 예외가 발생 안한 경우




예외의 종류

 Error : 자바 가상 기계 안에서 치명적인 오류가 발생

 RuntimeException : 프로그래밍 버그나 논리 오류에서 발생한다.




 <예외를 처리하는 방법>

① 예외를 잡아서 그 자리에서 처리하는 방법 : 해당 메서드 안에서 try - catch 블럭을 사용하여 예외를 잡고 처리한다.

② 메소드가 예외를 발생시킨다고 기술하는 방법 : 메서드가 발생되는 예외를 바로 처리하지 않고, 자신을 호출한 상위 메서드로 예외를 전달하는 방법. throws를 사용하여 다른 메서드한테 예외 처리를 맡긴다.


예외 생성하기

- 예외는 throw 문장을 이용하여 생성한다.

- new 키워드로 생성하고, throw키워드로 발생시킨다.

1.먼저, 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음

     Exception e = new Exception("고의로 발생시켰음");

2.키워드 throw를 이용해서 예외를 발생시킨다.

      throw e;        throw new Exception("고의로 발생시켰음");


<예외 생성 1>

 Exception 인스턴스를 생성할 때, 생성자에 문자열을 넣어주면 Exception 인스턴스에 메시지로 저장된다. 이 메시지는 getMessage()와 printStackTrace()를 사용하여 출력할 수 있다.




<예외 생성 2>

 참조변수 ae를 통해 생성된 ArithmeticException인스턴스에 접근할 수 있다.




예외 클래스의 계층구조

- 예외 클래스는 크게 두 그룹으로 나뉜다.

  RuntimeException클래스들 -> 프로그래머의 실수로 발생하는 예외 <-예외처리 선택

  Exception클래스들 -> 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 <- 예외처리 필수


- RuntimeException 클래스들 : 배열의 범위 벗어나는 것, 값이 null인 참조변수의 멤버를 호출하는 것, 클래스간의 형변환을 잘못한 것, 정수를 0으로 나누려고 하는것 등

- Exception 클래스들 : 존재하지 않는 파일의 이름을 입력한 것, 실수로 클래스의 이름을 잘못 입력한 것, 데이터 형식이 잘못된 것 등



<예외 클래스 1>

 컴파일 단계에서 발생하는 오류




<예외 클래스 2>

 try ~ catch문으로 예외처리를 해주어야 컴파일이 성공적으로 된다.




<예외 클래스 3>

 예외처리를 하지 않았지만 컴파일은 성공적으로 된다. 하지만 파일을 실행하면 아래와 같이 RuntimeException이 발생하여 비정상적으로 종료된다. RuntimeException 클래스들은 예외처리를 해주지 않아도 컴파일러가 문제삼지 않는다.



728x90
반응형
728x90
반응형


import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;


public class Test {
    public Test() {
    }

    public String getTestString(String test) {
        return test;
    }

    public String execute() throws SecurityException, NoSuchMethodException

                                                , InvocationTargetException, IllegalArgumentException,

                                                IllegalAccessException {
        Class[] types = {String.class};
        Object[] args = {"박한나입니다."};

       

        //getTestString함수를 호출

        Method method = this.getClass().getMethod("getTestString", types);          

        String test = (String)method.invoke(this, args);
        
        return test;
    }

 

 

    /**
     * main
     *
     * @param args String[]
     */
    public static void main(String[] args) {

 

        try {
           Test test = new Test();
           System.out.println(test.execute());

        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }


    }


728x90
반응형

+ Recent posts