static 및 this 키워드
1、static
일반적으로, 클래스를 만들 때, 그 클래스의 대상의 외관과 행동을 설명합니다. new로 그 클래스의 대상을 만들지 않으면, 실제로는 그 어떠한 대상도 만들 수 없습니다.대상을 만들 때 new를 실행해야만 데이터 저장 공간이 분배되고 그 방법은 외부에서 호출될 수 있습니다.그러나 상술한 방법은 해결할 수 없는 두 가지 상황이 있다.1. 특정한 데이터에 하나의 저장 영역을 분배하고 싶을 뿐 얼마나 많은 대상을 만들 것인지를 고려하지 않고 심지어는 그 어떠한 대상도 만들고 싶지 않다.2. 어떤 방법이 그 클래스를 포함하는 어떤 대상과 연결되지 않기를 바란다.어떤 대상도 만들지 않아도 이 방법을 사용할 수 있다는 것이다.static 키워드를 통해 상술한 두 가지 상황을 해결할 수 있다
정적 변수와 정적 방법
static 키워드를 정의하기 전에 필드나 방법을 static로 정의할 수 있습니다. 예를 들어:
public class StaticTest{
private static int i= 0;
private static void fun(){
System.out.println("this is static method");
}
}
정적 변수는 아무리 많은 대상을 만들어도 하나의 저장 공간만 있기 때문에 정적 변수는 대상을 통해 인용할 수도 있고 클래스 이름을 통해 직접 인용(추천)할 수도 있다. 이런 논리도 정적 방법에 적용된다.하나의static필드는 모든 클래스에 하나의 저장 공간만 있기 때문에static필드가 아니라 모든 대상에 하나의 저장 공간이 있기 때문에static가 특정한 필드에 작용할 때 데이터의 생성 방식을 바꿀 수 있지만static가 특정한 방법에 작용할 때의 차이는 그다지 크지 않다. 다른 방법과 마찬가지로static방법도 이 클래스의 대상을 만들고 사용할 수 있다.static 방법의 중요한 사용법은 대상을 만들지 않는 전제에서 그것을 호출할 수 있다는 것이다.
정적 코드 블록
정적 코드 블록은 static 키워드와 {}로 구성되어 있으며 정적 코드 블록의 실행 우선순위는main 방법보다 높고 구조 방법보다 높다. 예를 들어 다음과 같다.
public class StaticTest {
public static void main(String[] args){
System.out.println("this is main");
}
static {
System.out.println("this is static coding block");
}
}
:
this is static coding block
this is main
2、this
다음 예에서 같은 유형의 두 대상 a와 b가 같은 방법인peel()을 사용했는데peel() 방법에 대해 어떻게 그가 a에 호출되었는지 b에 호출되었는지 알 수 있습니까?
public class BananaPeel {
public static void main(String[] args){
Banana a = new Banana();
Banana b = new Banana();
a.peel(1);
b.peel(2);
}
}
class Banana{
public void peel(int i){
System.out.println("peel:"+i);
}
}
간편하고 대상을 대상으로 하는 문법으로 코드를 작성할 수 있도록 컴파일러가 배후 작업을 했다.이것은 '조작 대상의 인용' 을 첫 번째 매개 변수로 호출된 방법peel () 에 몰래 전달합니다.그래서 상술한 두 호출은 내부 원리상 이렇게 되었다.
Banana.peel(a,1);
Banana.peel(b,2);
방법 내부에서 현재 대상에 대한 인용을 원한다면.이것은 컴파일러 내부에서 전송된 것이기 때문에 식별자를 사용할 수 없습니다.그러나 이를 위한 전문적인 키워드는this이다.this 키워드는 방법 내부에서만 사용할 수 있으며 '호출 방법의 대상에 대한 인용' 을 나타냅니다. this의 사용법은 다른 대상의 인용과 다르지 않습니다.그러나 방법 내부에서 다른 종류의 다른 방법을 호출하면this를 사용하지 않고 직접 호출하면 된다는 것을 주의해야 한다.현재 방법의this 인용은 같은 종류의 다른 방법에 자동으로 적용됩니다.현재 응용 프로그램의 인용을 명확하게 지적해야 할 때만this 키워드를 사용해야 합니다. 현재 대상의 인용을 되돌려야 할 때returnthis를 사용할 수 있습니다.
public class Leaf {
int i = 0;
Leaf increment(){
i++;
return this;
}
private void print(){
System.out.println("i= "+i);
}
public static void main(String[] args){
Leaf leaf = new Leaf();
leaf.increment().increment().increment().print();
}
}
:i=3
this 키워드는 현재 객체를 다른 방법으로 전달하는 데도 유용합니다.
public class PassingThis {
public static void main(String[] args){
new Person().eat(new Apple());
}
}
class Person{
public void eat(Apple apple){
Apple peeled = apple.getPeeled();
System.out.println("Yummy");
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this);
}
}
class Peeler{
static Apple peel(Apple apple){
return apple;
}
}
:Yummy
전체 과정이 같은 애플을 실행하는지 확인하기 위해 애플의 get Peeled () 방법은this를 사용해야 합니다. 만약 여기서 new 애플 () 을 사용한다면.애플을 다시 만들면 결국 퍼슨에게 돌아가는 애플은 퍼슨이 원하는 처리된 애플이 아니다.즉, 사람은 그의 사과를 외부에서 덩어리로 썰어 주고, 이 과정에서 처리된 사과는 다시 사과를 만들어서 덩어리로 썰어 주는 것이 아니라 사람이 건네준 사과라는 것을 보증한다.
구조기에서this 사용하기
보통this를 쓸 때'이 대상'또는'현재 대상'을 가리키며 그 자체가 현재 대상에 대한 인용을 나타낸다. 구조기에서this에 매개 변수 목록을 추가하면 서로 다른 의미를 가진다.이것은 이 매개 변수 목록에 부합되는 어떤 구조기에 대한 명확한 호출을 생성할 것입니다.이렇게 다른 구조기를 호출하면 직접적인 경로가 있다
public class Flower {
private int petalCount = 0;
private String s = "initial value";
public Flower(int petals) {
petalCount = petals;
System.out.println("Constructor int arg only petalCount=" + petals);
}
public Flower(String ss) {
System.out.println("Constructor int arg only s=" + ss);
s = ss;
}
public Flower(String s,int petals) {
this(petals);
//this(s); // this ,
this.s = s;
System.out.println("String&int args " );
}
public Flower() {
this("hi",47);
System.out.println("default Constructor ");
}
private void printPetalCount(){
System.out.println("petalCount:"+petalCount+" s:"+s);
}
public static void main(String[] args){
Flower flower = new Flower();
flower.printPetalCount();
}
}
:
Constructor int arg only petalCount=47
String&int args
default Constructor
petalCount:47 s:hi
주의:this를 사용하면 하나의 구조기만 호출할 수 있으며, 반드시 맨 처음에 놓아야 합니다.구조기를 제외한 다른 어떤 방법도 구조기를 호출할 수 없다.방법 매개 변수 이름이 구성원 변수 이름과 같으면this를 사용할 수 있습니다.변수 이름
3. this와 static
static 방법을this가 없는 방법으로 이해할 수 있다.static 방법 내부에서 비용 static 방법을 호출할 수 없습니다. 대상을 static 방법에 전달하지 않는 한 (추천하지 않음)그러나 비static 방법은static 방법을 호출할 수 있고 어떠한 대상도 만들지 않은 상황에서 클래스 이름만으로static 방법을 호출할 수 있다.
에서 참고하다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.