Object
public class Person /*extends Object*/ implements Cloneable {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//오버라이딩 - 객체안에 변수를 빠르게 확인하기 위해서 오버라이딩해서 많이 사용함
@Override
public String toString() {
return "Person [name=" + name + "]";
}
//오버라이딩 - obj가 Person인 경우, 매개변수의 name과 나의 name이 같으면 true반환
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person p = (Person)obj;
if( p.getName().equals(this.name) ) {
return true;
}
}
return false;
}
//finalize - deprecate(언제 없어질지 모르니 왠만하면 사용하지 마세요)
//오버라이딩 - 객체가 메모리에서 해제될 때 자동으로 불려나가는 메서드
@Override
protected void finalize() throws Throwable {
System.out.println(this.name + "님이 소멸했습니다");
super.finalize();
}
//오버라이딩 - 객체를 복사해서 반환
//쉽게말하면 cloneable 반드시 구현해야 합니다.
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class MainClass {
public static void main(String[] args) {
Person p = new Person("홍길동"); //객체1
String str = p.toString();
System.out.println(str);
int hash = p.hashCode();
System.out.println(hash); //해시알고리즘을 사용해서 객체의 고유한 주소에 따라서 중복없는 고유한 숫자를 반환
System.out.println("----------------------------------------------");
Person p2 = new Person("홍길동"); //객체2
boolean result = p.equals(p2);
System.out.println(result);
System.out.println("-----------------------------------------");
try {
Person o = (Person)p.clone();
System.out.println(o.toString());
System.out.println("원본객체:" + p);
System.out.println("클론객체:" + o);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----------------------------------------------");
p = null;
System.gc(); //가비지컬렉터 호출
}
}
System
public class SystemEx {
public static void main(String[] args) {
//system클래스는 운영체제 관련된 기능을 가지고 있습니다.
//전부 static메서드 입니다.
//콘솔의 출력
PrintStream out = System.out;
out.println("hello world");
System.out.println("hello world");
//키보드로 입력
Scanner scan = new Scanner(System.in);
System.out.println("----------------------------");
//운영체제 관련된 내용을 얻을 수 있음
Properties p = System.getProperties();
System.out.println(p);
System.out.println( p.get("user.name") );
System.out.println( p.get("os.version") );
System.out.println("----------------------------");
//1970.1.1일 부터 현재까지 지난시간을 밀리초로 반환
//프로그램 실행 시간 체크
long start = System.currentTimeMillis();
long sum = 0;
for(long i = 1; i <= 1000000000; i++) {
sum += i;
}
long end = System.currentTimeMillis();
System.out.println("실행시간:" + (end - start) * 0.001 );
System.out.println("----------------------------------");
System.exit(0); //프로그램 종료
}
}
String - 문자열 다루기 (유용한 메소드)
public class StringEx {
public static void main(String[] args) {
//문자열 다루기 메서드
String str = "hello world";
char[] arr = {'h', 'e','l', 'l', 'o'};
String str2 = new String( arr );
System.out.println(str2);
System.out.println("------------------------------------------");
//1. 문자열의 인덱스 위치를 잘라서 char형 반환
//char r = str.charAt(0);
//System.out.println(r);
System.out.println( str.charAt(0) );
//2. 문자열길이
System.out.println("문자열길이:" + str.length() );
//3. 문자열 자르기
System.out.println( str.substring(2) ); //2인덱스 미만 절삭
System.out.println( str.substring(2, str.length() ) ); //2이상~11미만 추출
System.out.println("원본문자열:" + str);
//4. 문자열 자르기 split()
String[] r1 = str.split("");
System.out.println( Arrays.toString(r1) );
String[] r2 = str.split("", 5); //최대 길이 5
System.out.println( Arrays.toString(r2) );
//5. 문자열 자르기 toCharArray()
char[] r3 = str.toCharArray();
System.out.println( Arrays.toString(r3) );
//6. 문자열 치환 replace()
str = "커피중에 가장 맛있는 커피는 아이스 아메리카노 커피입니다";
System.out.println(str);
System.out.println( str.replace("커피", "coffee") ); //찾을문자, 바꿀문자
System.out.println( str);
System.out.println( str.replaceFirst("커피", "coffee"));
//7. 앞뒤 공백 치환하기 trim()
str = " 안녕 하세요? ";
System.out.println( str );
System.out.println( str.trim() );
//8. 문자열 찾기 indexOf
str = "010-1234-5678";
System.out.println("1이 있는 위치:" + str.indexOf("1") ); //1이 있는 위치
System.out.println("2번째 인덱스 부터 1이 있는 위치:" + str.indexOf("1", 2)); //2번째 인덱스 부터 1이 있는 위치
System.out.println("없는 문자열이라면 -1반환:" + str.indexOf("hello") );
//9. 문자열 찾기 contains
System.out.println( str.contains("1234") ); //문자가 포함되어 있으면 true
//10. 문자열 찾기 startWith()
System.out.println( str.startsWith("010") ); //010으로 시작하면 true
//11. 문자열 비교 compareTo
System.out.println( "홍길동".compareTo("홍길자") ); //음수가 나오면 앞문자가 사전적으로 빠름
System.out.println( "홍길자".compareTo("홍길동") ); //양수가 나오면 앞문자가 사전적으로 느림
System.out.println( "홍길동".compareTo("홍길동") ); //같은 문자라면 0반환
//12. 문자열 비교 eqauls
System.out.println( "홍길동".equals("홍길동") ); //문자자체가 같으면 true
System.out.printl
StringBuffer , StringBuilder
String의 단점을 보완한 클래스
*String 클래스의 단점 -
String 클래스는 아주 많이 쓰이고 좋은 기능들을 많이 가지고 있지만 메모리를 과소비한다는 문제점이 있다.
String 객체는 처음 초기화된 데이터에 변화가 생기면 기존 객체를 재활용하지 않고 새로운 객체를 생성-삭제생성반복
StringBuffer
-String 클래스의 단점인 새로운 객체를 생성하는 문제로 인해 속도가 느려지는 현상이 발생하 기 때문에 이 문제를 해결하기 위해 속도적인 측면에서 개선된 클래스
String Buffer의 유용한 메소드
1. append(): 기존 문자열의 뒤에 문자열을 추가합니다.
2. insert(): 특정 인덱스 위치에 문자열을 추가합니다.
3. delete(): 문자열을 삭제합니다.
4. deleteCharAt(): 특정 인덱스의 문자 하나를 삭제합니다.
5. replace(): 문자열의 일부분을 다른 문자열로 대체합니다.
6. setCharAt(): 문자열에서 주어진 index의 문자를 다른 문자로 대체합니다.
7. toString(): StringBuilder 객체의 값을 문자열로 반환합니다.
8. reverse(): 문자열을 거꾸로 뒤집습니다
9. subSequence( start, end(미만)) - 인덱스 start이상 end미만 문자열을 반환한다.
StringBuffer 쓰는방법 예
public class SbBufferEX {
public static void main(String[] args) {
//buffer, builder는 기능은 동일합니다.
//buffer는 쓰레드환경에서 동기화기능제공, builder는 싱글스레드에서만 사용하는게 좋습니다.
//StringBuilder sb2 = new StringBuilder("Java");
StringBuffer sb = new StringBuffer("Java");
String s = new String("Java");
//문자열의 덧셈
s = s + " program"; //새로운 객체가 생성됨
sb.append(" program"); //원본 sb가 변함
System.out.println(sb);
System.out.println(s);
//중간에 추가 insert
sb.insert(5, "support ");
System.out.println(sb);
//문자열 변경 replace
sb.replace(5, 12, "hello"); //이상~미만
System.out.println(sb);
//문자열 삭제 delete
sb.delete(5, 11); //이상~미만
System.out.println(sb);
sb.deleteCharAt(0); //한글자 삭제
System.out.println(sb);
//문자열 로꾸꺼
sb.reverse();
System.out.println(sb);
// if(s.equals(sb) ) { //String vs StringBuffer
// }
//문자열로 변경후 비교
if( sb.toString().equals(s) ) {
}
}
}
문자열과 StringBuffer의 속도비교
public class SbBufferEx2 {
public static void main(String[] args) {
//문자열과 빠른문자열 속도 비교
long start = System.currentTimeMillis();
String str = "A";
for(int i = 0; i < 300000; i++) {
str += "A";
}
long end = System.currentTimeMillis();
System.out.println("String덧셈:" + (end-start) * 0.001 );
long s = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("A");
for(int i = 0; i < 300000; i++) {
sb.append("A");
}
long e = System.currentTimeMillis();
System.out.println("스트링버퍼합계:" + (e - s) * 0.001 );
}
}
400배 가량의 속도차이가 난다
Math
- Math 클래스는 수학 계산에 사용할 수 있는 메소드들을 제공
- Math 클래스가 제공하는 메서드는 모두 정적 메소드이므로 Math 클래스 이름으로 바로 사용이 가능
public class MathEx {
public static void main(String[] args) {
//Math math = new Math(); //생성자가 private이기 때문에
//Math는 전부 static메서드 입니다
double d = Math.random();
System.out.println(d);
System.out.println("절대값:" + Math.abs(-1) );
System.out.println("올림:" + Math.ceil(3.14) );
System.out.println("내림:" + Math.floor(3.14) );
System.out.println("반올림:" + Math.round(3.5) );
System.out.println("큰수:" + Math.max(3, 4) );
System.out.println("작은수:" + Math.min(3, 4) );
System.out.println("루트값:" + Math.sqrt(4) );
System.out.println("제곱" + Math.pow(2, 3) ); //2의 3제곱
}
}
Wrapper
=> 자바는 기본 타입의 값을 갖는 객체를 생성할 수 있습니다.
=> 이러한 객체를 포장(Wrapper) 객체라고 하는데 그 이유는 기본 타입의 값을 객체 내부에 두고 포장하 기 때문입니다.
=> 포장 객체의 특징은 포장하고 있는 기본 타입의 값은 외부에서 변경할 수 없습니다.
만약 변경하고 싶 으면 새로운 포장 객체를 생성해야 합니다.
=> 다양한 Wrapper클래스 - Byte, Short, Integer, Long, Float, Double, Boolean, Character
대부분 포장 클래스는 "parse+기본타입"의 static메서드를 제공
public class BoxingEx01 {
public static void main(String[] args) {
int a = 100;
double b = 3.14;
char c = 'A';
boolean d = false;
//boxing = 기본타입을 => 객체형으로 변환
Integer v1 = new Integer(a);
Double v2 = new Double(b);
Character v3 = new Character(c);
Boolean v4 = new Boolean(d);
//System.out.println(v1);
Object[] arr = {v1, v2, v3, v4 };
//unboxing = 객체형 => 기본타입으로 변환
int x = v1.intValue();
double y = v2.doubleValue();
char k = v3.charValue();
boolean j = v4.booleanValue();
System.out.println("--------------------------");
//autoboxing = 자동형변환
Integer a1 = a;
int a2 = a1;
Object[] arr2 = {1, 3, 3.14, true };
}
}
'Java' 카테고리의 다른 글
익명객체와 람다식(Stream) (0) | 2023.11.30 |
---|---|
API - IO( InputStream - OutPutStream) (1) | 2023.11.29 |
Java.API(Collection Framework) -generic , List , Set , Map (0) | 2023.11.24 |
예외처리 (Exception) - throw , throws , trycatch (1) | 2023.11.23 |
Final , abstract(추상) , Interface(인터페이스) (1) | 2023.11.23 |