직접호출불가 new를 사용해서만 호출가능(객체화를 할 때만 호출된다) 자신클래스의 다른 생성자를 호출할 때 사용 생성자의 첫 번째 줄에서만 사용가능 재귀호출에 상황이 발생하면 error
keyword형식
this.변수명
this.method명();
this는 생선된 객체의 주소를 가지고 있는 키워드다 (Test t=new Test(); t를 this로 바꿔서 사용할 수 있다) 생성된 객체의 instance 변수나 instance method를 호출할 때 사용 instance 영역에서만 사용가능 (객체명. method() ) static영역에서는 사용불가 (static 영역은 instacne 영역보다 먼저 실행된다)
예
class Test{ public Test(){ this(11); //객체는 생성되지 않고 다른 생성자를 호출 //객체가 생성될 때 가져야 할 기본 값 //객체가 생성될 때 처리되어야할 코드 }
public Test(int i){ //객체가 생성될 때 가져야할 기본값 //객체가 생성될 때 처리되어야할 코드 } }
instance화 (객체화) : 클래스의 인스턴스 변수를 heap 메모리에 적재하는 일 객체를 생성한 후 여러번의 method호출을 해야할 때 클래스명 객체명=new 생성자(); 객체를 생성한 후 method를 호출할 필요가 없을 때 (객체를 이름으로 사용할 필요가 없음) new 생성자();
◎ method 호출
method 호출
Call By Value
method를 호출할 때 매개변수가 기본형 데이터형이면 값이 복사되어 넘어간다
class Test{ public static void swap(int i, int j){ int temp=0; temp=i; i=j; j=temp; System.out.println("swap method i =" + i + ", j = " + j ); }
public static void main(String[] args){ int i=11; int j=4; System.out.println("i =" + i + ", j= " + j ); swap(i,j); System.out.println("i =" + i + ", j= " + j );
}//main }//class
Call By Reference
method를 호출할 때 매개변수가 참조형 데이터형이면 주소가 그대로 전달된다 //주소는 유일하다 (참조형 데이터형:class,String,array)
class Test{ inti, j; //instance변수 public void swap( Test t ){ inttemp=0; temp=t.i; t.i=t.j; t.j=temp; System.out.println(“swapt.i=“+t.i+”,t.j=“+t.j); //t.i=200, t.j=100 }
public static void main(String[]args){ Test t=new Test(); t.i=100; t.j=200; System.out.println(“t.i=“ +t.i+”,t.j=“+t.j); //t.i=100;, t.j=200 t.swap( t ); //주소(유일)가 전달 System.out.println(“t.i=“ +t.i+”,t.j=“+t.j); //t.i=200, t.j=100 } }
○ this keyword 사용
class Test{ int i;
public void setI(int i){ this .i=i; //heap에 i에 static i를 할당 //this는 method를 호출한 객체의 주소로 변경 }
public static void mein(String[] args){ Test t=new Test(); t.setI(1000, t); System.out.println(t.i); } }
○ 문자열(문자가 나열된 것)형
같은 문자열은 문자열저장소에 하나만 생성된다
문자열저장소에 저장하기 위해 "를 사용한다
문자열저장소의 주소는 java.lang.String 클래스를 사용하여 저장하고, 사용할 수 있다
문자열을 다루기 위한 클래스가 4개 지원
java.lang.String
java.lang.StringBuffer
java.lang.StringBuilder
java.util.StringTokenizer
사용법 "안녕"
java.lang.String 을 사용하여 문자열을 저장할 수 있다
String 클래스 : 참조형 데이터형이지만 기본형 형식으로 사용할 수 있다
기본형 형식의 사용 : new를 사용하지 않는 방법
String s="문자열";
참조형 형식의 사용 : new를 사용하는 방법
String s=new Strin("문자열");
문자열의 같은지에 대한 비교
기본형 데이터형에 == 을 사용하면 값이 같은지 비교한다
참조형 데이터형에 == 을 사용하면 주소가 같은지 비교한다
▼ 기본형 데이터형, 참조형 데이터형 예시 ▼
public class UseString {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "ABCD"; //기본형 형식의 사용
String str1 = new String("ABCD"); //참조형 형식의 사용
//문자열 비교 ==에 대한 비교
//1. 기본형형식은 변수에 문자열 저장소의 주소를 그대로 저장
System.out.println("기본형 형식 == 비교");
if(str == "ABCD") {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
System.out.println("참조형 형식 == 비교");
if(str1 == "ABCD") {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
}//main
}//class
예시 콘솔창
◎ String class 사용법
String class 사용법
1. 생성자를 확인
String str = "ABCD"; //기본형형식의 사용 String mail = new String("jjiny-bbany@tistory.com"); //참조형형식의 사용
2. method호출하여 필요한 일을 수행
2-1 문자열의 길이 한글,영어,특수문자,숫자,공백 1글자로 계산 : length();
int leng = str.length(); //4 int leng = mail.length(); //23
int index = str.indexOf("c"); // 2 int index = str.indexOf("K"); // -1 찾는 문자열이 없다면 -1이 반환
2-5 인덱스에 해당하는 문자 하나 얻기 : charAt(인덱스);
String str="AbcdEF"; char ch=str.charAt(2); // c
2-6 자식 문자열 얻기
: substring(시작인덱스, 끝인덱스+1)
String str = "식사를맛있게했습니다. "; // : 모든문자열의 끝에는 문자열의 끝임을 알려주는 문자가 숨어있다 //가장 마지막 문자 자리에 문자열의 끝기호가 들어간다 //끝 인덱스에 해당하는 문자가 잘려지지 않는다 //substring(시작인덱스, 끝인덱스+1)