static 변수(즉 정적변수)란  

- Class 당 하나만 생성되는 변수, 객체(인스턴스)를 아무리 많이 만들더라도 변수는 하나만 존재 

- 객체가 생성될 때마다 새롭게 생성되는 멤버 변수와는 달리 초기에 한번만 생성되고 공유하여 사용가능 

 

static 변수 생성 시기 : Class 이름이 언급되어 질때 생성 (new 뿐만 아니라 Class 명만 나와도 생성됨)

static 변수 사용 방법 : 클래스명.변수명 OR 객체.변수명모두 가능 

   예) 1. StaticSample aa = new StaticSample();  

            System.out.println(aa.sTotal) 

         2. System.out.println(StaticSample.sTotal);

static 변수 초기화 방법 

    1) static 변수 는 초기 생성시 초기화 

        public static int sTotal=0;

    2)  static 변수 는 초기 생성시 초기화. 최초 1회만 호출됨. 

        public static int sTotal=0; 

        public int nTotal=0; 

        static { 

            sTotal += 10; 

            //nTotal += 10; //Static initializer 사용시 사용할 수 없다는 메시지 발생 

        } 

    3) 참고 static initializer 에서 staic 을 빼면 생성자와 같은 역할을 함. 즉 객체 생성시 마다 호출됨. 

        public static int sTotal=0; 

        public int nTotal=0;  

        {                 

            sTotal += 10; 

            nTotal += 10; //Static initializer 사용시 사용할 수 없다는 메시지 발생 

        }


static method / function (정적 함수)

    1) 함수 앞에 static 을 붙이면 정적함수가 됨.

       -> 즉 Instance 생성 없이 그 함수를 직접 호출할 수 있음.

    예) public static void main (String[] args) {}

       -> main 함수도 최초 호출되기 위해서는 static 으로 선언되어 있어야 함.

블로그 이미지

왕왕왕왕

,

자바에는 다음과 같은 접근 제어자가 있다.

쓰이는 용도

  1. private  (필드)
  2. default (알아서)
  3. protected (알아서)
  4. public  (메소드)

private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다



접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.


접근제어자를 별도로 설정하지 않는다면 접근제어자가 없는 변수, 

메소드는 default 접근제어자가 되어 해당 패키지 내에서만 접근이 가능하다.


접근제어자가 protected로 설정되었다면 protected가 붙은 변수,

메소드는 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.


접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 

메소드는 어떤 클래스에서라도 접근이 가능하다.




캡슐화



public class StopWatch {


    private long startTime;

    private long stopTime;


    public void start() {

        startTime = System.currentTimeMillis();

    }


    public void stop() {

        stopTime = System.currentTimeMillis();

    }


    public Time getElapsedTime() {

        return new Time(stopTime - startTime);

    }

}

스탑워치클래스를 만들자면 이런식으로 하면 캡슐화한다고 한다.


객체지향적 프로그래밍을 습관화해야한다.



//field

private int num1;

private int num2;

private int op;

private int result;


//constructor 는 private로 사용하면 다른클래스에서 사용할수없기때문에 

//싱글톤 패턴이라는 기법을 사용하면

//private로 해놔도 사용할 수 있는 방법을 제공함





블로그 이미지

왕왕왕왕

,

패키지란?


패키지는 비슷한 클래스들을 묶어 놓은 그룹이다.'


package king;

public class kim{

}


pakage king;

public class kim2{

}


이런식으로 한 패키지 안에 두클래스가 있다고 치자.


kim클래스가 있는 소스에서 kim2클래스에 있는 메소드들을 사용하고싶다면


중요!!

import king.kim2;  또는

import king.*; 모든 클래스를 참조한다.


서브패키지


pakage king.k;


king패키지 하위로 k가 있다. 이런식으로 패키지를 만들어 갈 수 있다.





블로그 이미지

왕왕왕왕

,

public class Animal { //동물이라는 클래스이다

public static void main(String[] args) {

Animal cat = new Animal(); //동물이라는 클래스를 객체로 생성한것이다.

}

}


 new 는 객체를 생성할 때 사용하는 키워드이다. 이렇게 하면 Animal 클래스의 인스턴스(instance)인 cat, 즉 Animal의 객체가 만들어진다.



정확히 객체와 인스턴스란?

클래스에 의해서 만들어진 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 이렇게 생각 해 보자. Animal cat = new Animal(); 이렇게 만들어진 cat은 객체이다. 그리고 cat이라는 객체는 Animal의 인스턴스(instance)이다. 즉 인스턴스라는 말은 특정 객체(cat)가 어떤 클래스(Animal)의 객체인지를 관계위주로 설명할 때 사용된다.  "cat은 인스턴스" 보다는 "cat은 객체"라는 표현이 "cat은 Animal의 객체" 보다는 "cat은 Animal의 인스턴스" 라는 표현이 훨씬 잘 어울린다.



1. field , member vaiable (변수)

:클래스 내의 메소드들은 자유롭게 사용이 가능

:외부에선 접근 지정자에 의해 사용유무가 결정이 된다.


2. Method: 외부와 내부를 연결시켜주는 인터페이스 역할

1) instance method

:객체를 생성한 후에 사용할 수 있는 메소드

2) static method

:객체의 유무와 상관없이 사용할 수 있는 메소드

:공유의미로 사용(메모리 절약효과)


3.  constructor (생성자 함수) => 객체등록

:객체 생성시 자동호출 되어지는 함수

:생성자는 호출 실패시 객체가 만들어지지 않는다.

:생성자는 오버로딩이 가능하다.

:생성자는 클래스명과 동일하다.

:생성자는 리턴타입이 존재하지 않는다.

:생성자는 명시적으로 만들지 않을 경우 디폴트 생성자가 생성된다.

그런데 명시적으로 만들경우 디폴트 생성자는 제공되지 않는다.



public class Main {


//디폴트생성자대신 명시적으로 생성자함수를 만들었다.

Main(){

System.out.println("생성자함수 호출완료");

}

//메인함수에서 생성하게되면 디폴트생성자에있는 문자열이 출력된다.

public static void main(String[] args) {

// TODO Auto-generated method stub

Main m = new Main();

}

}

블로그 이미지

왕왕왕왕

,

public class test { //이건 클래스고


public static void main(String[] args) { //이게 메소드이다

// TODO 자동 생성된 메소드 스텁

boolean a = true;

System.out.println(!a);

}

public void a(){ //이건 test클래스에 a라는 메소드이다.

}

}




메소드들은 어떤 기능을 하는 것들이다.


값을 받을수도 있고,

받는 값없이 반환 할 수도 있다.


받는 거와 주는 것을 다 할수도 있고, 때로는 아무 것도 안받고 출력만 해줄수도있다.




간단한 예제로는


public class test {


public int sum(int a, int b) {

return a + b;

}


public static void main(String[] args) {

int a = 3;

int b = 4;


test myTest = new test();

int c = myTest.sum(a, b);


System.out.println(c);

}

}


main함수는 os에서 호출하기때문에 프로그램 종료할때 까지 두뇌 역할을 하게된다.

main함수에서 sum함수를 사용하기위해

test클래스를 myTest로 생성을 하고

sum함수를 불러오게된다.

sum항수에 파라미터로 선언했던 a,b를 전달해주고

반환값을 출력하는 c를 찍어보면 7이 나오게 된다.


'취업아카데미-JAVA' 카테고리의 다른 글

8. 클래스패스와 패키지  (0) 2015.06.28
7. 클래스와 인스턴스  (0) 2015.06.28
5. 실행흐름의 컨트롤 - 반복문,조건문  (0) 2015.06.28
4.연산자  (0) 2015.06.28
3.상수와 형변환  (0) 2015.06.28
블로그 이미지

왕왕왕왕

,

if~else


if(true or false)

{

true일때 실행되는영역

}else

{

false일때 실행되는영역

}


if~else if ~ else


if(true or false)

{

true일때 실행되는영역

}else if(true of false)

{

첫번째 false일때

}else if(true of false)

{

두번째 false일때

}else if(true of false)

{

세번째 false일때

}else

{

모두 false일때 실행되는영역

}


switch ~ break


switch(조건)

{

case 1 :

조건 1일때 실행

break;

case 2 :

    조건 2일때 실행

break;

case 3 :

조건 3일때 실행

break;

default :

아무것도 해당안될때 

break;

}

break;는 switch문을 탈출 하기위한것이다.
아에 종료하고싶다면 return을 사용하는 것도 된다.

for(초기화; 조건; 증감또는증가)

{

조건에 맞을경우 실행

}


for(String str : a)

{

a는 레퍼런스타입만 입력이가능하다.

a에 들어있는 값이 끝날때가지 반복해서 str에 저장해준다.

}


이 외에 반복문으로 do~while,while문이 있는데 for와 비슷하게 조건과 증가감연산을 통해 반복한다.


'취업아카데미-JAVA' 카테고리의 다른 글

7. 클래스와 인스턴스  (0) 2015.06.28
6.메소드와 변수의 스코프  (0) 2015.06.28
4.연산자  (0) 2015.06.28
3.상수와 형변환  (0) 2015.06.28
2.변수와 자료형  (0) 2015.06.28
블로그 이미지

왕왕왕왕

,

연산자


a = b + c;

이런식으로 사용하고, b와 c의 값을 더해서 a에 대입한다.


복합연산자


a+= b; 

a-= b;

a*= b;

a/= b;

a%= b;


a = a + b;와 같다

다른것들도 같은 방법이고 

%는 a를 b로 나눈 나머지 값을 뜻한다.


관계연산자


<, >, <=, >=, ==, !=

조건의 참 거짓을 가릴때 사용하고,

if문 외에도 반복분의 조건에도 쓰는 중요한 연산자이다.

true 또는 false를 반환한다.


논리 연산자


&&, ||, !

&&는 A && B , A와 B가 모두 true일때만 성립한다.


||는 A || B, A와 B 둘중에 하나만 참이여도 성립한다.


!는 !A , A가 true라면 !로 인해 false로 바뀐다.


증감, 감소 연산자


++, --

++n1 , n2++이라면, n1 이전에 ++로 인해 값이 증가되고 그값이 n1에 저장되고, 그값을 사용한다.

n2는 저장된 값을 사용하고 ++로 인해 증가된값이 저장된다.

 

비트연산자


&, |, ^, ~


& 비트단위로 and 연산을 한다.

| 비트단위로 or연산을 한다.

^ 비트단위로 xor연산을 한다.

~비트를 반전시킨다.


쉬프트 연산다


>>, << ,>>>

n>>2 n에 비트열을 2칸 오른쪽으로 이동시킨다

n<<2 n에 비트열을 2칸 왼쪽으로 이동시킨다.

n>>>2 n에 비트열을 두칸 오른쪽으로 이동 시킨다.





블로그 이미지

왕왕왕왕

,

        // 반올림

// 101

System.out.println(Math.round(100.54));


// 100

System.out.println(Math.round(100.44));


//버림

//100.0

System.out.println(Math.floor(100.163));


  // 절대값

// 100.56

System.out.println(Math.abs(-100.56));

'JAVA > 자바' 카테고리의 다른 글

자바 필드,오버라이딩  (0) 2015.06.29
자바 JFrame 화면중앙 실행하기  (0) 2015.06.28
자바 NumberFormat클래스 자릿수 끊어주기  (0) 2015.06.28
자바 소수점자르기  (0) 2015.06.28
자바 prefix,postfix ++ ,--  (0) 2015.06.25
블로그 이미지

왕왕왕왕

,