으나님의 잡다한 개발상식
(JAVA) 기초 본문
1. 변수
[1] 정의
변하는 수. 하나의 값을 저장할 수 있는 기억공간(=자료구조)
[2] 타입
//타입이 지정되어야 하는 언어 : java, c++, c..
//이 static type은 어떤 값이 문자인지 숫자인지 논리인지 개발자가 직접 지정해야 한다.
//앞에 타입명을 먼저 제시하고 그 다음 내가 쓰고 싶은 이름을 적음
//'type name = 값'의 형태
//이 경우 '='은 같다는 것이 아니라 저 값으로 초기화한다는 뜻임
//문자 하나를 표시할 때는 홑따옴표('')를 씀
//타입을 지정하는 이유는 타입을 지정하면 저장공간을 지정할 수 있기 때문임.
//각각의 메모리 크기가 정해져 있는데 넘치는 걸 하면 에러가 남.
//이 경우 명시적 선언을 함
(1) 기본형
실제 값을 저장
1)문자
char(일반적으로 1byte = 8bit) : 문자 한 개
2) 숫자
- 정수 : byte, short, int(4byte), long
- 실수 : float(4byte), double(8byte)3) 논리
-boolean(1byte) : C에는 없는 것. True / False로 나누는 것
(2) 참조형
- 기본형이 아닌 나머지(String, System 등)
- 대문자로 시작함(=class)
- 객체의 주소를 저장
- 참조형을 선언할 때는 'new'를 붙임
ex) String str = new String("abc")
String str = "abc"도 되긴 한데 위의 과정을 간단히 표현한 것(?)
[3] 변수명 명명규칙
(1) 대소문자 구분되고 변수의 길이에는 제한이 없다. 변수명은 첫 문자를 대문자로 쓰지 않는다(나중에 객체랑 헷갈릴 수 있어서).
(2) 예약어를 사용해선 안 된다. 이미 선언되어 있는 문구들
ex) int char
(3) 숫자로 시작해서는 안 된다.
(4) 특수문자는 '_'와 '$'만 사용한다.
(5) 클래스 이름은 항상 첫 글자를 대문자로 함(권장, 근데 안하면 나중에 이게 변수인지 클래스인지 헷갈릴 수 있어서)
- 변수와 메서드 이름의 첫 글자는 항상 소문자로 한다.
(6) 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
ex) lastIndexOf, StringBuffer
3. 상수의 이름은 대문자로 한다. 단어는 '_'로 구분한다.
- PI, MAX_NUMBER
- 자바에서는 상수로 지정할 것은 앞에 'const, final'를 붙인다.
ex) const int A = 1; 이러면 A는 항상 1인 것임. 여기서 int A=2를 선언하면 에러가 남.
[6] 변수, 상수, 리터럴
(1) 변수 : 하나의 값을 저장하기 위한 공간
(2) 상수 : 한번만 값을 저장할 수 있는 공간
(3) 리터럴 : 그 자체로 값을 의미하는 것
[7] 리터럴 접미사
- int hex = 0x100(16진수 수임, 0x~는 16진수)
- int oct = 0100 == 64(0~ 은 8진수임 앞에 0 붙으면)
- long l = 1000000L; (롱 형에는 끝에 'L'붙여야 함)
- float f = 3.14f (flat형에는 뒤에 'f'붙여야 함, f가 없으면 더블형으로 인식되어서 오류가 남)== float f = (float)3.14; ->명시적 형 변환
- double d = 3.14d = (double) 3.14 더블은 접미사 생략 가능
- 10. -> 10.0
- .10 -> 0.10
- 10f -> 10.0f
- float f = 10.f == (float)10.0
- 3.14e3f == 3.14*10의 3승==3140.0f
※ c언어는 아스키코드, char은 1byte // 자바는 유니코드, char는 2byte
※ 기본형 변수의 초기값은 0이고 참조형 변수의 초기값은 null이다.
ex) int score; 이렇게 돌리면 0 나옴
Spring score; 이렇게 돌리면 null 나옴
변수 선언할 때 어떤 값을 지정해서 초기화한다.
[8] 명시적 형변환(type casting)
ex) float sum;
int A = 4;
float C = 3.14f;
sum = (float)A + C
이렇게 형변환을 해야 계산이 가능
[9] 문자와 문자열
char ch='' //에러 아스키코드랑 유니코드에 없어서
String s1="" //가능
char ch='AB' //에러 아스키코드랑 유니코드에 없어서
""+7+7 -> "7"+7 -> "7"+"7"->"77"
7+7+""-> 14+""->"14"
""+(int)(7+7)
""+(String (int)(7+7))
[10] 오버플로우
byte b = 127;
byte b = 128 //에러
byte는 2의 7승까지 표현 가능하지만 1bit는 부호로 쓰므로 127까지만 표현 가능
정해진 범위를 넘어버리는 경우를 오버플로우라고 함
//
<실전 예제>
1) 6.12345를 소수점 둘째자리만 남기기
float sosu2 = (int) (6.12345*100);
System.out.println(sosu2/100);
2) 6.12345를 소수점 셋째자리에서 반올림하기
float sosu3 = 6.129645f;
int jud = ((int)(sosu3*1000))-((int)(sosu3*100)*10);
if (jud>=5) {
System.out.println((float)(int)(sosu3*100+1)/100);
}else {
System.out.println((float)(int)(sosu3*100)/100);
}
'JAVA' 카테고리의 다른 글
(JAVA) method (0) | 2019.11.23 |
---|---|
(JAVA) 반복문에서 label 사용하기 (0) | 2019.11.22 |
(JAVA) String split으로 쪼개서 2차원 배열로 만들기 (0) | 2019.11.22 |
(JAVA) 조건문 (0) | 2019.11.06 |
(JAVA) 연산자 (0) | 2019.11.06 |