Java static keyword
정적 키워드는 메모리 관리에 주로 사용됩니다.
여러분은 변수, 메소드, 블록과 중첩 클래스와 함께 자바 static 키워드를 사용할 수 있습니다.
정적 키워드는 클래스의 인스턴스 보다는 클래스에 가깝습니다.
정적 아래와 같이 될 수 있습니다.
1. 변수
2. 메소드
3. 블록
4. 중첩 클래스
1) Java static 변수
만약 어떤 변수를 정적으로 선언 할 때, 이를 정적 변수라고 부릅니다.
- 정적 변수는 모든 객체의 공통 속성을 참조하는 것에 사용할 수 있습니다.
예를 들어, 직원의 회사이름. 학생들의 대학명
- 정적 변수는 클래스 로딩시 클래스 지역에서 오직 한 번 메모리를 취합니다.
정적 변수의 이점
여러분의 프로그램 메모리를 효율적으로 만듭니다.
정적 변수를 제외하고 문제를 이해하기
class Student{
int rollno;
String name;
String college="ITS";
}
저의 대학에 500명의 학생들이 있다고 가정한다면, 모든 인스턴스 데이터 멤버는 객체가 만들어지는 때마다 메모리를 얻을 수 있습니다.
모든 학생들은 그들의 특수한 rollno 와 이름을 가지게 되고, 인스턴스 데이터 멤버 상태는 good 상태가 됩니다.
여기, 대학은 모든 객체의 공통의 속성과 관련이 있습니다.
만약 이것을 정적으로 만든다면, 필드는 한번 메모리를 취합니다.
자바 정적 속성은 모든 객체에 공유됩니다.
정적 변수의 예시
//정적 변수 프로그램
class Student8{
int rollno;
String name;
static String college ="ITS";
Student8(int r,String n){
rollno = r;
name = n;
}
void display (){System.out.println(rollno+" "+name+" "+college);}
public static void main(String args[]){
Student8 s1 = new Student8(111,"Karan");
Student8 s2 = new Student8(222,"Aryan");
s1.display();
s2.display();
}
}
output:111 Karan ITS
222 Aryan ITS
정적 변수를 제외한 카운터 프로그램
아래 예에서, 여러분은 생성자에서 증가되는 count 라고 이름 붙여진 인스턴스 변수를 만들었습니다.
인스턴스 변수가 객체 생성 때 메모리를 가지기 때문에, 각각의 객체는 인스턴스 변수의 카피를 가지고, 만약 증가해도, 다른 객체에 반영되지 않습니다.
그러므로 각각의 객체는 카운터 변수에서 값 1을 가지게 됩니다.
class Counter{
int count=0; //인스턴스가 생성될 때 메모리를 취합니다.
Counter(){
count++;
System.out.println(count);
}
public static void main(String args[]){
Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();
}
}
output:1
1
1
정적 변수에 의한 카운터 프로그램
위에 언급된 내용처럼, 만약 어떤 객체가 정적 변수의 값으로 변할 때, 정적 변수는 한 번 메모리를 취할 수 있고, 그 값을 반환합니다.
class Counter2{
static int count=0; //메모리를 한 번 취하고, 값을 반환합니다.
Counter2(){
count++;
System.out.println(count);
}
public static void main(String args[]){
Counter2 c1=new Counter2();
Counter2 c2=new Counter2();
Counter2 c3=new Counter2();
}
}
Output:1
2
3
2) Java static 메소드
어떤 메소드와 정적 키워드를 적용 할 때, 정적 메소드라 불립니다.
1- 정적 메소드는 클래스의 객체 보다는 클래스에 속합니다.
2- 정적 메소드는 클래스의 인스턴스를 생성할 필요 없이 호출 될 수 있습니다.
3- 정적 메소드는 정적 데이터 멤버에 접근 할 수 있고, 그 값을 변화 시킬 수 있습니다.
정적 메소드의 예시
// 모든 객체(정적 필드)의 공통 속성이 변하는 프로그램
class Student9{
int rollno;
String name;
static String college = "ITS";
static void change(){
college = "BBDIT";
}
Student9(int r, String n){
rollno = r;
name = n;
}
void display (){System.out.println(rollno+" "+name+" "+college);}
public static void main(String args[]){
Student9.change();
Student9 s1 = new Student9 (111,"Karan");
Student9 s2 = new Student9 (222,"Aryan");
Student9 s3 = new Student9 (333,"Sonoo");
s1.display();
s2.display();
s3.display();
}
output:111 Karan BBDIT
222 Aryan BBDIT
333 Sonoo BBDIT
일반 계산을 수행하는 정적 메소드의 다른 예시
// 정적 메소드로 주어진 숫자의 세제곱근을 얻는 프로그램
class Calculate{
static int cube(int x){
return x*x*x;
}
public static void main(String args[]){
int result=Calculate.cube(5);
System.out.println(result);
}
}
output:125
영어원문내용출처 :http://www.javatpoint.com/
번역,의역 및 작성 : 초코토끼
검수 : 개발토끼
오역 및 오타의 지적은 겸손히 받겠습니다.
'IT Story > about Java' 카테고리의 다른 글
Java Naming conventions 자바 명명 규칙 (0) | 2015.11.18 |
---|---|
Method Overloading, Overriding [자바] 메소드 오버로딩 오버라이딩 (0) | 2015.11.16 |
java Constructor 자바 생성자 (0) | 2015.11.12 |
자바 Inner Class 이너 클래스란 무엇인가?? (0) | 2015.11.10 |
Java Regex 자바 정규 표현식 (0) | 2015.11.04 |