객체 지향 ----- 21Java 액세스 제어 수정, static 키워드, 최종 키워드

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/qq_44787898/article/details/102759441

1. 액세스 제어 수정

대중 행동의 데이터 민영화

  • 공공 : 공공, 모든 클래스
  • 개인 : 개인이 클래스
  • 보호 : 보호,이 클래스, 서브 클래스, 가방
  • 기본값 : 가방 아무것도 작성,이 클래스,
  • 액세스 수정 클래스 : 공공 및 기본
  • 반원 수정 액세스 :이 네 가지 인 경우
    여기에 그림 삽입 설명

2.static

2.1 정적 변수

  • 정적으로 수정
  • 변형 된 고정 부재 변수 데이터 구조가 아닌 개체로, 클래스에 속하며, 하나의 메소드 영역이
  • 종종 클래스 이름을 통해 액세스.
  • 사용하는 경우 : 사용하는 경우 모든 데이터 객체는 동일합니다
class Cat {
   private int age;
   private static int numOfCats;
   public Cat(int age){
      this.age = age;
      System.out.println(++numOfCats);
   }
}
Cat c1 = new Cat(2);
Cat c2 = new Cat(3);

여기에 그림 삽입 설명

2.2 정적 메소드

  • 이 메소드를 호출 할 때의 방법은 일반적으로 특정 오브젝트에 대한 조작을 수반되며, 필요 암시 객체 참조를 전달하는 (이)
int d = p1.distance(p2);
//调用distance方法时,除了传递p2参数外,还隐式的传递了p1作为参数,在方法中的this关键字即表示该参数
  • 호출시에있어서의 정적 변형이 특정 개체의 동작을 위해 요구되지 않고, 그 동작 결과는 클래스 이름을 직접 참조하여, 입력 파라미터에만 관련되어
double c = Math.sqrt(3.0 * 3.0 + 4.0 * 4.0);
//该方法在调用时,没有隐式的传递对象引用,因此在static方法中不可以使用this关键字
  • 이것은 어떤 객체가없는 것을 의미하지 않는다 개체가. 액세스 인스턴스 변수이기 (위해) 때문에, 정적 방법은 직접 인스턴스 멤버에 액세스 할 수 없습니다
  • 호출 할 때 특정 정적 오브젝트 없기 때문에 정적 메소드 내의 액세스 비 정적 부재 (의 부재)이 아니다. 행동의 방법은 정적 "도구 방법"및 "공장 방법"등을 제공하는 것입니다.

2.3 정적 블록

  • 정적으로 수정
  • 정적 블록도 ​​한번만 실행될 수 있도록 클래스에 클래스가 자동으로 로딩하는 동안 수행된다 속하는 클래스는 한번만로드
  • 때 사용하는 방법 : 그들은 종종로드하는 데 사용됩니다 / 정적 리소스를 초기화 (이미지, 오디오, 비디오)
class Foo{
   static{
     //类加载期间,只执行一次
     System.out.println("Load Foo.class");
   }
   public Foo{
     System.out.println("Foo()");
   }
}
Foo foo = new Foo();
//输出的结果为:
//Load Foo.class
//Foo()
//Foo类加载时,运行静态块,在创建对象之前

3.final

  • ------ 수정 변수 변수는 변경 될 수 없다
  • --------- 방법을 수정하는 방법을 재정의 할 수 없습니다
  • 클래스는 상속 될 수 없습니다 ------------ 수정 된 클래스
package oo.day04;
//final演示
public class FinalDemo {
	public static void main(String[] args) {
	}
}
class Zoo{}
final class Xoo extends Zoo{} //可以继承别的类
//class Yoo extends Xoo{}//错误,final修饰类不能被继承

class Loo{  //final修饰方法---不可被重写
	void show(){}
	final void say(){}
}
class Moo extends Loo{
	void show(){}
	//void say(){} //错误,final方法不能被重写
}

class Koo{  //final修饰变量---不能改变,用得比较少
	final int a = 5; //声明同时初始化
	final int b;   
	Koo(){
		b = 5;   //先声明,再在构造中初始化
	}
	void show(){
		final int c;  //应用率几乎为零
		//System.out.println(c);//错误,c没有值
		c = 5;
		System.out.println(c);
	}
  void say(){
  	//a = 88; //错误,final修饰的变量不能改变
  }
}

  • 수정 된 최종 고정 부재 변수라는 상수를 초기화하는 동시에 선언해야한다. 변경할 수 없습니다
  • 정적 최종 상수는 컴파일시에 대체됩니다
class Foo{
   public static final int NUM = 100;
}
class Goo{
   public static void main(String[] args){
      System.out.println(Foo.NUM);
      //代码编译时,会替换为:System.out.println(100);
   }
}

보충

멤버 변수

1. 인스턴스 변수 :
1) 개체로는, 힙의 존재 속하는
2) 여러 개체가있는 인스턴스 변수의 수
. 3) 오브젝트 이름을 통해 액세스되어야
2. 정적 변수
1) 클래스에 속한다는 영역의 방법이있다
2) 하나
3) 자주 클래스 이름을 통해 액세스.

class Aoo{
    int a;//实例变量
    static int b;//静态变量
}

추천

출처blog.csdn.net/qq_44787898/article/details/102759441