JAVA 기초
by #독개#JAVA
수업은 Eclipse에서 진행한다.
Cntrl+Shif+f : 자동정렬 (좋을때도 있고 안좋을때도있다 예를들어 자기스타일대로 정리하는사람에겐 안좋음)
Java에서 문자열출력
1. System.out.println("Hello~ World");
System.out.println(변수);
sysout 치고 Cntrl+스페이스 하면 이클립스에서 자동으로 쳐준다.
println은 자동개행
2. System.out.printf("%d %c Hellow world \n", 변수a,변수b);
printf는 C언어와 같다. 자동개행없고, 포멧인자형식
변수
- 프로그램에서 사용되는 데이터가 저장되는 공간
- 데이터가 변할 수 있는 저장공간
- 사용되기 이전에 선언되어야만 함
상수
- 프로그램에서 사용되는 데이터가 저장되는 공간
- 변수에 한번 저장된 데이터는 변경 불가능
- 선언과 동시에 반드시 초기화
- final키워드를 사용하여 선언함 (c언어에서는 const 자바에선 final 이름만다르다)
기본자료형
ex) boolean a = true ; (C언어에선 0은 거짓 나머지값들은 참 but 자바에선 ture/false로만 구분)
변수선언
예약어들 (for,int,null,return,class,try,void 등등 안됨)
공백안됨 ex) str 1234 (x)
String
name1 == name3 //false : 각각 들어있는 값(주소)가 다르기 때문이지
String에서 문자열을 비교할때는 name1.equals(name3) 이런식으로 쓴다
new를 하면 무조건 새로운 객체가 만들어진다
String name = "신용권" == String name = new String("신용권")
String str1 = "hacker" ;
String str2 = "i2sec" ;
String str3 = "4444" ;
str3 = str1 + str2 ;
System.out.println(str3) ;
-> hakeri2sec
이런식으로 문자열 변수로써 +-를써서 합치고 뺄수있다.
특징은 한번 만들어진 값을 변경하지 않음! 이라는 것이다.
위에 우리가 str3에 4444를 집어넣었지않는가? 이공간과
str3 = str1 + str2 해서 hakeri2sec이 저장된 공간이 서로다르다 라는점!
str3(4444)는 여전히 남아있다.
즉 상수로써 한번 할당받은 공간은 사라지지 않지 이거 많이쓰면 메모리 소비가 심해서 느려지겠지?
그래서 보안된게 StringBuffer이다. (근데 뭐 컴퓨터좋아져서 그냥 다무시하고 String을 거의다씀)
byte[]배열을 생성자 매개변수로 받는 String
String charsetName은 "UTF-8" 이런거 말한다. 만약에 byte[]가 UTF-8로 인코딩 되있으면 디코딩시 UTF-8 지정해줘야 한다.
Hello라는것만 문자열로 만들라면 \r\n은 제외해줘야하므로 readByteNo-2를 해줘야한다.
String.split("/"); 이것도 자주쓰임
Split()
"\\?" , "\\" 이런거도 가능
charAt()
getBytes()
indexOf()
replace()
Substring()
trim()
ex) String str1 = String.valueOf(10); --> "10"
String str2 = String.valueOf(10.5); --> "10.5"
String str3 = String.valueOf(true); --> "ture"
2. StringBuffer
StringBuffer sb1 = new StringBuffer("abc") ;
new를 썻기때문에 StringBuffer라는 공간이 힙에 할당되고 "abc"가 들어가있다.
이공간의 주소를 sb1에다가 주는것이지
고로 sb1 = "def"를 주면 저기 할당된 공간에 abc를 지우고 def가 새로 쓰여짐
메모리 공간을 잘아낄수 있겠지? (근데 뭐 컴퓨터좋아져서 그냥 다무시하고 String을 거의다씀)
2-1. 문자열 추가(append)
2-2. 문자열 삽입(insert)
2-3. 문자열 추출(substring)
이 가능하다. 찾아봐^^
배열
- 같은 타입의 데이터를 연속된 공간에 저장하는 자료 구조
- 각 데이터 저장 위치는 인덱스를 부여해서 접근가능 0 번부터시작
- 중복된 변수 선언을 줄이기위해
- 반복문을 이용해서 요소들을 쉽게 처리하기 위해
배열변수도 참조변수이다
배열의 본질은 힙영역에 공간할당되고,
int[] a = {0,1,2,3,4}; // a는 참조변수임. 0인덱스(시작지)의 주소지를 가져오는것
배열생성시 값 초기화
a. String[] names = {"신용권","이상진","감자바"}; //선언과 동시에 값 초기화
b. String[] names; //선언후 나중에 값 초기화
names = new String [] {"신용권","이상진","감자바"};
배열생성시 값 초기화x 저장할 배열을 미리 생성
char[] b = {'a','b','c','d','e'}
자바에선 알아서 할당해준다 이게 실제로는
int[] a = new int[5];
char[] b = new char[5];
이렇게 사용되는거다 나중에 배우겟지만 그래서 C언어에서는 배열이 Stack에 올라가지만
자바에선 Heap에 올라간다. new가 들어가기 때문이지
배열길이 : 배열에 저장할수 있는 전체 항목 수
int[] mem = { 1, 2, 3 };
systme.out.println(mem.length); --> 3
mem.length=5; (x) //배열의 길이는 읽기전용
for(int i=0; i<mem.length; i++) { //배열의 길이는 for문에서 주로사용 (자바에선 이보다 for each로 자주씀)
systme.out.println(mem[i]);
}
for(int a : mem) //for each형식
{
system.out.println(a)
}
객체를 참조하는 배열
Int [] a = new Int[3] 힙영역에 Int[3]의 공간이생기고 각 값을 가지고있고 그주소를 a가 스택영역에서 가지고 있는것이다.
그런데 객체를 참조하는 배열을 만들면 힙영역에 객체[3]의 공간이 생기는데 여기에 값이아닌 객체들의 주소를 가지고있다.
String값들은 "Java"는 실제로 객체라 보면된다.
배열복사
ArrayList (리스트)
HashMap
Scanner 표준입력
삼항 연산자
포멧스트링,연산자우선순위,산술연산자관계연산자,논리연산자,대입연산자,증감연산자,캐스팅연산자 모두 C와동일
제어문
if , else if , while , do while , for 모두 C언어와 동일하다. //단 while(1) 이런거 안됨 while(Ture) 해야함
C언어에서 없는건 Java에서 반복문 for each 인데
배열을 나타 낼때 쓴다.
int[] numbers = {1,2,3,4,5,6};
이란게 있다고치고 이를 표현하려면
for문
for(int i=0; i<numbers.length; i++) // 여기서 중요한거2개
{
System.out.println(numbers[i]);
}
// 1. for문안에서 int i=0; 해서 선언과동시에 초기화가능 (C에서는 위에 선언따로하고 초기화 따로하고)
// 2. numbers는 인스턴스화도 안하고 배열인데 어찌? numbers.length가 되지?
// 이는 배열에서도 말햇는데 int[] numbers = new int[6] ; 이된거거든 사실 그러니 가능하지
for each문
'🔥 프로그래밍 학습 > JAVA' 카테고리의 다른 글
추상화 클래스 , 인터페이스 (0) | 2020.05.25 |
---|---|
자바 분석할것2 (0) | 2020.05.25 |
JAVA 클래스와 메소드2 (상속) (0) | 2020.05.24 |
로또번호 6개 다른값뽑기 (0) | 2020.05.22 |
클래스,생성자,인스턴스맴버,정적맴버,final,상수 (0) | 2020.05.21 |
블로그의 정보
독한 개발자
#독개#