C언어를 배웠기 때문에 많은 내용이 생략되어 있음. 하나의 언어를 배우면 다른 언어 이해가 수월해진다는게 이 얘기 였나봅니다.
첫 언어로 java공부를 하시는 분이면 <명품 JAVA programming>을 참고 하시면 됩니다. (이 책보면서 내용 정리하는 중이므로 제 정리 내용과 함께 보든
지, 그냥 책만 보시든지)
책을 구매하시는게 부담스러울 수 있습니다. 저 역시 옛날엔 책 값에 뜨억해서 책 구매보단 어둠의 경로를 통해 얻으려 했지만,
요새는 새 책을 사는 편입니다.(집안 사정이 어렵다면 도서관이나 중고책등을 활용하시거나 인터넷을 이용해 자료를 구해보세요 ㅠ)
책을 만드는 사람이 최소 몇 년이상 쌓은 관련 분야 지식과 집필 노력,
책을 읽고 난 뒤에 얻어서 내 머릿 속에 남은 지식의 활용 가치,
등을 생각해보면 비싸다기 보다는 싸다는 생각까지 들더군요.(사실 자신의 생각을 공유하기 위해 집필해주신 것 자체에 감사하다는 ㅠ)
서론이 길었네요. 공부 메모 시작합니다.
package hello2;
public class Hello2 {
public static int sum(int n , int m) {
return n+m;
}
public static void main(String[] arg) {
int i = 20;
int s;
char a;
s = sum(i,10);
a = '?';
System.out.println(a);
System.out.println("Hello2");
System.out.println(s);
}
}
메소드 ㅡ C언어에서 함수에 해당.(처음 프로그래밍은 커녕 아무것도 모른 상태로 c언어 배울 때, 메소드, 함수 막 섞어서 설명해서 혼란스러웠음. 일반적으로 C언어에선 함수라고 하는게 맞음. 그러나 섞어서 쓰는 사람들도 있음.)
ex) main 메소드, sum 메소드
지역(local) 변수 - 메소드 내에 선언된 변수 //전역 변수에 대한 얘기는 없지만 public class 상에 선언된 변수가 아닐까. C와 달리 변수들이 전부 Class나 메소드 안에 포함되어야 한다고 했으니까)
블록 ㅡ ' { '으로 시작해서 ' } '으로 끝남
System.out.printIn("Hello2"); <----- " "안에 내용이나 타입 데이터 출력 후 다음 줄으로 이동함
* 식별자 규칙
cf. 식별자(identifier) - 클래스, 변수, 상수, 메소드 등에 붙이는 이름 ex) 위 예에서 Hello2, sum, main, i , s, a,
-특수문자 중 '_'(under-hypen) , '$' 사용가능 , 공백 불가
-식별자로 한글 사용가능
-자바 키워드 x, 식별자 첫문자 숫자 x. 특수문자는 첫 번째 문자로 사용가능하나, 쓰지 않는게 일반적
-대소문자 구별
-길이 제한 x
cf. 자바 키워드 ㅡ "예약어" 라고도 함
*이름 붙이는 관습(이런거 협업할 때는 배려지)
클래스 이름 ㅡ 첫 문자를 대문자하고 단어 첫문자들을 대문자로. ex) HelloWorld
변수,메소드 이름 ㅡ 첫 문자 소문자하고 단어 첫문자들은 대문자로
상수 이름 ㅡ 모든 문자를 대문자로
*데이터 타입(기본타입 8개 + 레퍼런스 타입 1개(3종류로 갈림))
-기본 :
타입 |
논리 타입 |
문자 타입 |
정수 타입 |
실수 타입 | ||||
표기 |
boolean |
char |
byte |
short |
int |
long |
float |
double |
타입 크기(byte) |
1 |
2 |
1 |
2 |
4 |
8 |
4 |
8 |
표현 범위 |
true , false |
Unicode |
-128~127 |
-32,786~32,767 |
-2^31~2^31-1 |
-2^63~2^63-1 |
-3.4E38~3.4E38 |
-1.7E308~1.7E308 |
실수의 표현 범위는 수의 과학적 표기법에 따른 것임
cf. 플랫폼 독립적이라서 운영체제나 cpu처리능력에 상관없이 데이터 타입의 크기가 일정함.
-레퍼런스 (배열 | 클래스 | 인터페이스 중 하나에 대한 레퍼런스) : C언어의 포인터와 유사한 개념
클래스에 대한 레퍼런스 ㅡ> 객체에 대한 주소 값 정도로 하고 넘어가기 . 추후 자세히 다룸
*리터럴(literal) ㅡ 직접적으로 표현 되는 상수 값을 말함. ex) 5, 21, '!' , 'a' , 42.195 등등
#정수 타입 리터럴
-표현방식
15, 015, 0x15 는 각각 다른 값
15는 10진수의 15
015는 8진수 표기로, 10진수 값으론 13
0x15는 16진수 표기로, 10진수 값으론 21
-자바에서 모든 정수타입 리터럴은 int타입으로 인식됨. 리터럴을 long타입으로 인식되게 하려면 대/소문자 L 을 숫자 뒤에 붙이면 됨
ex) 45L, 123l
#실수 타입 리터럴
-표현방식
같은 줄에 있는 것은 같은 표현이다
12. 12.0
.1234 0.1234 1234E-4
-자바에서 모든 실수타입 리터럴은 double로 인식됨. float로 인식되려면 f, F 를 수 뒤에 붙이면 됨.
명시를 위해 d,D로 double임을 나타내기도 한다.
#문자 타입 리터럴
-표현 방식
1. ' ' (인용부호)안에 문자 하나로 표기
2. 유니코드식 표기 \u 뒤에 4자리 16진수.
\u0041 ㅡㅡ> 'A'
\uae00 ㅡㅡ>'글'
#특수문자 리터럴 , 이스케이프 시퀀스(escape sequence)
http://twinstarbox.tistory.com/entry/Java-Escape-Sequence-%EB%AC%B8%EC%9E%90
#논리 타입 리터럴
ture와 false
cf. boolean 타입이 변수가 갖는 값 : 참,거짓 뿐
# 그 외
null 리터럴
어떠한 레퍼런스 타입에서든 값으로 사용가능
기본 타입을 제외한 어떠한 타입의 변수에도 대입 가능.
int n = null; // 오류. 기본타입에는 null 값 지정 불가
String str = null; // 정상 문자열은 기본 타입이 아니고 String 객체가 저장하는 값임.
문자열 리터럴
ex) "Good" , "자바", "a" // a문자 하나지만 " "안에 있으면 문자열
*상수
상수는 변수처럼 생겼지만, 변수와 달리 프로그램 실행 중에 값이 바뀌지 않는 값이다.
final 데이터타입 상수이름 = 초기값 ; 의 형태로 쓰인다.
ex) final int PRICE = 10;
*타입 변환
1. 자동 타입 변환 (implicit)
데이터가 그대로 보존 되는 자동 타입 변환
byte >> short/char >> int >> long >> float >> double
ex)
long a ;
byte b;
a = b ; <ㅡㅡㅡㅡ 자동 타입 변환/암시적 변환
2. 강제 타입 변환 (explicit)
위에 제시된 순서의 역방향으로 데이터를 담는 경우(ex)long값을 int에 넣는 것) 데이터가 손실될 가능성이 있으므로 java가 허용하지 않음.
넣고 싶다면 명시적으로 변환함을 표현해줘야 함
ex)
short var;
int n = 855638017;
var = (short) n ; <ㅡㅡㅡㅡ강제 타입 변환, ( ) 안에 변형하려는 타입을 적는다.
package type_change;
public class Example_typechange {
public static void main(String[] args) {
byte b = 127;
int i = 100;
//자동 타입 변환 (암시적 변환)
System.out.println(b+i);
System.out.println(10/4);
System.out.println(10.0/4);
//값중에 더 큰 그릇을 가진쪽으로 변형됨 byte보다 int가 크니까 int로 변환
//두 수가 모두 int라서 결과도 그냥 int로 변환 . 참고로 정수 타입 리터럴은 자연스럽게 int타입으로 처리됨
//10.0은 실수타입 리터럴로 double타입으로 처리되고, 4는 int로 처리됨 . 그래서 더 큰 double값으로 자동 타입변환
//강제 타입 변환 (명시적 변환)
System.out.println((char)0x12340041);
//16진수를 유니코드로 \u0041 이 'A'에 해당된다는 건 아는데 0x1234는 왜 붙지?
System.out.println((byte)b+i);
//예제에는 -39가 출력 되는 것으로 나오는데, 227 그대로 출력됨..
System.out.println((int)2.9+1.8);
System.out.println((int)(2.9+1.8));
System.out.println((int)2.9+(int)1.8);
//이 세개의 println으로 추측하면,
//괄호가 없으면 연산보다는 형변환이 우선하고,
//형변환은 괄호로 묶이지 않으면 가까운 하나의 상수를 바꾼다.
}
}
출력 결과
227
2
2.5
A
227-------------> 원래 byte가 -128~127 범위라 -29가 출력되야 하는데, 내부적으로 byte를 unsigned byte로 바꾸는 무언가가 있나
3.8
4
3
'자바' 카테고리의 다른 글
3-3. main() 과 예외처리 (0) | 2018.06.03 |
---|---|
3-2. 배열 (0) | 2018.06.03 |
3-1. 반복문 (0) | 2018.06.02 |
2-2. 자바 기본 프로그래밍 (공부메모) (0) | 2018.05.31 |
1. 자바 시작 (공부 메모) (0) | 2018.05.27 |