식별자

클래스: 첫 문자는 항상 대문자, 의미있는 명사형

ex) class Student{ ... }

변수: 첫 문자는 항상 소문자, 의미있는 명사형 

ex) String name;

메서드: 첫 문자는 항상 소문자, 의미있는 동사형, 하나 이상의 단어가 합쳐질때 두 번째 오는 단어의 첫 문자는 대문자로 표현

ex) public String getName(){ ... }

상수: 모든 문자를 대문자로 표현, 하나 이상의 단어가 합쳐질때 _를 사용하여 연결,

          변수 앞에 final이라는 예약어 선언을  통해 변수의 값이 상수화된다

ex) final int TOTAL_COUNT = 10; 

 

예약어

자바 언어에서 사용하기 위해 예약해 놓은 식별자

예약어는 식별자로 사용할 수 없다

ex) abstract, if, implements, else ...

 

변수

데이터의 저장과 참조를 위해, 메모리 공간에 붙인 이름 

int num;
//정수형 데이터를 저장할 메모리 공간을 할당
//그 공간에 접근하기 위해 num이라는 이름 부여
int num;
num=10;
//변수 선언 후 값 저장
int num=10; 
//변수 선언과 동시에 값 초기화

 

변수의 종류

로컬 변수

: 메서드 안에서 선언된 변수, 메서드 호출시 생성된다, 사용전 반드시 초기화 해야함

인스턴스 변수(=멤버 변수)

: 메서드 밖에서 static 없이 선언된 변수, 객체 생성시 생성된다,

  초기화하지 않으면 기본값으로 설정된다, 객체 생성시 매번 생성된다 

클래스 변수

: 메서드 밖에서 static 으로 선언된 변수, 프로그램 생성시 생성된다,

  초기화하지 않으면 기본값으로 설정된다, 단 한번 생성된다

public class BoxTest{
	static int width = 50; //클래스 변수
	int height = 30; //인스턴스 변수
    
    public static void main(String[] args){
    	int d = 5;
        
        BoxTest box = new BoxTest(); //객체 생성
        int vol= box.calVol(d);
        System.out.println("volumn: "+v);
    } 
    public int calVol(int d){
    	int depth=d;
		int vol=width*height*depth; //로컬변수는 메서드 실행 후 소멸한다
		return vol;
    }
}

 


정수 표현방식

1바이트 기준, 

양수) 첫번째 비트가 0( (+) 부호), 나머지 일곱비트는 데이터의 크기를 나타냄

음수) 첫번째 비트가 1( (-) 부호), 나머지 일곱비트의 2의 보수

 

실수 표현 방식

무한대의 실수를 모두 표현할 수는 없으므로 범위안에서 지정된 값만으로 표현이 가능

ex) double num1=1.0000001; 

     -> num1은 1.0000001과 가장 가까운 수로 지정된다

 

 

기본 자료형 8가지

정수형 byte 1byte
short 2byte 
int 4byte
long 8byte
실수형 float 4byte
double 8byte
논리형 boolean 1bit
문자형 char 2byte

*1byte = 8bit

 

 

자바에서 기본적으로 정수형 연산은 int형으로 한다

short num1 = 11;
short num2 = 22;
short result = num1 + num2;
System.out.println(result); //오류 발생

실행 과정) 연산을 위해 num1과 num2가 우선 int형으로 변환된다. 그 후 계산된 결과값이 result 변수에 들어가야

되는데, 이때 결과값은 int형이고, result 변수는 short형이므로 오류가 발생한다.

=> 연산의 과정을 거치는 정수형은 int형으로 선언하자

 

byte, short

연산은 거의 하지 않지만 매우 많은 숫자 데이터를 저장해야되는 프로그램 등에서 쓰임

 

long

정수데이터 뒤에 L 또는 l을 표시해야한다

ex) long no = 1234567890000L; 

 

float vs double 

float형 데이터의 경우 소수점 이하 6자리까지 오차가 발생하지 않고

double형 데이터의 경우 소수점 이하 15자리까지 오차가 발생하지 않는다

하지만 두 개 이상의 실수 데이터의 연산의 경우는 그 이전에 오차가 발생할 수 있다

 

float형에 소수점이 있는 데이터를 저장하려면 마지막에 f를 붙여한다. 

ex) float fno=5.3f;

 

char

short와 같이 2byte이지만 char은 (-)값이 포함되지 않는다

범위: 0~65,535

컴퓨터는 2진수체계이므로 문자를 저장할때 모두 숫자로 변경하여 저장한다

A(65), a(97) ... 

char c1='A';
char c2=65;//아스키코드
char c3='\u0041'; //유니코드(16진수)
System.out.println(c1);//A
System.out.println(c2);//A
System.out.println(c3);//A

 

boolean 

소문자만 입력가능(true, false)

boolean b1=true; 
boolean b2=2>3;
System.out.println("b1="+b1+",b2="+b2);//true,false

 


연산자

산술연산자

: +, -, *, /, %

 

증감연산자

: ++, --

형식)  ++(--)변수=>전위연산자=>먼저 계산이 되는 경우
       변수++(--)=>후위연산자=>나중에 계산이 되는 경우

int d=4;
int e=d++; //e=4
int f=++d; //f=6

 

관계연산자

: >,>=,<,<=, ==(같다) !=(같지 않다.)

 

논리연산자

: &&(논리 AND), ||(논리 OR), !(논리 NOT)

int num1= 10;
int num2= 11;
boolean result;

//num1이 1~100사이의 수인가
result= (1 < num1) && (num1 < 100);//true

//num2가 2또는 3의 배수인가
result= ((num2 % 2) == 0) || ((num2 % 3) == 0);//false

//num1이 0인가
result= !(num1 != 0);//false

 

비트 연산자

: &(비트 단위 AND), |(비트 단위 OR), ^(비트 단위 XOR), ~(모든 비트를 반전)

 

&

: 비교 대상이 되는 두 비트가 모두 1인 경우에만 1을 반환하여 연산 결과를 구성한다

n1  0 0 0 0 1 1 0 1
n2  0 0 0 0 0 1 1 1
result  0 0 0 0 0 1 0 1

 

|

: 비교 대상이 되는 두 비트 중 하나라도 1이면 1을 반환하여 연산 결과를 구성한다 

n1  0 0 0 0 1 1 0 1
n2  0 0 0 0 0 1 1 1
result  0 0 0 0 1 1 1 1

 

^

: 비교 대상이 되는 두 비트의 값이 서로 다른 경우엔 1을, 같은 경우에는 0을 반환하여 연산 결과를 구성한다

n1  0 0 0 0 1 1 0 1
n2  0 0 0 0 0 1 1 1
result  0 0 0 0 1 0 1 0

 

~

: 모든 비트를 반전시켜 얻은 결과를 반환한다

n1  0 0 0 0 1 1 0 1
result  1 1 1 1 0 0 1 0

 


예제 

1)

int num1=10, num2=20, num3=30;
num1=num2=num3;
System.out.println(num1);//30
System.out.println(num2);//30
System.out.println(num3);//30

2)

int num1=0;
int num2=0;
boolean result;

result = ((num1+=10)<10) && ((num2+=10)>10); 
System.out.println("num1="+num1+"\t num2="+num2+"\t result="+result);
//num1=10  num2=0  result=false 
result = ((num1+=10)>0) || ((num2+=10)<0);
System.out.println("num1="+num1+"\t num2="+num2+"\t result="+result);
//num1=20  num2=0  result=true

num2의 값이 증가하지 않은 이유? 
&&, || 모두 왼편의 연산이 먼저 진행된다. 이때 &&의 경우 false && (..) 가 되므로 오른편의 연산과 상관없이

결과는 무조건 false가 되므로, 오른편 연산을 진행하지 않고 결과를 반환하여 num2의 값은 변하지 않게 된다.

 

3)

//n1>n2>n3 이면 true 반환? 
int n1=10, n2=20, n3=30;
boolean result = n1>n2 && n2>n3;//false

  


 

실행취소=> ctrl+z

전체선택 후 자동으로 들여쓰기 하기(자동 탭)=> ctrl+a , ctrl+shift+f  (format의 f)

범위지정 후 주석달기=> ctrl+shift+/

범위지정 후 주석해제=> ctrl+shift+\

 

+ Recent posts