
모든 클래스의 최상위 클래스
java.lang 패키지에 위치한다.![[Object.excalidraw | center]]
public class helloWorld extends Object{
public static void main(String [] args){
System.out.println("Hello World!");
}
}
명시적으로 오브젝트를 상속받는 클래스 예제이다.
| 메서드 | 설명 |
|---|---|
| protected Object clone() | 객체 자신을 복사한 후에 복사한다 |
| boolean equals(Object obj) | 다른 객체와 실제 값을 비교한다 |
| protected void finalize() | 객체 자신에 대해 더이상 참조할 경우가 없을때 가비지 콜랙터에 의해 호출 |
| Class\<?> getClass() | 객체 자신의 클래스 명을 얻는다. |
| int hash Code() | 객체 자신의 해쉬코드를 얻는다. |
| String toString() | 객체 자신의 정보를 반환한다 |
| void wait() | 다른 스레드가 notify()나 notifyAll()을 호출할때까지 현재 실행하는 스레드를 대기상태에 머물게 한다 |
import com.chapter8.MyStudent;
public class Main{
public static void main(String [] args){
MyStudent s = new MyStudent("lee", 2);
MyStudent s2 = new MyStudent("lee", 2);
if (s == s2){
System.out.println("SAME");
}else{
System.out.println("DIFF");
}
if (s.equals(s2)){
System.out.println("EQ");
}else{
System.out.println("NEQ");
}
}
}
DIFF
NEQ
6행 : 두 참조형 데이터를 == 로 비교하면 메모리의 위치값이 비교된다.
12행 : Object 메소드에서 == 로 비교한다.
package com.chapter8;
public class MyStudent extends Object{
private String name;
private int grade;
public MyStudent(String name, int grade){
this.name = name;
this.grade = grade;
}
public String getName(){
return name;
}
public int getGrade(){
return grade;
}
public boolean equals(Object o){
boolean result = false;
if(o instanceof MyStudent){
MyStudent s = (MyStudent)o;
if(name.equals(s.name) && (grade == s.grade)){
result = true;
}
}
return result;
}
}
![[object_override.excalidraw|center|300]]
DIFF
EQ
인스턴스 속성 정보를 문자열로 출력시 사용
// MyStudent Excute class
System.out.println(s.toString());
com.chapter8.MyStudent@7a81197d
// MyStudent class
public String toString(){
return "name :"+name + "\ngrade : "+grade;
}
name :lee
grade : 2
각 기본 [[2. 자바의 기본 문법#데이터형 (Data Type)|데이터형]]별로 기본데이터에 관계된 기능을 미리 만들어 제공하는 클래스
형식은 기본데이터 형의 각 첫번째 알파벳을 대문자화 한것.
System.out.println("INT 최댓값" + integer.MAX_VALUE);
String s = "123";
System.out.println(Intger.parseInt(s) + 2);
이런식으로 각 데이터 형을 다른 데이터형으로 바꾸거나, 대소 비교를 하거나 하는등 사용할 수 있다.
수학 관련 메서드 제공
| 속성 | 설명 |
|---|---|
| static double E | 지수 e |
| static double PI | 원주율 |
| 메서드 | 설명 |
|---|---|
| static double abs(double a) | a의 double형 절대값 |
| static int abs(int a) | a의 int형 절대값 |
| static double ceil(double a) | a보다 큰 정수 중 가장 작은 정수를 double로 반환 |
이 외에도 여러가지 메서드를 제공
- static double floor(double a)
- static double log10(double a)
- static double log(double a)
- static double max(double a, double b)
- static double min(double a, double b)
- static double pow(dowble a, double b)
- static double random()
- static long round(double a)
- static double sqrt(double a)
Math.floor(4.5);
//와 같이 사용
자바 String 타입 문자열은 한 번 메모리에 생성되면 변경할 수 없다.
기존 문자열을 수정하면, 기존 문자열은 유지되고, 수정된 새로운 문자열이 메모리에따로 생성된다.(깊은 복사)
![[string_class.excalidraw|center]]
변수 초기화시 메모리 상태String city1 = "서울시"; String city2 = "서울시";
new를 이용한 경우
String city1 = new String("서울시"); String city2 = new String("서울시");
[!question] #java/question
만약에 그럼 문자열이 무수히 많아진다 라고 하면 그 무수히 많은 문자열이 그대로 유지되는것인가? 그러면 메모리상에 큰 부담이 가는것 아닌가?
| 메서드 | 설명 |
|---|---|
| char charAt(int index) | 인자로 전달된 index의 문자 반환 |
| int compareTo(String aString) | 인자로 전달된 문자열로 알파벳 철자 순서 비교 |
| String concat(CharSequence s) | 인자로 전달된 문자열로 문자열을 결합 |
| boolean contains(CharSequence s) | 인자로 전달된 문자열을 포함한는가? |
| boolean endsWith(String suffix) | 인자로 전달된 문자열로 문자열의 마지막 부분이 같은가? |
| static String format(String format, Object ... args) | 지정한 형식으로 문자열 변환 후 반환 |
등등..
동적 문자열 처리 가능
기존 문자열에 수정을 하면 기존 문자열이 변경 (얕은 복사)
![[string_buffer.excalidraw|center|1000]]
java.util패키지안에 정의되어있다.
문자열을 구분자로 분리하는데 사용한다.
import java.util.StringTokenizer;
public class TokenTest{
public static void main(String [] args){
String date = "2023/10/19";
String Tokenizer st = new StringTokenizer(date, '/');
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
}
}
2023
10
19
java.util안에 있음
<<설명은 생략함>>
날짜와 시간에 관련된 정보를 원하는 대로 출력해주는 클래스
<<설명은 생략함>>
element 가 사용자가 직접 생성한 인스턴스가 저장되는 배열
<<설명은 생략함>>