2020 09 16 일 java 수업내용 내 필기 -> 정리를 해주세요.

첫번째 STATIC.JAVA 


package e_oop;


public class Static {


/* 

* static 을 붙이면 프로그램 실행시 메모리에 올라간다. ( 객체생성을 해주지 않아도 메모리에 올라간다. 

* static이붙어서 ) 

* 객체생성을 하지 않아도 사용할 수 있다.

* static 을 붙인 변수는 개체간에 변수의 값을 공유한다. -> 다 똑같은 값을 가지게 된다. 

* static 이 붙은 맴버의 명칭 : 클래스변수, 클래스메소드

* static 이 붙지 않은 멤버의 명칭 : 인스턴스 변수, 인스턴스 메서드 

*/

static int var ; 

// 변수에 static을 붙이는 이유는 값을 공유하기 위해. 

//method에 static 을 붙이는 경우는 - > 객체생성을 하지 않고 사용하기 위해. 

public static void main(String[] args) {

// TODO Auto-generated method stub

       Human 철수 = new Human();

   Human 영희 = new Human(); 

//Human 이라는 클래스에 있는 애들을 사용할 수 있는 변수 이름이 철수, 영희

철수.saveMoney(100000) ; 

영희.saveMoney(200000) ; 

   

// 100000 200000 안에는 꼭 숫자만 써야한다. , 쓰면 문자가 되는군. 

철수.saveDateMoney(200000); 

영희.saveDateMoney(200000); 

//앞으로 입력받을때 이거를 사용하면 된다. 

System.out.println("문자열 입력>"); 

String str = ScanUtil.nextLine(); 

System.out.println(str);

System.out.println("숫자 입력>"); 

int num = ScanUtil.nextInt(); 

System.out.println(num); 

}


}


class Human{


    int account ; 

    void saveMoney(int money){

        account += money; 

        System.out.println("통장잔고 : " + account ) ;        

}

    

    

    static int dateAcccount ;

    //철수와 영희가 공유를 하기 때문에 static 

    

    int dateAccount;

    void saveDateMoney(int money){

    dateAccount += money ; 

    System.out.println("데이트 통장 잔고 :" + dateAccount); 

    }

    

두번째 ScanUtill.java


package e_oop;


import java.util.Scanner;


public class ScanUtil {


// 유틸리티성향 : 어떤기능을 좀더 편하게 사용할 수 있게 하는 메서드 

private static Scanner s = new Scanner (System.in); 

// 유틸리티 성향의 메서드인 경우 static 을 붙인다. --> 객체생성을 하지 않고 사용하기 위해 

public static String nextLine(){

return s.nextLine(); 

}

public static int nextInt(){ 

//유틸성향

//Math.random();

//Math.round(a);    //static 이 다 붙어 있는 메소드 

return Integer.parseInt(s.nextLine()); 

}

//int를 입력받을때는 이렇게 사용하면 됨 

//--> static class로 가서 입력했음 글자랑 숫자랑

//객체 = 인스턴스라고도 한다. 

//  new Scanner(System.in).nextLine();

//ScanUtill.nextLine();

//두개의 차이점 잘 보기 . 위에는 인스턴스 메소드인거고 아래는 클래스 메소드 인거다. 

}

    


세번째 VariableInin


package e_oop;


public class VariableInit {

//명시적초기화, 생성자, 3가지가 있다. 

//명시적 초기화 

int var = 10;

static int staticVar = 20 ; 

//초기화 블럭 

{

        var = 30 ; 

}

//static 이 붙은 애를 초기화블럭하려면 static 안에서 

static{ 

staticVar = 40 ; 

}

// 명시적 초기화를 하면 값만 넣을수있지만 초기화 블럭을 사용하면 여러줄을 사용할 수 있다. 

/* 생성자

-클래스와 같은 이름의 메서드  //괄호가 붙은거 무조건 메소드 

-인스턴스 변수를 초기화하기 위해 사용한다. (static 이 붙지않은 인스턴스 변수 ) 

-클래스에 생성자는 반드시 하나 이상 존재해야 한다. 

- 직접 선언해주지 않으면 컴파일러가 기본 생성자(아무내용도 없는 생성자 )를 만들어준다. 

- 생성자는 리턴타입이 없다. 

*/ 

//생성자는 리턴타입이 없다. 이름은 클래스이름과 같은 것 

// VariableInit(){

//

// }

//---> 요게 생성자 

//

VariableInit(){

var = 50 ; 

//클래스 변수도 초기화를 할수는 있다. 

//staticVar = 60 ; //하면 좋진 않다. -> 값을 공유해야 하는 클래스 변수가 객체 생성 시마다 계속 초기화되기

//때문에 클래스 변수를 생성자에서 초기화하는 것은 좋지 않다. 

//똑같은 값을 계속유지하고있었는데 -> 기존에 유지하고 있던 값이 초기화로 인해서 바뀔수가 있는것. 

//생성자 사용 이유

//초기화에 여러줄의 코드가 필요할때 

// 초기화에 파라미터가 필요할 때 

//VariableInit() 얘는 매소드니까 ()안에 파라미터를 받을 수 있어 

//why ? 왜 파라미터를 받아서 초기화를 해야할까 ? 

}

public static void main(String[] args) {

Init i = new Init(); 

i.a = 10 ; 

i.b = 20; 

i.c = 30; 

Init i2 = new Init();  //7번 연결//컴파일러가 생기는 이유 : 생성자를 하나 만들면 이 생성자는 존재하지 않기 때문에.

i2.a = 40; 

i2.b = 50; 

i2.c = 60 ; 

//불편한 일 --ㅣ> 밑에다가 생성자를 만드는일 *---------

//객체를 생성을 또한번 해준다.

Init i3 = new Init(70,80,90);

//바로 위에서는 초기화를 해주려면 여러줄을 써줘야 하는데 아래보면 class Init 를 보면 좀 더 간단하게

//선언을 해줄 수 가 있다.(?)

}

}



class Init { 

int a ; 

int b ; 

int c ; 

//----------------*

        Init(int a, int b, int c ) { 

        this.a = a;

        this.b = b;

        this.c = c; 

        //this : 인스턴스 변수와 지역변수의 이름이 같을 때 둘을 구분하기 위해 사용한다. 인스턴스앞에 this를 붙임

        //그냥 사용하면 지역변수가 우선해서 this를 붙이지않으면 지역변수가 됨. (? ) 

        //THIS 는 이름이 똑같을때 사용하는것. 

        }



        //오버로딩 : 같은 이름의 메서드를 여러개 정의하는 것 

        

        //컴파일에러 없애기 위해서 생성자를 만든다 파라미터가 없는 생성자 7번 연결

        Init() {  //얘를 만들어주니까 위에 컴파일에러가 사라진다. 

        this(10,20,30);

        /*a = 10;

        b = 20;

        c = 30;*/

       

       // this () : 생성자에서 다른 생성자를 호출할 때 사용한다. 

        //생성자에서 다른 생성자를 부를때는 이름을 사용하는 것이 아니라  this 를 사용 

       

        //생성자를 호출해주는 this는 반드시 첫줄에서만 사용을 해야한다. ->  

        // 만약 this가 첫줄에서 사용이 안되면 

        //

       

/*        a = 10;

        b = 20;

        c = 30;

        this(10,20,30); // this 가 10, 20, 30 으로 값을 초기화해줬는데 그럼 위에 있던 a, b, c 는 의미가

        없는 애가 되기 때문에 */

        //똑같은 이름을 가진 메서드를 만들 수 있는데 파라미터로 구분을 한다. 파라미터가 다르면 구분이된다 . 

       

       

       

       

       

       

       

        }

}



네번째 ClassMaker2 


package e_oop;


public class ClassMaker2 {


//인스턴스변수 하나를 선언하고 명시적으로 초기화 해주세요. 

int su = 40 ; 

//위에서 선언한 인스턴스변수를 초기화 블럭을 사용해 초기화 해주세요. 

{ su = 20; 

}

//위에서 선언한 인스턴스변수를 생성자의 파라미터를 사용해 초기화 

//생성자는 클래스이름과 동일한 이 이름을 가진 메소드 

ClassMaker2(int su){ 

this.su = su; 

//안에있는 su가 보통은 위에 값이랑 같은 이름으로 만든다. 

//얘가 받은 su 가 ( 받은거로 ) 위에 있는 인스턴스변수 su를 초기화하는것 

}

//위에서 선언한 인스턴스변수를 생성자를 하나 더 만들어서 초기화 해주기. 

ClassMaker2(){

this(89) ; 

/* or 

su = 89*/

//파리미터로 구분 : 개수가다르거나 타입이 달라야한다 파라미터가. 

/*순서 : 가장기본값인 0 으로 초기화 -> 명시적초기화 40 으로 -> 초기화블록으로 20 -> 

마지막으로 생성자실행되고 89로 초기화*/

//초기화 순서 : 명시적 초기화 -> 초기화 블럭 -> 생성자 

}

}






}

댓글