익명 클래스
객체 생성 시 ctrl + space -> Anonymous Inner Type
- 원래 추상클래스는 객체를 만들 수 없다. 왜 생성할 수 없냐면 추상메소드를 선언만 하고 정의하지 않았기 때문인데, 추상클래스를 객체로 만들고 싶다면 객체 생성 시에 추상메소드를 정의하면 된다.
- 추상클래스를 상속받은 클래스를 정의하는데 따로 이름을 정해주지 않고 바로 추상메소드를 오버라이딩한 클래스를 만들면서 바로객 체를 생성할때에 객체를 생성함과 동시에 추상메소드를 정의할 수 있음
객체 생성과 동시에 추상 메소드 정의
인터페이스 (interface)
- 다중 상속의 효과를 기대할 목적으로 "인터페이스"를 사용
- 다중 상속을 하려면 클래스는 말고 인터페이스를 사용 해야한다.
- 인터페이스는 상수와 추상 메소드로로 구성
- 인터페이스 안에 변수이름 앞에 final을 붙이지 않아도 자동으로 final
- 인터페이스 안에 메소드는 abstract를 따로 붙이지 않아도 자동으로 abstract
- 구현 시 class에서 implements 를 붙여서 구현
- 인터페이스도 클래스처럼 객체를 만들 수 있음
interface [인터페이스 이름] {
}
class C implements [구현 할 인터페이스] {
}
A, B 인터페이스 생성 후 구현하는 코드
interface A{
public int a = 10;
public void pro();
}
interface B{
public int b = 20;
public void test();
}
class C implements A, B{
@Override
public void test() {
System.out.println("test");
}
@Override
public void pro() {
System.out.println("pro");
}
}
public class InterfaceTest {
public static void main(String[] args) {
C ob = new C();
ob.test();
ob.pro();
}
}
class 상속과 interface 구현을 동시에 할 수 있음.
class D extends [상속받을 클래스] implements [구현 할 인터페이스들] {
}
자바 문자열 처리
String
- 특성은 변하지 않는 문자열
- 예를들어 string에 더하기 연산을 하게 되면 새로운 객체를 생성하게 되고 참조 변수는 새로운 메모리를 참조
- 이전에 참조하던 메모리는 더이상 참조되지 않는 garbage가 됨
- 그래서 String은 변하지 않을 것 같은 문자열만 처리하는게 좋다
StringBuffer
- 특성은 변하는 문자열
- StringBuffer는 String과 다르게 원래 객체에 배열을 추가
- append()함수를 이용하여 문자열을 추가할 수 있음
StringBuffer를 String으로 받는 방법
1. new String(stringbuffer) -> StringBuffer형식을 String으로 받고 싶을 때
2. stringBuffer.tostring() -> to.string()을 사용해서 받아도됌.
public class StringBufferTest {
public static void pro(String data) {
System.out.println(data);
}
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("hello");
sb.append("java");
// pro(sb); // 에러
pro(new String(sb));
pro(sb.toString());
}
}
Stringbuilder
- 특성은 변하는 문자열
아래와 같이 char형의 배열도 String으로 받을 수 있다.
char []data = {'a','b','c','d','e','f','g'};
String data1 = new String(data);
String data2 = new String(data,1,3);
System.out.println(data1);
System.out.println(data2);
String 관련 함수
endsWith
endsWith ( String suffix)
반환 값 : boolean
- 문자열이 특정 패턴으로 끝나는지 확인
startsWith
startsWith(String prefix)
startsWith(String prefix, int toffset)
반환 값 : boolean
- 문자열이 특정 패턴으로 시작하는지 확인
성이 김씨일 경우를 찾는 코드
Scanner sc = new Scanner(System.in);
System.out.println("이름을 입력하세요");
String name = sc.next();
if (name.startsWith("김")) {
System.out.println("김씨입니다.");
}
else {
System.out.println("김씨가 아닙니다.");
}
equalsIgnoreCase
endsWith(String suffix)
반환 값 : boolean
- 문자열 비교 시 대소문자 구분 안함
String data1 = "hello";
String data2 = "hello";
if(data1.equalsIgnoreCase(data2)) {
System.out.println("대소문자를 구별없이 같아요");
}
else {
System.out.println("대소문자를 구별없이 달라요");
indexOf
indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
반환 값 : int
- 찾는 문자열이 몇번째 인덱스에 있는지 확인 가능 (0부터 시작)
String data = "hello java";
int n= data.indexOf("j");
System.out.println(n);
lastIndexof (indexOf 역순)
lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
lastIndexOf(String str)
lastIndexOf(String str, int fromIndex)
반환 값 : int
- 찾는 문자열을 마지막부터 몇번째 인덱스에 있는지 확인
String data = "hello java";
int n3 = data.lastIndexOf("a");
System.out.println(n3);
replace
replace(char oldChar, char newChar)
replace(CharSequence target, CharSequence replacement)
반환 값 : String
- 문자열을 다른 문자로 치환
- 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
String 타입 data에 "java'를 "oracle"로 치환
String data = "hello java";
String data2 = data.replace("java", "oracle");
System.out.println(data2);
System.out.println(data);
split
split(String regex)
split(String regex, int limit)
반환 값 : String []
' , '를 기준으로 분리 후 배열 값으로 리턴
String data = "김유신,홍길동,장보고,연개소문";
String kk[]= data.split(",");
for (int i=0 ; i<kk.length; i++) {
System.out.println(kk[i]);
}
substring
substring (int beginIndex, int endIndex)
beginIndex 는 0부터 ~ endIndex 까지 문자열 자르기
주의사항은 : endIndex 는 endIndex -1 까지만 출력하므로 +1을 해줘야함
substring (int beginIndex)
beginIndex 부터 ~ 끝까지
String data = "hello java hello oracle";
String aa = data.substring(6, 10);
System.out.println(aa);
toUpperCase
toLowerCase()
toLowerCase(Locale locale)
반환 값 : String
- 모두 소문자로 바꾸기
- 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
toUpperCase
toUpperCase()
toUpperCase(Locale locale)
반환 값 : String
- 모두 대문자로 바꾸기
- 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
String upper = "abcdefu";
System.out.println(upper.toUpperCase());
String.join
String.join("델리미터", 배열)
String.join("델리미터", 변수1, 변수2 등등)
반환 값 : static String
- join 함수를 이용하여 배열 사이에 델리미터 추가하기
String.join(", ",arr);
trim
- 공백제거
- 반환 값 : String
data.trim();
예제 - member 배열 중에서 이름의 공백을 제거하고 tiger 가 몇명 인지 출력(대소문자 상관없음)
String []member = {"tiger","kim","Tiger","hong"," tiger", "lee"," Tiger"};
int n=0;
for (String name:member) {
if (name.trim().toLowerCase().equals("tiger")) {
n ++;
}
}
System.out.println(n);
예제 - String 타입의 url 변수에 담긴 데이터의 마지막 / 뒤에 있는 스트링 값을 출력
출력 값 : "list" 라는 문자열 출력 됨
String url = "http://www.xxx.co.kr/list";
System.out.println(url.substring(url.lastIndexOf("/")+1));
String.valueOf(변수)
valueOf(int, boolean, char, char[], double, float, long, Object)
반환 값 : static String
- string 타입으로 변환
팁 ) 스트링 만드는 2가지 방법
- 1. 해당 자료형에 스트링 타입의 공백을 더해주면 됌 (+"" )
- 2. String.valueOf 사용 (fm 방식)
예시) 속성
int data = 1024;
String aa= String.valueOf(data); // 방법 1
String bb = data +""; // 방법 2
Wrapper 클래스
- 각 기본 자료형에 따른 클래스들을 말함
- 해당 클래스를 이용하여 형 변환 가능
[Wrapper클래스명].parseXXX( [변환할 변수] )
ex) Integer.parseInt(변수명)
Double.parseDouble(변수명)
자료형 Wrapper 클래스
boolean Boolean
char Character
byte Byte
short Short
int Integer
long long
float Float
double Double
예외 처리( try~catch )
- 자바에서 range 범위 초과나 기타 에러가 발생하였을 경우에 예외처리를 하여 오류 시 프로그램이 비정상 종료되는 것을 막을 수 있음.
try {
정상 명령문;
} catch(예외 클래스 e) {
예외 시 명령문;
} catch(예외 클래스 e) {
예외 시 명령문;
} catch(예외 클래스 e) {
예외 시 명령문;
자바 GUI용 패키지 모음
- javax.swing
java.lang
- java.lang 패키지의 모든 클래스들은 자동으로 import 되기 때문에사용자가 따로 import할 필요가 없음
Char 변수 빼기(마이너스, -) int 변수
char - int (다른 자료형 끼리 연산)
'A' - 65 == 0 이 나옴
'a' - 97 == 0이 나옴
- 'A' - 65 는 아래 코드와 같이 0이 출력된다.
- 숫자형을 char로 형변환 하면 해당하는 아스키 코드 값이 출력 됨. (반대도 성립)
- integer 타입의 숫자 65는 -> 문자 'A'로 출력
int data = 65; //대문자 A 정수 값
int data2 = 97; //소문자 a 정수 값
System.out.println((char)data);
System.out.println((char)data2);
System.out.println('A'-65);
System.out.println('a'-97);
반응형
'개발 > 교육' 카테고리의 다른 글
(Java)13일차 (0) | 2022.04.13 |
---|---|
(Java)10일차 (0) | 2022.04.08 |
(Java) 7일차 (0) | 2022.04.05 |
(Java) 6일차 (0) | 2022.04.04 |
(Java) 5일차 (0) | 2022.04.01 |
댓글