식별자
클래스: 첫 문자는 항상 대문자, 의미있는 명사형
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+\
'JAVA' 카테고리의 다른 글
[JAVA]객체지향 프로그래밍(oop), 클래스, 메소드, 객체, 인스턴스, equals(), contentEquals() (0) | 2021.01.05 |
---|---|
[JAVA] 반복문(while, do~while, for), 탈출문(break, continue) (0) | 2021.01.04 |
[JAVA]삼항연산자, 대입연산자, 강제형변환, 자동형변환, printf(), if~else, switch ~ case (0) | 2021.01.01 |
[JAVA]실행원리 (0) | 2020.12.30 |
[JAVA]JAVA 특징, JDK, JRE, JVM , 패키지, 클래스, 객체 (0) | 2020.12.30 |