1. static


1) static 메소드


- 일반멤버메소드는 객체를 생성한 후에 사용할 수 있지만   static메소드는 객체생성없이 클래스명(**)으로 호출해서 사용한다. 

- 일반멤버변수(인스턴스변수)는 사용할 수 없고 static멤버변수만 접근가능하다.

- 인스턴스변수를 사용하지 않는 독립적인 작업의 메소드를 만들때 static메소드를 사용한다.

- this는 사용할 수 없다.

- 만드는 방법 : 메소드명 앞에 static을 붙인다.


ex> static 메소드 사용예

class MyMath

{

    private int sum;

    public static int add(int x,int y)

    {

        //sum=x+y;

        //오류발생:static멤버는 일반멤버변수에는 접근 불가!!

        return x+y;    

    }

    public static int max(int x,int y)

    {    

        return (x>y)?x:y;

    }    

    public static int abs(int x)

    {

        return (x>0)?x:-x;

    }

}


class Test04_static

{

    public static void main(String[] args)

    {

        //MyMath mm=new MyMath();

        //int a=mm.add(1,2);

        //static메소드는 객체는 new로 생성후 사용하는 것이 아니라

        //객체생성없이 클래스명으로 호출한다!!!

        int sum=MyMath.add(1,2);

        System.out.println("두수합:"+sum);

        int m=MyMath.max(1,2);

        System.out.println("큰값:"+m);

 

        System.out.println("4.5의 반올림값:"+ Math.round(4.5));

    }

}

 

 



ex> 사각형의 넓이와 원의 넓이를 출력해 보세요.

class ShapeArea

{

    public static final double PI=3.141592;

    //사각형 넓이 구하는메소드

    public static double rectArea(double x,double y)

    {

        return x*y;

    }

    //정사각형 넓이

    public static double rectArea(double x)

    {

        return x*x;

    }

    //원의 넓이

    public static double circleArea(double r)

    {

        return r*r*PI;

    }

}


class Test05_static

{

    public static void main(String[] args)

    {

        System.out.println("사각형넓이:"+ShapeArea.rectArea(1.3,2.5));

        System.out.println("원의넓이:"+ShapeArea.circleArea(1.3));

        System.out.println("PI:"+ShapeArea.PI);

        System.out.println("PI:"+Math.PI);

        System.out.println("int의 최대값:"+Integer.MAX_VALUE);

    }

}

 ; 클래스명.static메소드 명으로 사용가능

; static변수,  static 메소드 가능.

; Math.PI , Integer.MAX_VALUE는

 



2) static 멤버변수


인스턴스변수(일반멤버변수)는 객체의 수만큼 생성되지만 static멤버변수는 객체의 수와 상관없이 오로지 하나만 생성되어 모든 객체가 공유해서 사용한다.

- 만드는 방법: 멤버변수앞에 static을 붙여서 만든다.

- 일반멤버변수는 객체를 new로 생성하는 순간에 만들어지지만 static멤버변수(클래스멤버변수)는 new로 생성하지 않아도 클래스가  로딩되는 순간 생성된다.

 

ex> static member변수 사용예

class MyClass

{

    private int a,b;

    private static int c;


    public MyClass()

    {

        a++;b++;c++;

    }

    public void printData()

    {

        System.out.println("a:"+a +",b:"+b+",c:"+c);

    }

}


class Test06_static

{

    public static void main(String[] args)

    {

        MyClass mc1=new MyClass();

        mc1.printData();

    

        MyClass mc2=new MyClass();

        mc2.printData();


        MyClass mc3=new MyClass();

        mc3.printData();

    }

}

 




ex> 총판매갯수를 static 변수를 사용

class Book

{

    private String title;         //도서명

    private int cnt;                //판매갯수

    private static int totCnt; //총판매갯수

    public Book(String title,int cnt)

    {

        this.title=title;

        this.cnt=cnt;

        totCnt+=cnt;

    }

    public void printInfo()

    {

        System.out.println("도서명:"+title+",판매갯수:"+cnt);

    }

    public static int getTotCnt()

    {

        return totCnt;

    }

}


class Test07_static

{

    public static void main(String[] args)

    {

        Book b1=new Book("Java",10);

        b1.printInfo();

        System.out.println("총판매갯수:"+Book.getTotCnt());

        Book b2=new Book("Jsp",5);

        b2.printInfo();

        System.out.println("총판매갯수:"+Book.getTotCnt());

    }

}

 

 



3) static초기화


ex> static초기화

class MySong

{

    private int a;

    private static String str;

 

    //static멤버를 초기화할때는 static블록을 사용한다.

   static{

        str="아리랑 아리랑 아라리요";

   }

 

    public MySong(){

        a=1000;

    }

    public void printA(){

        System.out.println("노래가격:"+a);

    }

    public static void printStr(){

        System.out.println("노랫가사:"+str);

    }

}


class  Test08_static

{

    public static void main(String[] args)

    {

        MySong.printStr();

    }

}

 

 


 

 

'JAVA' 카테고리의 다른 글

this  (0) 2014.09.12
객체배열  (0) 2014.09.12
final  (0) 2014.09.12
Overloading  (0) 2014.09.12
클래스( class )  (0) 2014.09.12

 

1. final


=> 변수를 상수화 함

=> 값을 선언과 동시에 초기화 하거나 생성자에서 초기화 할 수 있다.



ex> MyCircle객체를 생성하고 원의 넓이를 구해 보세요.

class MyCircle

{

    //반지름

    private double r;

    //원의 넓이

    private double area;

    //PI를 상수로 만듦

    private final double PI=3.141592;

    public MyCircle(double r)

    {    

        //PI=3.141592;

        // =>오류발생  (The final field MyCircle.PI cannot be assigned)

        this.r=r;

    }

    public void getArea()

    {

        area=r*r*PI;

    }

    public void print()

    {

        //PI=4.55555;

        // =>오류발생  (The final field MyCircle.PI cannot be assigned)

        System.out.println("PI:"+PI);

        System.out.println("반지름이 " + r +"인 원의 넓이:"+area);

    }

}


class  Test03_final

{

    public static void main(String[] args)

    {

        MyCircle mc=new MyCircle(10.4);

        mc.getArea();

        mc.print();

    }

}

 

 

 

변수를 초기화하지 않으면 생성자에서 초기화 해야 한다.

...

 private final double PI;

 ...

 public MyCircle(double r)

    {    

        PI=3.141592;

        // 초기화를 해야 한다. 하지 않으면  오류발생  (The blank final field PI may not have been initialized)

        this.r=r;

    }

...




'JAVA' 카테고리의 다른 글

객체배열  (0) 2014.09.12
static  (0) 2014.09.12
Overloading  (0) 2014.09.12
클래스( class )  (0) 2014.09.12
배열( array )  (0) 2014.09.12

 

1. 오버로딩 (Overloading)

 

- 같은 이름의 메소드를 중복해서 정의하는 것.

- 메소드 이름은 같지만 파라미터의 타입이나 갯수가 달라야 한다.

 

예)

class AA{

    public int add(int x,int y){

        return x+y;

    }

    //오버로딩

    public int add(int x,int y,int z){

        return x+y+z;

    }

}

 

ex> 직사각형, 정사각형의 넓이 구하기.

(MyBox객체를 생성하고 직사각형,정사각형의 넓이를 구해 보세요.)

 

class Test01_overloading{

    public static void main(String[] args){

        MyBox bb=new MyBox();
        int c=bb.getArea(10,20);   

        System.out.println("직사각형넓이:"+c);
        System.out.println("정사각형넓이:"+bb.getArea(10));
    }
}

class MyBox{
    //직사각형의 넓이 구하기
    public int getArea(int x,int y){
        return x*y;
    }

    //정사각형의 넓이 구하기
    public int getArea(int x){
        return x*x;
    }
}

 

 

 

ex> 절대값을 구하는 메소드를 갖는 MyMath라는 클래스를 만들어 보세요.

class MyMath

{

    public int abs(int x)

    {

        if(x<0){

            return -x;

        }else{

            return x;

        }

    }

    public double abs(double x)

    {

        return (x<0)?-x:x;

    }

    public float abs(float x)

    {

        return (x<0)?-x:x;

    }

    public void abs(long x)

    {

        System.out.println("절대값:"+((x<0)?-x:x));

    }

}

class Quiz01

{

    public static void main(String[] args)

    {

        MyMath mm=new MyMath();

        mm.abs(100L);

        //int a=mm.abs(10);

        System.out.println("-10의 절대값:"+ mm.abs(-10));

        System.out.println("-10.5의 절대값:"+ mm.abs(-10.5));

        System.out.println("-10.8의 절대값:"+ mm.abs(-10.8f));

    }

}

 

 

 

 

bin폴더에 생성된 class 리스트

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

static  (0) 2014.09.12
final  (0) 2014.09.12
클래스( class )  (0) 2014.09.12
배열( array )  (0) 2014.09.12
반복제어문( while문 )  (0) 2014.09.12

 

1.  사용자 정의 메소드


 - 형식

 

 리턴형 메소드명(매개변수,...){

       실행문장;

       ...

    [return]

}

 

- 자주 반복되는 작업이나 하나의 작업을 여러개의 작업으로 쪼갤때 메소드를 만든다.



ex> 덧셈메소드 호출하여 사용.

class  Test01_Method

{

    public static void main(String[] args)

    {

        int a=10,b=20;

        int c=sum(a,b);

        System.out.println("두수합:"+c);

    }

    public static int sum(int a,int b)

    {

        int z=a+b;

        return z;

    }

}


ex> 출력 메소드 사용

class Test02_Method

{

    public static void main(String[] args)

    {

        String str="*";

        //str을 10번 출력하는 메소드

        printString(str,10);

        System.out.println("메인메소드 종료!");

    }

    public static void printString(String str,int n)

    {

        for(int i=1;i<=n;i++){

            System.out.print(str);

        }

        System.out.println();

    }

}

 

 

 


 

2. 객체 지향 프로그래밍 

 

- 모든 작업을 객체화해서 프로그래밍하는 기법

- 객체지향 프로그래밍에서는 모든 작업을 클래스로 구현한다.

- 클래스 만드는 형식

 

class 클래스명{

    멤버변수;

      ...

    멤버메소드;

      ...

}

 

 - 클래스를 사용하기 위해서는 객체를 생성해야 한다.

 

   형식 )   클래스명 객체명=new 클래스명();

 


ex>   사각형 클래스 만들기

 - 속성(멤버변수) :  x,y좌표,가로길이,세로길이,선색상,...

 - 기능(멤버메소드) :  사각형을 그리기,사각형을 칠하기,사각형크기변경,..

 

class Rect

{

    //private는 멤버를 외부(자신의 클래스를 제외한 영역)에서 접근 불가!!

    private int x,y;    //좌표

    private int w,h;    //가로세로길이

    private String color;    //선색상


    

    //public 멤버는 어디서든 접근 가능!

    public void drawRect()

    {  //사각형 그리는 기능

        System.out.println(x+","+y+"좌표에 " + 

                w +"," + h +"의 길이로"+

                color+"색상의 사각형을 그립니다.");

     }

    public void setXY(int x1,int y1)

    {    //좌표설정 메소드

         x=x1;  

         y=y1;

    }

    public void setWH(int w,int h)

    {    //가로세로길이 설정 메소드

        if(w<=0 || h<=0){

            System.out.println("가로 세로 길이가 잘못 되었어요!");

            return;

        }

        this.w=w;  this.h=h;

    }

    

    public void setColor(String color)

    {  //선색상 설정 메소드

        this.color=color;

    }

}

class  Test03_Class

{

    public static void main(String[] args)

    {

        //객체(인스턴스) 생성

        Rect rr=new Rect();

        rr.setXY(100,100);

        rr.setWH(100,300);

        rr.setColor("빨강");

  

       // rr.w=-100;

       // rr.h=100;

        rr.drawRect();

    }

}

 

 

 

 


ex> 성적처리 클래스를 만들어 보자.

- 속성 : 학생번호,국어,영어,총점,평균

- 메소드: 값저장,성적계산,데이터출력

 

import java.util.Scanner;

class Student

{

    // 멤버변수 선언(멤버변수는 private로!!! )

    private int num;

    private int kor;

    private int eng;

    private int tot;

    private double ave;


    //값을 저장하는 메소드

    public void input()

    {

        Scanner scan=new Scanner(System.in);

        System.out.println("학생번호");

        num=scan.nextInt();

        System.out.println("국어점수");

        kor=scan.nextInt();

        System.out.println("영어점수");

        eng=scan.nextInt();

    }

    //성적을 계산

    public void calc()

    {

        tot=kor+eng;

        ave=tot/2.0;

    }

    //데이터를 출력

     public void printData()

    {

        System.out.println("번호:"+num);

        System.out.println("국어:"+kor);

        System.out.println("영어:"+eng);

        System.out.println("총점:"+tot);

        System.out.println("평균:"+ave);

    }

}

class Test04_Class

{

    public static void main(String[] args)

    {

        //Student 객체 생성

        Student stu=new Student();

        stu.input();

        stu.calc();

        stu.printData();

    }

}

 

 

 

 

 

ex>  도서제목,가격,판매부수를 매개변수로 받아 멤버에 값을 저장하는 생성자를 갖는 클래스를 만들고 main에서 사용해 보세요.

 

class MyBook

{

    private String title;

    private int price;

    private int cnt;

    private int total;

 

    //디폴트생성자

    public MyBook(){}

    

    public MyBook(String title,int price,int cnt)

    {

        this.title=title;

        this.price=price;

        this.cnt=cnt;

    }

 

    public void setData(String title,int price,int cnt)

    {

        this.title=title;

        this.price=price;

        this.cnt=cnt;

    }

    public void getTotal()

    {

        total=price*cnt;

    }

    public void printBook()

    {

        getTotal();

        System.out.println("도서제목:"+title);

        System.out.println("판매가격:"+price);

        System.out.println("판매부수:"+cnt);

        System.out.println("총판매가격:"+total +"원");

    }

}


class Quiz05

{

    public static void main(String[] args)

    {

        MyBook bb=new MyBook("자바가 제일 쉬웠어요!",10000,10);

    

        //도서제목,가격,판매부수,총판매가격이 출력됨

        bb.printBook();

 

        MyBook bb1=new MyBook();

        // MyBook() dault 생성자

        bb1.setData("Jsp",10000,5);

        bb1.printBook();

    }

}

 

 

 



3. 생성자(Constructor)


- 객체가 생성될 때 (자동)으로 호출되는 메소드

- 일반적으로 멤버변수값을 초기화하려는 목적으로 만듬.


- 만드는 형식>

클래스명과 동일한 이름으로 만들고 리턴값이 없으며 void 는 쓰지 않는다.


 예)

 class AA{

      int a;

      public AA(){//생성자

       ..

      }

}

 

 

ex>  Font객체를 생성하고 값저장후 출력해 보세요.

(글꼴에 대한 정보를 갖는 클래스)

class Font

{

    //글꼴크기

    private int fontSize;

    //글꼴체

    private String fontName;

    

    //생성자

    public Font()

    {

        fontSize=9;

        fontName="바탕체";

    }

    //파라미터를 갖는 생성자 

    public Font(int size,String name)

    {

         fontSize=size;

         fontName=name;

    }

    //값설정 메소드

    public void setData(int fontSize,String fontName)

    {

         this.fontSize=fontSize;

         this.fontName=fontName;

     }

    //설정값 출력 메소드

    public void printInfo()

    {

         System.out.println("현재설정된 글꼴크기:"+fontSize);

         System.out.println("현재설정된 글꼴체:"+fontName);

         System.out.println();

    }

}

class  Test05_Class

{

    public static void main(String[] args)

    {

        //파라미터가 없는 생성자 호출

        Font ff=new Font();

        ff.printInfo();

        ff.setData(10,"굴림체");

        ff.printInfo();

  

        //파라미터가 있는 생성자 호출

        Font ff1=new Font(18,"궁서체");

        ff1.printInfo();

    }

}

 

 


 

 

'JAVA' 카테고리의 다른 글

final  (0) 2014.09.12
Overloading  (0) 2014.09.12
배열( array )  (0) 2014.09.12
반복제어문( while문 )  (0) 2014.09.12
반복제어문( for문 )  (0) 2014.09.12

 

[ 배열 ]

 

- 같은 자료형의 변수가 여러개 필요한 경우 연속적인 공간에 데이터를 나열해서 저장하고 첨자로 구분하는 자료구조

 

1) 1차원배열

- 첨자가 하나인 경우

- 형식

 자료형 []배열명=new 자료형[크기]

 

 - 예) int []a=new int[5]; //정수가 다섯개 저장될 배열 생성

 


2) 2차원배열

- 첨자가 두개인 경우

- 형식

자료형 [][]배열명=new 자료형[행첨자][열첨자]


- 예)

int [][]a=new int[3][4];//정수가 저장될 공간이 3행 4열로 12개가 생성

   a[0][0]=100;

   a[0][1]=90;

   ...



ex> 배열 선언 후 값 값넣기 / 출력 후 초기화 / 합구하기 

class  MyTest01_Array

{

     public static void main(String[] args)

    {

          //정수가 저장될 공간(배열)이 다섯개 만들어짐

          int []a=new int[5];

          a[0]=100;

          a[1]=80;

          a[2]=70;

          a[3]=50;

          a[4]=90;


          //배열에 저장된 데이터 출력하기

          for(int i=0;i<5;i++)

         {

               System.out.print(a[i]+" ");

          }

          System.out.println();


          //배열은 아래처럼 초기화가 가능하다.

          int []b={100,80,50,60,60,30,40,50,100};

          int sum=0;


          //배열합 구하기

          System.out.println("배열크기:"+b.length);

          for(int i=0;i<b.length;i++)

          {

               sum=sum+b[i];//sum+=b[i];

               System.out.print(b[i]+" ");

          }

          System.out.println("배열합:"+sum);

     }

}



ex> 배열값 중 최고값, 최소값 구하기

class MyTest02_Array

{

     public static void main(String[] args)

    {

          int a[]={88,99,100,90,50};

          System.out.println("저장된 배열 요소 값");

          for(int i=0;i<a.length;i++)

          {

               System.out.print(a[i]+" ");

          }

          System.out.println();


          int max=a[0];


          //배열의 요소중 가장 큰 값 구하기

          for(int i=0;i<a.length;i++)

          {

               if(a[i]>max){

                    max=a[i];

               }

          }

          System.out.println("배열 최대값:"+max);


          //배열의 최소값을 구해 보세요.

          int min=a[0];


          for(int i=0;i<a.length;i++)

          {

               if(a[i]<min){

                    min=a[i];

               }

          }

          System.out.println("배열 최소값:"+min);

     }

}



ex> 키보드로 입력받은 데이터 배열에 저장하고 출력하기

import java.util.Scanner;

class MyTest03_Array

{

     public static void main(String[] args)

     {

          Scanner scan=new Scanner(System.in);

          int []a=new int[10];

          System.out.println("10명의 점수 입력");

          for(int i=0;i<a.length;i++)

          {

               a[i]=scan.nextInt();

          }

          System.out.println("입력된 점수");

          

          for(int i=0;i<a.length;i++)

          {

                System.out.print(a[i]+" ");

          }

          // 점수가 80점 이상인 학생의 수를 구해 보세요.

          int cnt=0;

          for(int i=0;i<a.length;i++)

          {

               if(a[i]>=80){

                    cnt++;

               }

          }

          System.out.println("\n80점 이상인 학생수:"+cnt);

     }

}



ex>배열을 오름차순 정렬하기

class MyTest04_Sort

{

     public static void main(String[] args)

     {

          int []a={30,20,10,40,50};

          int tmp=0;

          for(int i=0;i<4;i++)

          {

               for(int j=i+1;j<5;j++)

               {

                    if(a[i]>a[j]){

                         tmp=a[i];

                         a[i]=a[j];

                         a[j]=tmp;

                    }

               }

          }

          System.out.println("오름차순 정렬후");

          for(int i=0;i<5;i++){

               System.out.print(a[i]+" ");

          }

     }

}



ex> 2차원배열

class MyTest05_Array

{

     public static void main(String[] args)

     {

          int[][]a={

                {1,2,3},

                {4,5,6},

                {7,8,9}

          };

          for(int i=0;i<3;i++){

               for(int j=0;j<3;j++){

                    System.out.print(a[i][j]+" ");

               }

          }

          System.out.println();

     }

}



ex> 다섯명 아이디 입력받은 후 배열에 저장하고 출력하기 

import java.util.Scanner;


class MyTest06_StringArray

{

    public static void main(String[] args)

    {

        Scanner scan=new Scanner(System.in);

        //문자열 5개가 저장될 배열선언

        String []ids=new String[5];

        System.out.println("다섯명의 아이디를 입력하세요");

        for(int i=0;i<ids.length;i++){

             ids[i]=scan.next();

        }


        System.out.println("배열에 저장된 아이디");

        for(int i=0;i<ids.length;i++){

             System.out.println(ids[i]);

        }


        //문자배열에 값 초기화 하기

        String name[]={"홍길동","김철수","김영희"};

        for(int i=0;i<name.length;i++){

             System.out.println(name[i]);

        }

    }

}



ex> 2차원 문자배열

회원의 이름을 입력받아 회원의 주소를 출력해 보세요.

(이름은 중복되지 않는다고 가정)

예)

회원이름:홍길동

홍길동 님의 주소 [서울] 입니다.

 

import java.util.Scanner;

class MyTest07_Array

{

    public static void main(String[] args)

    {

        String [][]mem={

            {"홍길동","서울시 송파구.."},

            {"김아무","대전시 ..."},

            {"김유신","부산시 ..."}

        };

          

        Scanner scan=new Scanner(System.in);

          

        System.out.println("주소를 검색할 회원이름 입력");

        String name=scan.next();

        boolean find=false;

        for(int i=0;i<3;i++)

        {

            if(mem[i][0].equals(name))

            {

                System.out.println(name +" 님의 주소는 ["+  mem[i][1] +"]입니다.");

                find=true;

                break;

            }

        }

        //이름을 찾지 못했을때

        if(!find){ 

            System.out.println(name +" 회원님이 존재하지 않아요!");

        } 

    }

}

 

 

 

'JAVA' 카테고리의 다른 글

Overloading  (0) 2014.09.12
클래스( class )  (0) 2014.09.12
반복제어문( while문 )  (0) 2014.09.12
반복제어문( for문 )  (0) 2014.09.12
switch문  (0) 2014.09.12

+ Recent posts