C와도 관련깊은 JAVA의 기본
- 대소문자를 구분하며 길이에 제한을 두지 않는다.
- 예약어는 사용할 수 없다.
- 숫자로 시작할수 없다.
- 특수문자는 '_' 와 '$'만 허용한다.
예약어
abstract | do | implements | private | this |
boolean | double | import | protected | throw |
break | else | instanceof | public | throws |
byte | extends | int | return | transient |
case | false | interface | short | true |
catch | final | long | static | try |
char | finally | native | strictfp | void |
class | float | new | super | volatile |
continue | for | null | switch | while |
default | if | package | synchronized |
권장사항
- 클래스 이름의 첫 글자는 항상 대문자로 한다.(변수나 메소드는 소문자)
- 여러단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
- 상수의 이름은 모두 대문자로 한다. 여러 단어는 '_'로 구분
변수의 타입
1) 기본형 - 논리(boolean), 문자(char), 정수(byte, short, int, long), 실수(float, double) / 8종
2) 참조형 - 기본형을 제외한 나머지, 객체의 주소를 저장
변수의 타입으로 클래스의 이름을 사용할수 있다.
연산자
우선순위
산술 > 비교 > 논리 > 대입
단항 > 이항 > 삼항
단항연산자
++(증가) / --(감소) : 피연산자의 값을 1 증가/감소 시킨다.
- 전위 - 값이 참조되기전에 증가
- 후위 - 값이 참조된 후에 증가
+ / - : 피연산자의 부호 변경
- 논리/문자 형을 제외한 나머지 기본형에 쓸수 있다.
~(비트 연산자) : 정수형과 문자형에만 사용
- 0은 1로, 1은 0으로 바꾼다.
- 비트전환 하면 피연산자의 부호가 바뀐다.
!(논리부정) : 논리형에만 사용 true->false / false->true
산술연산자(이항연산자)
- 사칙연산(+-*/) 나머지연산(%) 쉬프트연산(<<,>>,>>>)
- 크기가 4byte이하인 자료형을 int로 변환한다.
- 피연산자의 타입을 일치시킨다.
비교연산자(이항연산자)
- 비교에 사용
- 조건문과 반복문의 조건식에 사용
- 결과는 참/거짓
논리연산자(&&, ||)
|| - 한쪽이 참이면 참
&& - 둘다 참이어야 참
삼항연산자(? :)
(조건식) ? 식1 : 식2
(x<0) ? x : -x
조건식이 참이면 식1을 / 거짓이면 식2를 반환
대입연산자(=, op=)
연산결과를 대입
i = i + 3; => i += 3;
op= : +=, -=, *=, /=, %=...등등등...
조건문과 반복문
C언어와 다른것 없음.
자바 5.0버전에서 추가된것.
향상된 for 순환문:
for(String name : nameArray) { 반복할 코드(순환문 코드) }
-> nameArray에 들어있는 각 원소에 대해, 원소를 name 변수에 저장하고 순환문 코드를 실행시킨다.
-> name이라는 String변수를 만들고 그 값을 null로 한다.
-> nameArray의 첫 번째 값을 name에 대입한다.
-> 순환문 코드를 실행한다.
-> nameArray의 다음 값을 name에 대입한다.
-> 배열에 원소가 남아있으면 위 작업을 반복한다.
배열
배열의 선언
*역참조변수로 선언된다.
1) 타입[] 변수이름
int [] score;
String[] name;
2) 타입 변수이름[]
int score[];
string name[];
배열의 생성
new 연산자를 이용하여 배열의 타입과 크기를 지정해 주어야 한다.
int [] score; //선언
score = new int[5]; //생성
>>int [] score = new int[5]; //한줄로 줄일수 있다.
* 배열도 객체 : 멤버변수와 메소드를 갖고 있다.
멤버변수 length : 배열의 크기값을 반환한다.
배열은 한번 생성되면 중간에 그 크기를 변경할 수 없다.
생성이 이루어지고 나서야 저장공간이 생긴다.
각 배열요소는 자동적으로 int의 기본값인 0으로 초기화 된다.
대입연산자(=)로 배열의 주소를 배열 역참조변수 score에 저장한다.
변수 타입에 따른 기본값
* 기본형 변수는 거짓, 0 ,
참조형 변수는 NULL 값을 갖는다.
배열의 초기화
- 기본값으로 초기화 되지만 원하는 값으로 초기화 하기 위해.
- 각 요소마다 초기화 하는 방법도 있지만 좀더 편하게 할수 있다.
int[] score = { 100. 90. 80. 70. 60 };
int[] score = new int[] { 100, 90, 80, 70, 60 };
배열의 크기는 따로 지정하지 않으면 주어진 값의 개수만큼 결정된다.
public class ArrayEx1 {
public static void main(String[] args) {
int sum = 0; //변수 선언과 초기화
float average = 0f;
int [] score = {100, 88, 100, 100, 90}; //배열의 선언, 생성과 초기화
for(int i=0; i<score.length; i++) { //for문을 이용하여 각 요소의 값들을 연산한다.
sum += score[i]; //덧셈 누적 연산
}
average = sum/(float) score.length;
System.out.println("총점: " + sum);
System.out.println("평균: " + average);
}
}
배열의 복사
배열은 한번 생성하면 크기를 변경할 수 없기 때문에 저장공간이 더 필요하다면
더 큰 배열을 만들어 내용을 복사해야 한다.
public class ArrayEx8 {
public static void main(String[] args) {
int [] number = { 0, 1, 2, 3, 4, 5 }; //길이가 6인 배열
int [] newNumber = new int[10]; //길이가 10인 배열
for(int i=0; i<number.length; i++) {
newNumber[i] = number[i]; //number의 각 요소의 값을 새로운 배열에 복사한다.
}
for(int i=0; i<newNumber.length; i++) {
System.out.print(newNumber[i]);
}
}
}
- 결과 : 0123450000
새로운 배열은 0으로 초기화되어 있다.
arraycopy 메소드
- 간단하게 배열을 복사할 수 있다.
- 배열에 있는 값만 복사하기 때문에 참조변수 배열인 경우
주소값만 복사할 뿐 참조변수가 가리키는 객체를 복사하지는 않는다.
public class ArrayEx9 {
public static void main(String[] args) {
char [] abc = {'A', 'B', 'C', 'D' }; //배열 선언, 생성, 초기화
char [] number = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
System.out.println(new String(abc));
System.out.println(new String(number)); //각 배열 출력
char [] result = new char[abc.length + number.length];
//두 배열길이를 더한 만큼의 길이를 가진 새로운 배열 생성
System.arraycopy(abc, 0, result, 0, abc.length);
//배열 abc의 값을, abc배열 0번째부터, result배열, 0번째 위치에, abc배열 길이만큼복사
System.arraycopy(number, 0, result, abc.length, number.length);
System.out.println(new String(result));
System.arraycopy(abc, 0, number, 0, abc.length);
System.out.println(new String(number));
//지정된 위치에 원하는 값을 복사.
System.arraycopy(abc, 0, number, 6, 3);
System.out.println(new String(number));
}
}
결과 -
ABCD
0123456789
ABCD0123456789
ABCD45ABC9