변수
값을 저장할수 있는 메모리상의 공간입니다.
단 하나의 값을 저장할수 있는 메모리이죠
정수형,실수형,문자형 이있으며
int age ; //age라는 이름의 변수를 언선한겁니다.
(변수타입) (변수이름)
변수의 값을 저장할 때는 대입 연산자를 사용합니다 =
int age = 25
= 이것이 대입 연산자 입니다
한줄에 여러 번수를 선언 할수도 있으며
클래스 변수
인스턴스 변수
지역변수
등 있습니다
(지역변수는 사용되기 전에 초기화를 반드시 해야합니다.)
변수초기화
변수를 사용하기 전에 처음으로 값을 저장하는 것입니다.
year = age + 2000;
year = age + 2000;
year = 14 +2000;
year = 2014
변수에 저장된 값을 사용하려면 그저 변수이름만 적어주면 됩니다. 변수 값을 저장하는 대입연산자는 우변의 모든 계산이
끝난 후에 제일 마지막으로 수행하면 됩니다
변수의 교환
int x =10;
int y 20;
int tmp; //x값을 임시로 저장할 그릇 변수선언
컵이 하나 더 필요한것이라고 생각하면 편합니다
변수의 명명 규칙
모든 이름을 식별자 라고 하며 식별자는 같은 영역 내에서 서로 구분될수 있어야합니다
그리고 식별자는 다음과 같은 규칙을 지켜야합니다.
1.대소문자가 구분되며 길이에 제한이 없다
2.예약어를 사용해서는 안된다.
3.숫자로 시작해서는 안 된다.
4.특수문자는 '_' 와$만을 허용한다
예약어는 클래스,변수,메서드의 이름 등등 사용해서는 안됩니다.
그리고
1.클래스의 이름의 첫 글자는 항상 대문자
변수와 메소드의 이름의 첫들자는 항상 소문자
2.여러 단어로 이루어진 이름은 단어의 첫글자를 대문자로 합니다.
3.상수의 이름은 모두 대문자로 합니다 여러 단어로 이루어진 경우 '_' 로 구분합니다
이건 자바 개발자들 사이의 암묵적인 약속입니다.
변수타입
자료형(String) 문자형(char) 정수형(byte, short, int,long) 실수형(float,double) 등이 있습니다.
기본적으로 8개가 있습니다.
논리형은 1bit 문자형은 2bit를 사용합니다
리터널
상수의 값을 저장하면 다른 값으로 변경을 할수 없습니다.
그럴때 쓰는것이 리터널 이며 선언하는 방법은 변수랑 동일합니다.
변수의 타입 앞에 키워드 fimal을 붙여주면 됩니다.
final int MAX_SPEED = 10;
리터널을 쓰는 이유는 상수를 값을 한번 저장하면 변경할수 없으므로 구분 하기 위해 사용을 합니다.
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101, 077, 0xFF, 100L | L |
실수형 | 3.14, 3.0e8, 1.4f, 0x1, 0p-1 | f, d(생략가능) |
문자형 | 'A', '1', '\n' | 없음 |
문자열 | "ABC", "123", "A", "true" | 없음 |
자바 1.7부터 리터널의 중간에 구분자 '_'를 넣을수 있게 되어서 큰 숫자를 편하게 읽을수 있습니다.
100_000_000
리터널에 소수점이나 10의 제곱을 나타내는 기호는 E 또는 e 그리고 접미사등등 포함하고 있으면 실수형 리터널로 간주됩니다.
자료형 | 실수형 리터럴 | 다른 형태의 동등한 표현 |
double | 10. | 10.0 |
double | .10 | 0.10 |
float | 10f | 10.0f |
float | 3.14e3f | 3140.f |
double | 1e1 | 10.0 |
double | 1e-3 | 0.001 |
타입의 불일치
저장될 변수의 타입과 일차하는것이 보통이지만 타입이 달라도 저장범위가 넓은 타입에 좁은 타입을 넣는것은 허용이 됩니다. 허나 작은타입보다 큰타입을 작은곳으로 저장을 하면 컴파일러 에러가 뜹니다.
형식화된 출력 printf()
소수점 둘째짜리만 출력하고 싶다던가 정수를 16진수나 8진수로 출력하고 싶을때 사용합니다
10진수를 출력할때는 지시자%d 를 사용하며 변수의 값을 지정된 형식으로 변환해서 지시자 대신 넣습니다
System.out.printf("age:%d",age);
printf는 줄바꿈을 하지않습니다 줄바꿈을 할려면 %n을 하셔야 합니다.
이스케이프 시퀀스출력 내용
\' | 작은따옴표 |
\" | 큰따옴표 |
\? | 물음표 |
\\ | 백슬래시(\) |
\a | 경고음 발생 |
\b | 백스페이스(backspace) |
\n | 줄 바꿈(new line) |
\r | 캐리지 리턴(carriage return) |
\t | 수평 탭(tab) |
\v | 수직 탭(tab) |
\f | 폼 피드(form feed) |
왼쪽 정렬은 %-5d 입니다
실수형을 출력할때는 %f ,%g를 붙이고 지수형태로 출력할때는 %g를 붙입니다.
화면에서 입력받기 -Scanner
사용하기 위해선 import java utill.*; 사용해야합니다.
import java.util.Scanner;
public class Fee {
Scanner scanner new Scanner(System.in);
int num = Integer.parseInt(input);
}
프린트ln을 해도 같이 사용하실수 있습니다.
만일 입력받은 문자열을 숫자로 변환하려면 Integer.parseInt() 라는 메서드를 이용해야합니다.
비트(Bit)와 바이트(Byte)
1비트 8개를 묶어서 바이트 단위로 정의 합니다 CPU가 한번에 처리할 수 있는 데이터의 크기를 의미합니다.
2진수 8진수 16진수 등등 변환등을 할수 있습니다.
10진수를 2진수,8진수,16진수로 변환 할 때, Integer 클래스의 함수를 사용하면 쉽게 변환이 가능합니다.
Integer 클래스의 toBinaryString, toOctalString, toHexString 함수를 사용하면 각각 2진수,8진수 16진수로 변환해줍니다.
Integer.toBinaryString(int i), Integer.toOctalString(int i), Integer.toHexString(int i);
return : String
int i = 127;
String binaryString = Integer.toBinaryString(i); //2진수
String octalString = Integer.toOctalString(i); //8진수
String hexString = Integer.toHexString(i); //16진수
System.out.println(binaryString); //1111111
System.out.println(octalString); //177
System.out.println(hexString); //7f
반대로 2진수,8진수,16진수를 10진수로 변환하기 위해선 Integer 클래스의 parseInt를 사용하여 쉽게 변환이 가능합니다.
Integer.parseInt(String s, int n진수);
return : int
int i = 127;
String binaryString = Integer.toBinaryString(i); //2진수
String octalString = Integer.toOctalString(i); //8진수
String hexString = Integer.toHexString(i); //16진수
System.out.println(binaryString); //1111111
System.out.println(octalString); //177
System.out.println(hexString); //7f
int binaryToDecimal = Integer.parseInt(binaryString, 2);
int binaryToOctal = Integer.parseInt(octalString, 8);
int binaryToHex = Integer.parseInt(hexString, 16);
System.out.println(binaryToDecimal); //127
System.out.println(binaryToOctal); //127
System.out.println(binaryToHex); //127
음수의 2진 표현은 음수의 절대값을 2진수로 변환하는 것입니다.
논리형 -boolean
true와 false 중 둘중하나만 저장할수 있으며 기본값은 false 입니다 주로 대답,스위치 등의 논리구현에 주로 사용되고 1bit
만으로도 충분합니다.
문자형 -char
자료형 이며 문자를 저장하기 위한 변수를 선언 해야합니다. '_' 작은 따음표를 쓰며 변수는 단 하나만 저장할수 있습니다.
정수형 -byte, short, int, long
모두 4개의 자료형이 있으며 저장할 수 있는 값의 범위가 서로 다릅니다.
byte < short < int < long
1 2 3 4
타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우 라고 합니다.
최대값인 9999 다음의 숫자는 0000이 될 것입니다. 원래 10000이 되어야 하는대 다섯자리는 표현할 수 없어서 맨 앞의 1은 버려지기 때문입니다 그리고 0에서 1을 뺄수 없으므로 0000 앞에 저장되지 않은 1이 있다고 가정하고 뺄셈을 합니다.
부호 없는 정수 의 경우 표현범위가 0~15
부호 있는 정수의 경우 표현범위 -8~7입니다
형변환
변환은 변수 또는 상수(리터럴)의 타입을 다른 타입으로 변환하는 것입니다.
서로 타입이 다른 값끼리 연산을 해야할 때 타입을 일치시킨 후 연산을 해야하므로 형 변환이 필요합니다.
형 변환의 방법은 아주 간단한데, 형 변환하고자 하는 변수나 리터럴 앞에 타입을 괄호와 함께 붙여주면 됩니다.
// 형 변환 방법 : 타입(피연산자)
double d = 85.4;
int score = (int)d; // double타입의 변수 d를 int타입으로 변환
더블이 인트보다 더 크기 때문에 형변환이 가능합니다, 하지만
큰타입에서 작은타입으로 형변환을 하실 경우 값손실을 생각 하셔야합니다.
Integer.parseInt()
String에서 int 로 반환하는 형변환 입니다.
Double.parseDouble()
String 에서 Double로 형변환 합니다.
이둘은 자주 쓰입니다.
자동 형 변환
서로 다은 타입간의 대입이나 연산을 할 때, 형 변환으로 타입을 일치시키는 것이 원칙입니다.
하지만, 경우에 따라 편의성을 위해 형 변환을 생략할 수 있습니다.
형 변환을 생략 시 형 변환이 이루어지지 않는 것은 아니고, 컴파일러가 자동적으로 추가합니다.
범위가 큰 타입에 작은 타입을 저장하려 하는 경우 자동 형 변환이 이루어집니다.
반대로 범위가 작은 타입에 큰 타입을 저장하려하면 에러가 발생하는데, 이는 값의 손실이 날 수 있기 때문입니다.
double d = 1234; // 에러 X, double d = (float)1234; 와 동일
byte b = 1000; // 에러 O, 1000은 byte 범위(-128~127)을 넘어감
위 byte 예시의 에러를 해결하려면 처음 배운 명시적 형 변환으로 선언하면 해결할 수 있습니다.
명시적 형 변환은 프로그래머가 의도적으로 변환 한 것이기 때문에 값 손실이 있더라도 에러를 발생시키지 않습니다.
연산 시에도 자동 형 변환이 이루어지는데, 연산되는 두 타입 중 더 넓은(큰) 타입으로 형 변환하여 타입을 일치시킨 후 연산합니다.
이는 값 손실의 위험이 더 적기 때문에 올바른 결과를 얻을 확률이 높습니다.
int a = 10;
double b = 1.1 + a; // 형변환을 하지 않아도 더 큰 타입인 double형으로 연산되어 반환
- 자동 형 변환의 규칙
기존의 값을 최대한 보존할 수 있는 타입으로 자동 형 변환합니다.
1. boolean을 제외한 나머지 7개의 기본형은 서로 형 변환이 가능합니다.
2. 기본형과 참조형은 서로 형 변환할 수 없습니다.
3. 서로 다른 타입의 변수간에 연산은 형 변환을 하는 것이 원칙이지만,
값의 범위가 작은 타입에서 큰 타입으로의 형 변환은 생략할 수 있습니다.
'JAVA > 자바 문법' 카테고리의 다른 글
if,for,while /try-catch (0) | 2023.04.10 |
---|---|
배열 (2) | 2023.02.21 |
연산자 (0) | 2023.02.20 |