---------조건문, 반복문-----------
프로그램의 실행,흐름을 제어하는 두가지 방법
1. 조건문 : if, switch
2. 반복문 : for, for in, while, do ~ while
3. 특이한 애들 : break, continue, lablebreak(goto문형식)
if 키워드를 이용한 조건문 : true 나 false만 된다.
부명령문(substatement):다른명령문안에포함된 명령문.
반복문(interative statement):주어진 일을 반복하는 명령문
while 안에 값을 false로 되는 값을 주어야 끝나게 된다.
예 : num= num + 1;을 while안에 넣음
while 안에 true를 넣는 등의 무한반복 실수를 하지 말것.
4. 블록, 영역(block) : 명령문들을 중괄호로 둘러싼 것. 매우 중요. 변수의 생존범위를 정함.
5. 주석(comment):
- /* */ 안에 여러문장들은 다 주석이 된다.
- //는 한줄주석
- /** */ 아큐먼트 주석. 문서화 주석. API만들때 쓰임.javadoc만들때 쓰임
6. 공백문자:스페이스(SP),탭(HT)horizontal tab, ,줄바꿈 문자(CR, LF),Carrige Return, Line ...새페이지문서 (FF)
7. 로컬변수 : 메소드 안에 선언한 변수가 아니고 블럭 안에서 선언된 것들을 말함. class블럭만 제외. 종류는 3가지가 있다.
8. Java변수의 종류 3가지:
-1) Static 변수(=class변수) : 정적변수, 클래스로 접근함
-2) Dynamic 변수(=객체변수,=object변수,=member변수 ), object로 접근함.
멤버변수는 Static 멤버변수와Dynamic 멤버변수(Nonstatic)로 나뉜다.
예) class 안에, main위에 선언된 변수 : 멤버변수
-3) local변수(지역변수)
C에는 지역변수, 전역변수가 있지만 java는 전역변수가 없다.
Static, non-static, local은 사는곳이 다르다.
static은 class영역에 산다.
local은 Stack영역에 산다.
객체는 heap영역에 산다.
실행순서 : static(클래스,static)->heap(객체)->stack(local)
9. local변수 :
-1) 는 클래스 로딩시 메모리에 올라옴
-2), 3) 는 런타임(실행)때 메모리에 올라옴
메모리에 올라오는 순서: 1)->2)->3)
static 안에서 non-static은 사용이 안된다.
static{
int ssi = 200;
}
하면 static{}안에 내용은 모두 static변수가 된다.
10. 컴파일 타임 : *.java->*.class 변환될때
11. 클래스로딩타임 : *.class를 기계어로 바꿀때 (static 자리 만든다, jvm이 실행종료될때까지 메모리에 남아있음)
13. runtime(실행시간) : heap과 stack메모리에 올릴때 (stack과 heap은 가변적으로 생기고 없어짐, static 메모리를 공유함)
14. String args[] 도 로컬변수.
선언문 기본형식 1. 타입 식별자; 2. 타입 식별자=초기값;
여러 변수를 한꺼번에 short s1, s2;처럼 사용하지 말고 2줄에 나눠서 사용해야 알아보기 쉽다.
15. 자바는 100% 순수한 객체지향 언어가 아니다.
--그 이유로 프리미티브 타입의 byte, short, int, char.... 등 기본형의 8가지 데이터 형이 있는데 이것은 객체가 아니다.
--자바의 자료형은 기본형과 참조형의 2가지가있다.
16. 기본형(primitive type) : 8가지,
- byte : 1byte,
- short : 2byte,
- int : 4byte,
- long : 8byte ,
- float : 4byte , 숫자뒤에f넣으면 4byte float
- double : 8byte , 숫자뒤에d를넣거나 안넣으면 8byte double
- char : 2byte양의정수,
- boolean : true/false
**객체형으로 만들지 않은 이유: 속도가 빠르기 때문. 객체로 만들면 속도가 느리다.
-자바는 2byte unicode체계이다.그러므로 char는 2byte이다.
-참조형(reference type) : 무제한, 만들면된다.
-변수를 넣을땐 항상 type를 생각해야된다. type가 다르면 오류가 난다.
17. 식별자 명명 규칙
- $date나 _date는 된다. da ta 같이 공백이나 _와$외에 특수문자는 사용하지 못 한다. true,false,null도 안됨
- 상수값은 대문자로 넣는 관례가 있다. 예 : MAX_NUM
18. final변수의 3가지 용법
- final변수가 class에 쓰일때 : 상속불가
- final변수가 method에 쓰일때 : overriding불가
- final변수가 variable(변수)에 쓰일때 : 초기화 한 후에는 값 변경 불가
- 컴파일시 오류는 error
- 실행시 오류는 exception
-ComplexAssing연산자(복합연산자) : +=등등 계열
-증가연산자 num++감소연산자num--가 num=num+1보다 빠르다. 임시로 저장할 공간이 필요 없기 때문.
-전치증가연산자 ++num /후치 증가 연산자num++
-num2 = num++; // num의 값이 저장 된 후 num++이 수행된다.
-num3 = --num; // --num이 연산이 된 후 num3에 저장된다. OpTest1.java 참조
자바의 배열
1. 정적배열 : 크기가 고정되어있다. 선언 후에 크기를 지정한 후에 사용가능하다. 크기가 할당되면 절대로 바꿀 수 없다. 속도가 빠른대신 유연하지 못하다.
동적배열 : 스크립트언어 등이 된다. 자바는 안된다.
2. 배열내에 기본형/참조형 한가지 타입만 담을 수 있다. int면 int, String이면 String만 배열에 담을 수 있다.
예: 스크립트언어의 ECMA배열은 동적 배열이라 아무거나 다 담고 크기도 맘대로 변할 수 있다.
- 동적 배열 : [문자'c'][숫자1][객체][][][크기새로증가][][][]... 속도가 느리다.
- 정적 배열 : 1000번지[1]1004번지[2]1008번지[3] 속도가 빠르다.
**배열은 왜 필요한가? : 변수를 많이 만들어야 될 경우 많은 이름들을 만들어야되는데 배열을 사용하면 하나의 이름으로 사용할 수 있다.
main배열 예 : main(String[] args) 혹은 main(String args[]) 으로 사용할 수 있는데
**main(String[] args)로 사용하는 이유가 String[] 스트링 배열인지 한눈에 확인 할 수 있기 때문이다.
int[] i = new int[크기]; // i : int형 배열을 담을 수 있는 type. i는 int형이 아니다. 반드시 크기를 할당해야 쓸 수 있다.
- new : 참조생성연산자
i.length : 배열의 크기를 알려준다. 위의 i.length == 5
일반화를 시키면 index의 크기는 0 =< index =< length-1
int[] i = new int[3]; // 하면 int[] type의 기본값인 0으로 배열 안에 자동으로 채워진다. i[0]=10;하면 i[0]만 10, 나머진 0으로 채워진다.
배열 참조형의 기본값은 null으로 채워진다.
new연산자의 의미
int[]i = new int[3]; // 하면 heap영역에 4*3 byte, 총 12byte공간의 메모리가 생긴다.
예) FFEE:003C의 물리적 주소가 있다면 이 주소의 참조값은 Array타입@해쉬코드16진수 형식으로 생긴다.
1. 배열 객체를 메모리에 생성한다.
2.물리 주소에 대한 참조(reference)연산이 일어난다.
3. i에 참조값을 리턴한다.
기본형은 값을 값으로 받지만 참조형은 참조값을 값으로 갖는다.
char[] charAaary=new char[5]; 하고 System.out.println(charArray);하면 String형태로 바뀐다. 실제로 쳐보면 참조값이 보인다. 잘 모르겠음.
char[]는 String 형태이다.
http://unicode.org/ 가면 전세계에 알려진 문자는 모두 나옴.
배열은 메모리에 연속적으로 잡힌다.
예) 연속적 : [][][][][][] 형태로 주소가 동일 간격으로 떨어져서 붙어있다.
int table[3][4];
table.length : 3
table[0].length : 4
System.out.println(안에 나오는 + : 문자열 접합 연산자
switch (식) : 식에는 정수나 char 타입의 값이 들어간다.
switch에 break문을 사용하지 않으면 아래것들이 모두 실행되니 주의할것.(break를 사용해서 의도된 프로그래밍을 하자)
do - while 은 조건식이 true일 동안 do를 무조건 한번 실행. do - while(); <-반드시 세미콜론;를 쓸 것.
for(초기화식;조건식;업데이트식)
'JAVA 공부' 카테고리의 다른 글
자바에서 메소드(Method)와 함수(function)의 차이 (0) | 2020.04.22 |
---|---|
자바 기초3 (0) | 2020.04.22 |
자바 기초 1 (0) | 2020.04.22 |
System.out.println (0) | 2020.04.14 |
java 2 (0) | 2020.04.14 |
댓글