Java practice_240111

Choi Suyeon·2024년 1월 11일
0

this

: 키워드 형식, method형식으로 사용할 수 있다.

키워드 형식

: method를 호출하는 instance의 주소로 변환.

  • 객체가 생성된 후 호출되는 instance 영역에서만 사용할 수 있다.(static영역에서 사용불가)
    instance변수와 parameter가 같은 이름을 가질 때, 두 변수를 식별하기 위해 사용.
    상속 관계에서는 자식의 변수나 method를 식별하기 위해 사용.

문법

  • this.변수명
    this.변수명 = 값;

  • method호출(상속관계)
    this.method();

class Test(){
	int i;
    
    public void set(int i){
    	this.i = i;//this를 사용하면 method를 호출한 객체의 주소로 변환
        		   //(this => t.set()의 주소로 변함.)
    }
    
    public static void main(String[] args){
    	Test t = new Test();
        t.set(100);//method 호출
    }
}

method 형식

: 하나의 클래스 안에서 다른 생성자를 호출할 때 사용.

  • 생성자의 첫번째 줄에서만 사용가능.
    재귀호출(내가 나 부르기)가능성이 있다면 error발생

문법

  • this();
    this(값);
class Test(){
	int i;
    
    public Test(){
    	this(10);//2. Test(int i) 호출 
        		//4. 돌아오고
    }
    
    public Test(int i){
    	//3. 실행
    }
   
   public static void main(String[] args){
   		new Test();//1. 호출 
        		   //5. 돌아와서 출력
    }
}

-----------------------------------------------------------------
	/**
	 * 뚜껑 1개, 몸체 1개, 마카펜을 생성할 때 사용하는 기본 생성자
	 */
	public MarkerPen() {
    //		cap=1;
	//		body=1;
	//		color="검은";
		this(1, 1, "검은"); //this로 코드를 줄일 수 있다.
	}//MarkerPen

	/**
	 * @param cap 뚜껑 수
	 * @param body 몸체 수
	 * @param color 색
	 */
	public MarkerPen(int cap, int body, String color) {
		setCap(cap);
		setBody(body);
		setColor(color);
	}//MarkerPen

객체화

: 클래스에서 정의된 기능을 사용하기 위해 (heap)메모리에 올려놓는 것.

  • 객체화의 5가지 문법
    • 객체명으로 변수나 method를 사용하기 위한 객체화
      < 클래스명 객체명 = new 생성자(); >
    • 객체명으로 변수나 method를 사용하지 않는 객체화
      < new 생성자(); >
    • 객체 생성 후 하나의 메서드만 호출하는 객체화.
      < new 생성자().method명(); >
    • is a 관계의 객체화
      < 부모클래스명 객체명 = new 자식클래스의 생성자(); >
    • anonymouse inner class의 객체화 - 객체를 arguments로 사용.
      < 호출할 method(new 부모클래스명(){
      자식클래스에서 정의할 method()들
      }); >

String(문자열)

: ""으로 묶여진 여러 문자들.

  • 문자열은 문자열 저장소(String literal)에 유일하게 생성된다.
    문자열 저장소에 저장된 문자열의 시작 주소를 저장하기 위한 데이터 형으로 java.lang.String클래스를 제공한다.
    참조형 데이터 형.

문법

기본형 형식으로 사용

  • new를 사용하지 않음.

String str = "문자열";

참조형 형식으로 사용

  • new를 사용함.

String str1 = new String("문자열")

문자열 비교

: 같은지만 비교 가능

  • == 연산자
    기본형 : 값이 같은지 비교
    참조형 : 주소가 같은지 비교

    기본형 형식
    str == "ABC" // 200번지와 200번지가 같은지? true
    참조형 형식
    str1 == "ABC" // 10번지와 200번지가 같은지? false

  • equals method의 사용
    : String 객체안의 값을 찾아가서 주소를 비교.

    기본형 형식
    str.equlas("ABC") // 200번지와 200번지가 같은지? true
    참조형 형식
    str1.equlas("ABC") // heap안에 저장된 200번지와 200번지가 같은지? true

java.lang.String클래스 기능

  • 문자열의 길이 length()

    String str = "hello";
    int leng = str.length();
    str.length()의 반환형과 일치하는 데이터형으로 변수를 선언(int leng)하고, method에서 return되는 값을 받아서 사용.

  • 대문자 얻기 toUpperCase()

    String temp = str.toUpperCase();//HELLO

  • 소문자 얻기 toLowerCase()

    String temp = str.toLowerCase();//hello


  • 특정 인덱스의 문자 얻기 charAt(int index)

    String str = "heLlo"
    --------------01234 << String Index : 처음 문자에서 0번부터 시작.
    char c = str.charAt(int index);

    'L'을 얻으려면?
    char c = str.charAt(2);

  • 특정 문자의 인덱스 얻기 indexOf("문자열")

    String str = "heLlo"
    ---------------01234
    int index = str.indexOf("문자열");

    "L"의 인덱스인 2 얻기
    int ind = str.indexOf("L");// 2

    indexOf
    => 문자열 안에서 특정 문자열 찾기(있으면 시작인덱스, 없으면 -1)

    문자열 안에 "eLl"이 존재하는지?
    ind = str.indexOf("eLl");// eLl이 존재하므로 문자열의 시작인덱스인 1(e의 인덱스)을 얻는다.
    ind = str.indexOf("eLT");// eLT은 존재하지 않으므로 -1을 얻는다.

    같은 문자열이 있다면 처음 문자열의 인덱스만 나온다. 특정문자열의 2번째 문자 구하기 가능

    String str = "Java Oracle JDBCr";
    str.indexOf("a", str.indexOf("a")+1));
    // indexOf("찾는문자열", 찾을 시작지점)
    //찾을 시작지점의 인덱스를 (a의 인덱스 + 1 )로 하면 두번째 a의 인덱스를 찾을 수 있다.


  • 특정 문자열의 인덱스를 뒤에서 부터 찾기(R -> L) lastIndexOf("문자열")

    int ind = str.lastIndexOf("문자열");//특정 문자의 인덱스를 뒤에서 부터 찾기


  • 문자열 합치기 concat("합칠 문자열")

    .concat("합칠 문자열");
    String str = "abc";
    String str1 = str.contcat("DEF"); // String str1 = str+"DEF"; => 객체가 더 많이 생성


  • 자식문자열(substring) 얻기, 문자열 자르기 substring(시작인덱스, 끝인덱스+1)

    String str = "ABCDEFG"; <= Super string(부모문자열)
    System.out.println(str); // String leteral에 시작주소만 입력
    문자열 맨 뒤에 보이지 않는 공백있음. 끝인덱스+1을 해야 원하는 만큼 자를 수 있음.
    str.substring(시작인덱스, 끝인덱스+1)
    //CDE를 자르자
    String temp = str.substring(2, 5); //<=4+1 CDE(2~4)

    str1 = "2dpaesu@gmail.com"
    str1에서 메일 주소(로컬파트)
    str1에서 도메인 파트 잘라내어 출력
    System.out.println("메일 주소 : " + str1.substring(0, str1.indexOf("@")));
    System.out.println("도메인 주소 : " + str1.substring(str1.indexOf("@")+1, str1.length()));

    시작 인데스만 설정하면 끝까지 잘라낸다.
    끝까지 자르는 거면 시작 인데스만 설정하는게 더 간단.
    System.out.println("도메인 주소 : " + str1.substring(str1.indexOf("@")+1));


  • 문자열이 같은지 비교 equals("비교할 문자열")

    boolean flag = str.equals("비교할 문자열"); //결과 boolean으로 나옴.
    str변수에 들어있는 문자열과 비교.


  • 특정문자열로 시작했는가? startsWith("문자열")

    str.startsWith("문자열");
    String str = "java는 완벽한 OOP언어";
    boolean flag = str.startsWith("java"); //true
    boolean flag = str.startsWith("Java"); //false 대소문자 구분함.

  • 특정문자열로 끝났는가? endsWith("문자열")

    str.endsWith("문자열")*
    String addr = "서울시 강남구 역삼동";
    boolean flag = addr.endsWith("동");//true

  • 특정 문자열을 포함하는지? contains("문자열")

    str.contains("문자열");
    boolean flag = str.containts("문자열");

0개의 댓글