오늘은 클래스를 마저 나갔다,,,, 어려워 어렵다 점점 더 많은 지식과 어려움이,,,,,,,,,,,힘내자,,,
* 메소드()
① 명령어들의 집합
② 기본적으로 public static void main(String[] ) 제공
③ 인수는 반드시 따로 따로 선언한다.
④ 호출한 메소드는 반드시 호출한 곳으로 되돌아온다.
⑤ return(결과값, 반환값)은 반드시 1개뿐이다.
⑥ return이 없으면 void로 선언한다.
* Overload 메소드
Overloading 하나의 클래스 안에서 똑같은 이름의 메소드가 2개 이상 존재 할 때
인수(매개변수) 형이 틀리거나
인수(매개변수) 개수가 틀린 경우
class Test {
public void sub(int a){ }
}
class Sample {
publiv void sub(int a, int b){ }
}
클래스가 다르면 오버로드가 아님.
* this
1. 생략가능
2. 자기 자신 클래스의 정보(reference-참조값)를 갖고 있다.
this()
1. Overload 된 다른 생성자를 호출할 때
2. 생성자에서 반드시 첫줄에 써야 한다
class Test {
int a; //필드, 초기화
}
new 클래스( ) -> 생성자 불러내고 있음 ( )
클래스를 생성하면(new) 무조건 생성자 메소드가 호출된다.
Constructor01.java
package class__;
public class Constructor01 {
private String name;
private int age; //private은 내 클래스 안에서는 다 가능.
//public void Constructor01() { // void 붙이면 생성자 자격 박탈
public Constructor01() { //생성자 오버로드 일어남.
System.out.println("기본 생성자");
System.out.println("this = " + this); //this 존재한다는 것 기억. 밑에랑 연결시켜줌
}
public Constructor01(String name) {
this();
System.out.println("Constructor01(String name)");
this.name = name;
}
public Constructor01(int age) { //생성자끼리는 호출할 수 있음.
//오버로드된 생성자끼리는 호출이 가능함.
this("코난");//Overload된 생성자 호출가능
//'첫번째 줄에만 쓸 수 있음' /생성자끼리만 부를 수 있음 외부에서는 안됨.
System.out.println("Constructor01(int age)");
this.age = age;
}
public static void main(String[] args) {
Constructor01 aa = new Constructor01();
System.out.println("aa = " + aa);
System.out.println(aa.name + ", " + aa.age);
System.out.println();
Constructor01 bb = new Constructor01("홍길동");
System.out.println(bb.name + ", " + bb.age); //bb.name bb.age 둘 다 가능
//(getName getAge 필요없음)
System.out.println();
Constructor01 cc = new Constructor01(25); //호출하면 나한테 다시 돌아온다는 것!!!
System.out.println(cc.name + ", " + cc.age);
System.out.println();
}
}
기본 생성자
this = class__.Constructor01@372f7a8d
aa = class__.Constructor01@372f7a8d
null, 0
기본 생성자
this = class__.Constructor01@1c20c684
Constructor01(String name)
홍길동, 0
기본 생성자
this = class__.Constructor01@1fb3ebeb
Constructor01(String name)
Constructor01(int age)
코난, 25
호출되는 순서 잘 확인하기 !!!!
class Test {
private int a;
public void setA(int a){ //setter 메소드
}
//생성자는 앞에 void라는게 없음.
public Test(int a){ //생성자는 클래스명과 똑같이 생겼다
}
//생성자도 여러개 만들 수 있음.
public Test(){ //생성자 오버로드 // 이름: 기본 생성자 (default 생성자)
}
}
class TestMain{
public static void main(String[] args) {
Test t = new Test( ); //생성자 강제호출됨.(new하면서) -> 1번밖에 못 부름.
Test t = new Test(25); //처음 어떠한 값을 줄 때 써먹음(1번만 가능)
t.setA(25); // 값을 계속 바꿔야하면 setter을 쓴다.
t.Test(25); -> 생성자는 원한다고 강제 호출이 안됨.
}
}
return형 메소드이름(인수형 인수, ~~~~~)
int sub(int a)
void sub(char a) -> return이 없다.
생성자는 앞에 void(return값이 없는 자료형) 쓰면 안됨. -> 자료형 쓰지마라
Method01.java
package class__;
public class Method01 {
public static void main(String[] args) {
//static 메소드 호출 - 클래스명.메소드명
Method01.display();
display(); //내 구역 안에서는 클래스명 빼도 상관없음.
Method01 m = new Method01(); //static이 아니므로 new 해서 객체 만들어줘야함!!
m.output();
//m.display(); //이렇게 해도 됨. 객체로 불러도 됨.
}
public static void display() { //구현 //static은 이미 메모리에 올라와있으므로 그냥 갖다쓰면 됨.
System.out.println("static method");
}
public void output() { //구현 // output(), display() => 사용자가 만들었으니 - 사용자메소드
System.out.println("non-static method");
}
}
static method
static method
non-static method
Method.java
package class__;
public class Method02 {
public int sum(int a, int b){ //구현
return a+b;
}
public int sub(int a, int b){ //구현
return a-b;
}
public int mul(int a, int b){ //구현
return a*b;
}
public double div(int a, int b){ //구현
return (double)a/b;
}
public static void main(String[] args) {
Method02 m = new Method02();
System.out.println("25 + 36 = " + m.sum(25, 36));
System.out.println("25 - 36 = " + m.sub(25, 36));
System.out.println("25 * 36 = " + m.mul(25, 36));
System.out.println("25 / 36 = " + m.div(25, 36));
}
}
25 + 36 = 61
25 - 36 = -11
25 * 36 = 900
25 / 36 = 0.6944444444444444
* varargs (Variable Argument)
: JDK 5.0에서 추가
: 통일된 인수의 자료형에 인수(매개변수)의 개수를 자유롭게 구현
: 내부적으로 배열화 작업으로 처리해 준다
VarArgs.java
package class__;
public class VarArgs {
/*
public int sum(int a, int b) {
return a+b;
}
public int sum(int a, int b, int c) {
return a+b+c;
}
public int sum(int a, int b, int c, int d) {
return a+b+c+d;
}
*/
//★★★★★
//인수 개수를 자유롭게 - 내부적으로 배열로 이식
public int sum(int... ar) { //...개수 맘대로
int hap = 0;
for(int i=0; i<ar.length; i++) {
hap += ar[i];
}
return hap;
}
//★★★★★
public static void main(String[] args) {
VarArgs va = new VarArgs();
System.out.println("10 + 20 = " + va.sum(10, 20));
System.out.println("10 + 20 + 30 = " + va.sum(10, 20, 30));
System.out.println("10 + 20 + 30 + 40 = " + va.sum(10, 20, 30, 40));
}
}
10 + 20 = 30
10 + 20 + 30 = 60
10 + 20 + 30 + 40 = 100
StringMain.java
package class__;
public class StringMain {
public StringMain() {
String aa = "apple";
String bb = "apple"; // 같은 주소
//String cc = new String("apple"); // new하면 메모리에 잡음
//String dd = new String("apple"); // 또 다른 곳에 잡음
if(aa==bb)
System.out.println("aa와 bb의 참조값은 같다.");
else
System.out.println("aa와 bb의 참조값은 다르다.");
if(aa.equals(bb))
System.out.println("aa와 bb의 참조값은 같다.");
else
System.out.println("aa와 bb의 참조값은 다르다.");
System.out.println();
String cc = new String("apple");
String dd = new String("apple"); // 두 번 잡았다.
if(cc==dd)
System.out.println("cc와 dd의 참조값은 같다.");
else
System.out.println("cc와 dd의 참조값은 다르다.");
if(cc.equals(dd))
System.out.println("cc와 dd의 참조값은 같다.");
else
System.out.println("cc와 dd의 참조값은 다르다.");
System.out.println();
String e = "오늘 날짜는 " + 2023 + 12 + 29;
System.out.println("e = " + e);
/* 갖고있는 문자열을 처리해줬을 때 메모리에서 결합이 일어나므로 String에서 연산은 안 하는게 좋다.
"오늘 날짜는 "
"오늘 날짜는 2023"
"오늘 날짜는 202312"
e ---> "오늘 날짜는 20231229"
메모리가 꽉 차서 더이상 생성이 안된다.
- 자바가상머신 JVM에 의해서 휴지통(Garbage Collector)으로 보낸다.
- JVM에 의해서 휴지통(Garbage Collector)으로 보내는 동안은 컴퓨터는 작동을 멈춘다.
*/
System.out.println("문자열 크기 = " + e.length());//15
System.out.println("5번째 위치의 문자 = " + e.charAt(5)); //는
System.out.println("부분 문자열 추출 = " + e.substring(7)); //20231229
System.out.println("부분 문자열 추출 = " + e.substring(7, 11)); //2023
System.out.println("대문자 변경 = " + "Hello".toUpperCase());//HELLO
System.out.println("소문자 변경 = " + "Hello".toLowerCase());//hello
System.out.println("문자열 검색 = " + e.indexOf("짜"));//4
System.out.println("문자열 검색 = " + e.indexOf("날짜"));//3
System.out.println("문자열 검색 = " + e.indexOf("개바부")); //-1
System.out.println("문자열 치환 = " + e.replace("날짜", "일자"));//오늘 일자는 20231229
}
public static void main(String[] args) {
new StringMain(); //생성자 호출은 반드시 new해서
}
}
aa와 bb의 참조값은 같다.
aa와 bb의 참조값은 같다.
cc와 dd의 참조값은 다르다.
cc와 dd의 참조값은 같다.
e = 오늘 날짜는 20231229
문자열 크기 = 15
5번째 위치의 문자 = 는
부분 문자열 추출 = 20231229
부분 문자열 추출 = 2023
대문자 변경 = HELLO
소문자 변경 = hello
문자열 검색 = 4
문자열 검색 = 3
문자열 검색 = -1
문자열 치환 = 오늘 일자는 20231229
String은 수정이 안되므로 연산하고 싶으면 버퍼나 빌더 써야함
StringBuffer / StringBuilder
1. 문자열
2. 문자열 편집이 가능
3. append(), delete() 존재
원하는 단을 입력 : 2 생성자
--------------------------------
2 * 1 = 2 output()
2 * 2 = 4
~~~
2 * 9 = 18
StringBufferMain.java
package class__;
import java.util.Scanner;
public class StringBufferMain {
int dan;
public StringBufferMain() {
Scanner scan = new Scanner(System.in);
System.out.print("원하는 단을 입력 : ");
//int dan = scan.nextInt(); -> 이걸로 안되고 위에껄로 됨. //★★★★★
dan = scan.nextInt();
}
public void output() {
StringBuffer buffer = new StringBuffer();
for(int i=1; i<=9; i++) {
//System.out.println(dan + " * " + i + " = " + dan*i);
buffer.append(dan);
buffer.append("*");
buffer.append(i);
buffer.append("=");
buffer.append(dan*i);
System.out.println(buffer);
//기존에 있는 내용 삭제
buffer.delete(0, buffer.length()); //★★★★★
}
}
public static void main(String[] args) {
new StringBufferMain().output();//★★★★★
}
}
원하는 단을 입력 : 2
2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
Token.java
package class__;
import java.util.StringTokenizer;
public class Token {
public static void main(String[] args) {
String str = "학원, 집,,게임방";
StringTokenizer st = new StringTokenizer(str, ",");
System.out.println("토큰 개수 = " + st.countTokens());
while(st.hasMoreTokens()) { // 항목 o : T / 항목 x : F
System.out.println(st.nextToken()); //항목을 꺼낸다, 다음 항목으로 이동, 그리고 올라가서 항목있는지 체크 또 반복
}
System.out.println("----------------------");
String[] ar = str.split(","); //비어있는 값도 가져온다. 배열이용
for(String data : ar){
System.out.println(data);
}
}
}
토큰 개수 = 3
학원
집
게임방
----------------------
학원
집
게임방
'JAVA' 카테고리의 다른 글
DAY 7 - 배열 / 클래스(객체) (2024.07.11) (0) | 2024.08.13 |
---|---|
DAY 7 - HOMEWORK - 클럽 회원관리 (2024.07.11) (0) | 2024.08.12 |
DAY 9 - static / 상속 / Override / Overload (2024.07.15) (0) | 2024.08.12 |
DAY 10 - instanceOf / 추상클래스 / final (2024.07.16) (0) | 2024.08.12 |
DAY 11 - interface / iterator (2024.07.17) (0) | 2024.08.12 |