Latest web development tutorials

자바 수정

자바 언어는 다음과 같은 범주로 나누어 다양한 수식을 제공한다 :

  • 액세스 수정
  • 비 액세스 한정자

수정은 보통 문의 최전선에, 클래스, 메소드 또는 변수를 정의하는 데 사용됩니다. 다음의 예를 통해 설명하기 :

public class className {
   // ...
}
private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
   // 方法体
}

액세스 제어 수정

자바에는 클래스, 변수, 메소드, 생성자에 대한 액세스를 보호하기 위해 액세스 제어 문자를 사용할 수있다. 자바는 네 개의 서로 다른 액세스 권한을 지원한다.

기본적으로, 또한 어떤 수정을 사용하지 않는, 같은 패키지 안에 볼 기본값으로 알려져 있습니다.

개인, 개인 수정자가 지정된에, 같은 클래스 내에서 볼 수.

모든 클래스에 표시 대중 수정을 지정하기 위해이 있습니다.

보호에 보호 수정을 지정, 그 가시 같은 패키지 내의 모든 클래스와 서브 클래스.

기본 액세스 수정 - 모든 키워드를 사용하지 않는

같은 패키지 내 클래스에 대한 기본 액세스 수정에 선언 된 변수와 메소드를 사용하여 볼 수 있습니다. 변수가 암시 적으로 공용 static final로 선언 된 인터페이스, 인터페이스 곳 대중에 대한 기본 접근 방법.

예 :

다음과 같은 예를 들어, 변수와 메소드의 문은 수정을 사용할 수 없습니다.

String version = "1.5.1";
boolean processOrder() {
   return true;
}

개인 액세스 수정 - 개인

개인 액세스 한정자는 민간 방법, 변수로 선언 된 액세스의 가장 엄격한 수준이며, 만 액세스 할 수있는 클래스 생성자에 속하고, 클래스와 인터페이스 개인 선언 할 수 없습니다.

개인 액세스 유형으로 선언 된 변수는 클래스 공개 getter 메소드를 통해 클래스 외부에서 액세스 할 수 있습니다.

클래스 뒤에 보호 클래스 구현 세부 사항 및 데이터를 주로 사용하는 개인 액세스 한정자.

다음 클래스는 개인 액세스 한정자를 사용 :

public class Logger {
   private String format;
   public String getFormat() {
      return this.format;
   }
   public void setFormat(String format) {
      this.format = format;
   }
}

예는 Logger 클래스 형식의 변수는 다른 클래스이므로 직접 얻을 변수 값을 설정할 수있는 전용 변수이다. 다른 클래스 변수를 조작 할 수 있도록하기 위해 두 개의 공용 메서드 정의 클래스의 getFormat () (반환 값 형식) 및 setFormat (String)을 (형식 설정을)

공공 액세스 수정 -public

그것은 공용 클래스, 메소드, 생성자로서 선언하고, 액세스 인터페이스는 임의의 다른 형태 일 수있다.

다른 패키지의 public 클래스의 여러 상호 방문하면 공용 클래스가있는 적절한 패키지를 가져와야합니다. 상속 클래스이기 때문에, 모든 공용 메소드와 변수의 클래스는 서브 클래스에 의해 상속 될 수있다.

다음 기능은 공공 액세스 제어를 사용 :

public static void main(String[] arguments) {
   // ...
}

주요 자바 프로그램 () 메서드가 공개로 설정해야합니다, 그렇지 않으면, 자바 인터프리터는 클래스를 실행할 수 없습니다.

보호 된 액세스 한정자는 -protected

액세스의 다른 유형이 될 수 있습니다 같은 패키지에 변수, 메소드와 생성자를 보호하고, 다른 패키지 서브 클래스에 액세스 할 수 있습니다로 선언됩니다.

보호 액세스 개질제 클래스 및 인터페이스 방법을 수정할 수없고, 보호 부재로서 변수를 선언 할 수 있지만, 인터페이스의 멤버 변수와 멤버 메소드 보호 선언 될 수 없다.

우리는 이러한 방법과 변수를 사용하여 관련없는 클래스를 보호 할 수 있도록 서브 클래스가 액세스 할 수있는 수정은, 보호 방법 및 변수를 선언된다.

다음 부모 클래스가 보호 된 액세스 한정자를 사용, 서브 클래스는 부모 클래스의 openSpeaker () 메소드를 오버라이드 (override).

class AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

class StreamingAudioPlayer {
   boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

openSpeaker () 메소드가 전용으로 선언되면, AudioPlayer 클래스 이외에 방법을 액세스 할 수있다. openSpeaker ()가 공용으로 선언된다면, 모든 클래스의 방법을 액세스 할 수있다. 우리는 클래스의 하위 클래스로 프로세스가 표시되도록 할 경우 보호 같이, 방법이 선언된다.

액세스 제어 및 상속

다음 방법은 규칙을 상속주의 사항 :

  • 서브 클래스에서 public 메소드로 선언 상위 클래스는 공개해야합니다.

  • 상위 클래스는 하위 클래스에서 메서드를 보호 또는 보호 선언으로 선언, 하나 public으로 선언했다. 당신은 개인 선언 할 수 없습니다.

  • 개인 방법으로 선언 상위 클래스는 상속 될 수 없습니다.


비 액세스 한정자

다른 기능들을 달성하기 위해, 자바는 비 액세스 수식을 제공한다.

정적 수정은 클래스 메소드와 클래스 변수를 만드는 데 사용됩니다.

클래스, 메소드 및 변수를 장식하는 데 사용 최종 수정이 최종 수정 된 클래스는 상속 될 수 없습니다, 클래스의 수정 방법은 수정 된 변수 상수, 수정할 수 없습니다 재정의 상속 될 수 없습니다.

초록 수정 추상 클래스와 추상 메소드를 만드는 데 사용.

주로 프로그래밍 스레드, 동기화 및 휘발성 수정.

정적 수정

  • 정적 변수 :

    정적 키워드가없이 클래스가 인스턴스화 얼마나 많은 개체, 개체의 독립 정적 변수를 선언하지하는 데 사용됩니다, 그것은 정적 변수의 하나의 복사본입니다. 정적 변수는 클래스 변수라고도합니다. 지역 변수는 정적 변수로 선언 할 수 없습니다.

  • 정적 방법 :

    정적 키워드 개체 정적 메소드 무관 선언하는 데 사용된다. 정적 메서드는 비 정적 변수 클래스를 사용할 수 없습니다. 정적 메소드는 파라미터리스트로부터 데이터를 얻고, 그 다음 데이터를 산출한다.

클래스 변수와 메소드에 대한 액세스는 직접 classname.variablename 및 액세스의 classname.methodname 사용할 수 있습니다.

다음 예에서, 정적 수정은 클래스 메소드와 클래스 변수를 만드는 데 사용됩니다.

public class InstanceCounter {
   private static int numInstances = 0;
   protected static int getCount() {
      return numInstances;
   }

   private static void addInstance() {
      numInstances++;
   }

   InstanceCounter() {
      InstanceCounter.addInstance();
   }

   public static void main(String[] arguments) {
      System.out.println("Starting with " +
      InstanceCounter.getCount() + " instances");
      for (int i = 0; i < 500; ++i){
         new InstanceCounter();
          }
      System.out.println("Created " +
      InstanceCounter.getCount() + " instances");
   }
}

다음으로, 상기 편집 동작의 결과의 예 :

Started with 0 instances
Created 500 instances

최종 예선

최종 변수 :

최종 변수를 명시 적으로 초기화 한 번만 초기화 될 수있다. 최종 객체가 다른 객체를 가리 키지 수있는 참조 선언된다. 그러나 최종 목표 데이터가 변경 될 수있는. 즉, 최종 목표물 변경할 수 없지만,의 값은 변경 될 수있다.

최종 수정은 일반적으로 정적 개질제 클래스 상수를 생성하기 위해 함께 사용된다.

예 :

public class Test{
  final int value = 10;
  // 下面是声明常量的实例
  public static final int BOXWIDTH = 6;
  static final String TITLE = "Manager";

  public void changeValue(){
     value = 12; //将输出一个错误
  }
}

마지막 방법

최종 클래스 메소드는 서브 클래스에 의해 상속하지만, 서브 클래스를 수정할 수 없습니다.

상기 방법의 주요 목적은 이러한 방법의 최종 선언이 수정되는 것을 방지한다.

마찬가지로 최종 선언 수정 방법을 사용하여 다음과 같이.

public class Test{
    public final void changeName(){
       // 方法体
    }
}

최종 카테고리

최종 클래스는, 어떤 클래스는 최종 클래스의 특성 중 하나를 상속 할 수 없습니다하지 상속 할 수 있습니다.

예 :

public final class Test {
   // 类体
}

초록 수정

추상 클래스 :

추상 클래스는 객체를 인스턴스화하는 데 사용할 수 없습니다, 명령문의 유일한 목적은이 클래스의 향후 확장을위한 추상 클래스입니다.

클래스는 추상적이고 최종 수정할 수 없습니다. 클래스가 추상 메소드를 포함하는 경우, 클래스, 그렇지 않으면 추상 클래스와 같은 컴파일러 오류를 선언해야합니다.

추상 클래스는 추상적 인 방법과 비 추상 메소드를 포함 할 수있다.

예 :

abstract class Caravan{
   private double price;
   private String model;
   private String year;
   public abstract void goFast(); //抽象方法
   public abstract void changeColor();
}

추상 방법

어떤 방법은 추상적 방식 구현 서브 클래스에서 제공하는 방법의 특정 구현 없다. 추상적 인 방법은 최종적이고 엄격한으로 선언 할 수 없습니다.

서브 클래스는 서브 클래스가 추상 클래스가 아닌 추상 클래스가 상위 클래스의 모든 추상 메소드를 구현해야 상속합니다.

클래스가 추상 메소드를 포함하는 경우, 클래스는 추상 클래스로 선언해야합니다. 추상 클래스는 추상 메소드를 포함 할 수 없습니다.

추상 메서드 선언은, 예를 들어, 세미콜론으로 종료 : 공공 추상적 인 샘플을 ();

예 :

public abstract class SuperClass{
    abstract void m(); //抽象方法
}
 
class SubClass extends SuperClass{
     //实现抽象方法
      void m(){
          .........
      }
}

동기화 수정

방법은 하나의 스레드 액세스를 동시에 선언하는 키워드를 동기화. 동기화 개질제 네 액세스 수식에 적용 할 수있다.

예 :

public synchronized void showDetails(){
.......
} 

과도 수정

직렬화 된 객체가 과도 인스턴스 변수에 의해 수정 포함, 자바 가상 머신 (JVM)은 특정 변수를 건너 뜁니다.

개질제는 데이터 타입 클래스와 변수에 대한 변수 전처리 명세서의 정의에 포함된다.

예 :

public transient int limit = 55;   // will not persist
public int b; // will persist

휘발성 수정

휘발성 변형 부재 변수는 스레드가 액세스 될 때마다, 공유 메모리로부터의 멤버 변수 값을 다시 읽도록 강제한다. 또한, 멤버 변수 변경, 스레드가 공유 메모리에 다시 기록 값을 변경해야하는 경우. 임의의 시간에 서로 다른 스레드는 항상 멤버 변수의 동일한 값이 표시되도록.

휘발성 객체 참조가 null의 가능성이있다.

예 :

public class MyRunnable implements Runnable
{
    private volatile boolean active;
    public void run()
    {
        active = true;
        while (active) // 第一行
        {
            // 代码
        }
    }
    public void stop()
    {
        active = false; // 第二行
    }
}

정상적인 상황에서, 스레드는 호출 () 메소드를 중지 다른 스레드 (Runnable를 오픈 스레드) run () 메소드를 호출합니다. 버퍼의 첫번째 행의 활성 값은 상기 제 2 행에 사용할 경우 활성 사이클은 멈추지 않는다 false이면.

그러나, 위의 코드는, 우리는 수정 된 휘발성 활성 사용하므로 사이클이 정지됩니다.