국비지원학원/Java

28일차

초코맛 2018. 11. 28. 00:01
반응형
*String
<문자열과 String는 다른것 문자열은 문자열 저장소에 저장되고 그문자열을 저장하기 위한 클래스가 String 
<메모리에 다른곳에 생성하고 참조하여 저장되는게 참조형 자료형의 특징
<주소는 heap에 저장소는 stack  / 문자열 같은경우 문자열저장소에서 주소는 heap
<대부분 지역변수로 만들어질것이고 stack에 저장되겠다.
*Array


*String class
  • 문자열 저장소에 생성된 (똑같인 생긴애가 있다면 그주소를 줘버림=>같은 문자열은 딱한개만 만들어짐) 문자열의 시작주소를 저징하고 사용하는 클래스
  • <참조형 데이터형으로 참조형으로 쓰려면new를 사용해서 생성하지만 생략가능해 
  • 참조형이지만 기본형 형식(new사용x)으로 사용가능.
  • 기본형 형식ex)   String s= "ABC";  가능.(시작주소가 담김)
  • 참조형 형식ex)   String s(heap주소가 담김)= new String("ABC");


*String class가 제공하는 기능(일)=>method
  • <API를 보면 우리는 요 생성자를 사용할것
 
  • 기본형 형식또는 참조형 형식," "(리터널_문자열상수)모두 사용가능
  • String s="ABC";  도 s.length() 가능하고
  • String s1=new String("ABC"); 도 s1.length() 가능하고
  • "ABC"length();  도가능하다.

  • String s = "abCDef";
  • 문자열의 길이)
    • int len = s.length()    <객체의점메소드를 불러서 일하게 됨. = 6
    • 사실 널문자의 인덱스를 내보내는것 0부터 시작함으로
  • 대문자로 얻기) toUpperCase()
    • String s1 =s.toUpperCase();
  • 소문자로 얻기) toLowerCase()
    • String s1=s.toLowerCase();
  • 특정 문자의 인덱스 앞) indexOf(String str) : ->앞에서부터 찾아나가고
    • int index =s.indexOf("C");   <오라클은1번 자바는0번부터 인덱스가 시작함. 보통이 0번부터임.
    • =2    만약 k를 넣으면 없는값이라 없는걸 찾으면 맨처음인덱스의-1, 0부터 시작함으로 -1
    • String index 가 0,1,2,3,4,5...
    • LastindexOf 뒤에서부터 카운팅
  • 특정문자의 인덱스 뒤)   s.lastIndexOf("특정문자열") : <-맨 뒤에서부터 찾아나간다.   없으면 똑같이 -1
    • String s1 = "abCDeCf";
    • int index =s1.indexOf("C"); =5 가 나옴.
  • 인덱스에 해당하는 "문자"얻기)  charAt(int index)
    • char ch = s.charAt(3);=>'d'
  • 자식문자열 얻기)  substring(int beginIndex, int endIndex) -오라클의 substr이랑 비슷
    • String s1 = s.substring(시작인덱스,끝인덱스+1);
    • ex)  s="abcdefg"
    •             01234567         <s는 문자열주소의 시작주소를 갖고있기 때문에 
    • String cd=s.substring(2,4)=cd    (cde를 원했음. 시작주소만 갖고 들어가 널이 붙어버리면 마지막까지 자를때 널널 이들어가 맨뒤문자를 널로 만들어 버리기 때문에 이런 현상이 발생하는것, 끝인덱스인데 끝널값이 안나오므로
    • 어떻게 println은 s를 시작주소만을 알고있는데 끝까지 출력했냐하면 문자열 맨 끝에는 보이지 않는 끝임을 알려주는 null문자가 들어있다.==>끝이니?끝이니? 하다 널만나면 여기까지 하고 잘라 출력하는것.
    • 오버로딩되어있어 다양한 형태로  쓸수있도 시작인덱스값만 넣으면 알아서 끝까지 잘라줌.
  • 앞뒤 공백제거)  trim()
    • String s="_ _ _AAA BB_ _ _";
    • String s1 = s.trim();
    • ="AAA BB"   <문자열 사이의 공백은 제거해 주지는 않고 젤 처음 앞뒤 공백만.
  • 문자열 합치기) concat(String str)
    • s="abc";
    • "abcdef"<=>s.concat("def");
    • s+"def"  더하기도 문자열을 붙여준다.
  • 특정문자열 치환) replace(찾을문자열, 변경할문자열)
    • s="abcdefg";
    • c=>k변경
    • s.replaecAll("찾을문자열","변경할 문자열")     <문자의 수가 같지않아도 바꿀수 있다
    • abkdefg나올것
    • 공백을 mt""공백이 없는 문자열을 넣을수도 있다.
  • String s= ""; //mt  (empty) < 문자열 주소를 가지고 있기는 하나 비어있어서 쓸수없는상태 (차에 휘발유가 있어야 운행하는데 
  • :리터널의 주소는 있으나 값이 없음
  • String s=null;   <둘다쓸수 없지만 차이가 뭘까 ?
  • :heap의 주소가 없음. (차가있으나 기름이없으면mt, 차가없는상태는 null)
  • 문자열이 아무것도 없을 때)    isEmpty()
    • t/false<= s.isEmpty();
  • 완벽하게 같은지)  equals(Object anObject)
    • t/f<= s.equals("비교할 문자열");
  • 이 문자열로 시작되었는지)   startsWith(String prefix, int toffset)
    • s="abcdef";
    • t/f<=s.startsWith("abc")       
    • sql에서like의 %를 뒤에 쓴것과 같음
  • 이 문자열로 끝났는지)
    • s="abcdef"
    • t/f<= s.endsWith("def");
    • 컬럼명 like '%문자열'; 과같음.
  • 이 문자열이 포함 되는 지)    s.contains(CharSequence s)
    • boolean <=s.contains("문자열");
  • 기본형 데이터형을 문자열로 변경) valueOf(변수)
    • int i = 10;
    • String s= String.valueOf(i);
    • <기본의 인스턴스 메소드들은 값을 가지고 연산을 했지만, 얘는 static 으로 가지고있는 값을 가지고 바꿔내보내서 static method라서 사용방법이 다르다. static 과 instance (들어오는값을 가지고 결과를 내줄꺼면 static?)
  • 특정문자열을 구분하여 배열로 얻을떄)   split(String regex)
    • String[] = s.split("구분할 문자열");
*배열
  • <PL/SQL의 테이블과 같음
  • <참조형 데이터형 : 클래스 스트링 배열
  • 참조형 데이터형 (값은 메모리의 다른곳에 생성되고 그주소를 저장하는 데이터형)
  • 일괄처리할 때 (많이) 사용
  •  =>한꺼번에 처리 한다는것(속도향상)
  • <자바의 배열은 고정길이형. 가변길이형.
  • 고정길이형 : 크기가 정해지면 변경되지 않는 것
  • <모든방에 데이터형은 일치
  • 모든 의 데이터형은 같다.    <(자바스크립트와 파이썬은 다름)
  •        => 방 또는 요소 Element
  • 1차원,2차원,3차원,가변 배열을 지원


*일차원 배열
  • 열로 구성된 배열(행은 하나고 열이 나누어져 있다.)
  • 작성법)
1.선언)
데이터형[] 배열명=null;    <객체가 힙의 주소를 가지지않았습니다.
[]=배열 기호
                <메소드 괄호는 소괄호, 나머지 중괄호 
기본형도 참조형 데이터형도 다 가능
int[] arr=null;
2.생성)
배열명 = new 데이터형[방의갯수]
                =>참조형         =>늘거나 줄지않는다. 고정길이형
arr=new int[5];    //<new를 써서 만들었기 때문에 자동초기화
생성되는 배열의 모든 방은 초기화 된다.

1+2)
데이터형[] 배열명=new 데이터형[갯수];
int[] arr =new int[5];
3.값추가)
배열명[방의번호]=값;
arr[0]=10;
arr[1]=20;
(추가,변경)값을 넣는 건 쉽고 삭제는 안됨
4.값얻기)
배열명[방의 번호]
arr[0]  ===>10이 나오겠죵
<값을 추가하거나 얻을때 주의할점은  배열은 인덱스로 찾다보니 없는 인덱스를 찾으면 Error
3,4주의 : 인덱스로 방에대한 (값에대한) 접근을 수행하기때문에 잘못된 인덱스를 사용하면, Error발생.
장점: 이름짓기에대한 고민 줄여줌.

배열방의 갯수를 얻기)
배열명.length


-일괄 처리
  • for(int i=0; i<배열명.length; i++){
  •          배열명[i]
  • }
  • <한번에 처리~!

-객체화 5가지
  • 중 2가지
  • 객체명으로 객체내의 자원을 사옹해야할 때.
  • 클래스명 객체명 = new  생성자();
  • new에서 만든 heap에 오른걸 객체에 담고,
    • 객체명.변수명
    • 객체명.메소드명();
  • 객체는 생성하나 객체명으로 사용할 자원이 없을때,
    • new 생성자();
  • 객체를 생성한 직후 method()하나만 호출 하고 작업을 종료할때, 
    • 클래스명 객체명 new 생성자();
    • <체인형~!
    • new 생성자().method();
    •         1
    •                    2                  


-기본형 형식의 사용.(new x)
  • 배열을 초기화 할때 사용.
  • 입력되는 값으로 방이 생성된다.
  • 작성법)
데이터형[] 배열명 = {값,,,};
int[] arr={10,20,30,40,50};

                  *주소
                    int    int
[arr][   ]        10    20    30    40    50  
stack             0      1     2      3       4
                              heap

=>데이터형[] 배열명 = new 데이터형[]{값,,,};
                                       생략(방의수를 설정하지 않는다.)
arr[2]=200 값도 잘 들어간다.
  • 개발자가 배열의 사용되는 모든 값을 알고 있을때 사용.

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

30일차  (0) 2018.12.03
29일차  (0) 2018.11.30
27일차  (0) 2018.11.27
26일차  (0) 2018.11.25
25일차  (0) 2018.11.23