Java에서 개인 정적 변수의 용도는 무엇인가?
변수가 다음과 같이 선언된 경우public static varName;
, 그러면 나는 어디서든 접속할 수 있다.ClassName.varName
정적 멤버는 클래스의 모든 인스턴스에 의해 공유되며 각 인스턴스에 재할당되지 않는다는 것도 알고 있다.
변수를 다음과 같이 선언함private static varName;
변수를 선언하는 것과 다른 것private varName;
?
두 경우 모두 다음과 같이 접근할 수 없다.ClassName.varName
또는 로서ClassInstance.varName
다른 어떤 계급에서도
변수를 정적으로 선언하면 다른 특수 특성이 있는가?
물론 다음과 같이 접속할 수 있다.ClassName.var_name
, 그러나 그것이 정의되는 클래스 안에서만 - 그것은 그것이 정의되기 때문이다.private
.
public static
또는private static
변수는 종종 상수에 사용된다.예를 들어, 많은 사람들은 그들의 코드에서 "하드 코드" 상수를 만드는 것을 좋아하지 않는다.public static
또는private static
의미 있는 이름을 가진 변수 및 코드에서 코드를 보다 쉽게 읽을 수 있도록 한다(또한 그러한 상수를 만들어야 한다).final
).
예를 들면 다음과 같다.
public class Example {
private final static String JDBC_URL = "jdbc:mysql://localhost/shopdb";
private final static String JDBC_USERNAME = "username";
private final static String JDBC_PASSWORD = "password";
public static void main(String[] args) {
Connection conn = DriverManager.getConnection(JDBC_URL,
JDBC_USERNAME, JDBC_PASSWORD);
// ...
}
}
이 을 만들든 말든.public
또는private
변수를 클래스 외부에 표시할지 여부에 따라 다름.
정적 변수는 클래스의 모든 인스턴스에 대해 단일 값을 가진다.
만약 다음과 같은 것을 만든다면:
public class Person
{
private static int numberOfEyes;
private String name;
}
네 이름을 바꾸고 싶었잖아, 괜찮아, 내 이름은 그대로야만약 당신이 17개의 눈을 가지도록 바꾸고 싶다면, 세상의 모든 사람들도 17개의 눈을 가질 것이다.
개인 정적 변수는 개인 인스턴스 변수가 유용한 것과 동일한 방식으로 유용하다. 즉, 동일한 클래스 내에서 코드만으로 액세스되는 상태를 저장한다.접근성(프라이빗/퍼블릭/etc)과 변수의 인스턴스/정적 특성은 전적으로 직교 개념이다.
나는 정적 변수를 클래스의 "모든 인스턴스" 간에 공유되는 것으로 생각하지 않는다. 즉, 국가가 존재하기 위해서는 최소한 하나의 인스턴스가 있어야 한다는 것을 암시한다.아니오 - 정적 변수는 유형의 인스턴스 대신 유형 자체와 연관되어 있다.
따라서 특정 인스턴스(instance)가 아닌 유형과 연관된 상태를 원하는 경우, 해당 상태를 비공개 상태로 유지(예를 들어 속성을 통해 제어된 액세스를 허용하는 경우)하려면 개인 정적 변수가 있는 것이 타당하다.
이와는 별도로, 나는 여러분이 공개하는 유일한 유형의 변수들 - 불변의 유형의 정적 최종 변수들 - 상수라고 강력하게 권하고 싶다.다른 모든 것은 API와 구현을 분리하기 위해 비공개여야 한다(다른 무엇보다도).
음, 당신이 옳지만, 공공 정적 변수는 클래스의 인스턴스를 만들지 않고 사용된다. 하지만 개인 정적 변수는 그렇지 않다.그것들과 내가 개인 정적 변수를 사용하는 위치 사이의 가장 큰 차이점은 정적 함수에 변수를 사용해야 할 때다.정적 함수의 경우 정적 변수만 사용할 수 있으므로 다른 클래스에서 액세스하지 않도록 해당 변수를 비공개로 설정하십시오.그것이 내가 사적인 정적을 사용하는 유일한 경우다.
예를 들면 다음과 같다.
Class test {
public static String name = "AA";
private static String age;
public static void setAge(String yourAge) {
//here if the age variable is not static you will get an error that you cannot access non static variables from static procedures so you have to make it static and private to not be accessed from other classes
age = yourAge;
}
}
변수를 다음과 같이 선언함
private static varName;
변수를 선언하는 것과 다른 것private varName;
?
둘 다 그리고 첫 번째 것은 불려진다.class variable
왜냐하면 그것은 그것에 대한 단일 가치를 가지고 있기 때문이다.class
다른 하나가 불리우는 반면instance variable
왜냐하면 그것은 다른 것에 대해 다른 가치를 가질 수 있기 때문이다.instances(Objects)
첫 번째 인스턴스는 jvm에서 한 번만 생성되고 다른 하나는 인스턴스당 한 번 생성됨. 즉, 10개의 인스턴스가 있는 경우 10개의 다른 인스턴스가 생성됨private varName;
jvmlo로
변수를 다음과 같이 선언하는가?
static
그것에게 다른 특별한 재산을 주겠는가?
예, 정적 변수는 일반 인스턴스(instance) 변수와 다른 특성을 얻는다.나는 이미 몇 가지 언급했는데 여기서 몇 가지를 보자.class variables
(정적인 것으로 선언되는 변수)는 다음과 같은 클래스 이름을 사용하여 직접 액세스할 수 있다.ClassName.varName
그리고 해당 클래스의 모든 객체는 해당 객체에 의해서만 액세스되는 인스턴스 변수와는 달리 그 값을 액세스하고 수정할 수 있다.클래스 변수는 정적 방법으로 사용할 수 있다.
a의 용도는 무엇인가?
private static variable
자바에서?
논리적으로,private static variable
와 다를 바 없다public static variable
오히려 첫 번째는 당신에게 더 많은 통제력을 준다., 그대로 IMO를 할 수 .public static variable
에 의해private static variable
의 도움으로public static
겟터 및 세터 방식
널리 사용되는 하나의 영역private static variable
한 단순성의 .Singleton
전 세계에서 그 클래스의 단 한 예만 가질 수 있는 패턴.여기static
식별자는 단일 인스턴스가 외부 세계에서 액세스할 수 있도록 하는 데 중요한 역할을 한다(물론 공개 정적 게터 방식도 주 역할을 한다).
public class Singleton {
private static Singleton singletonInstance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return Singleton.singletonInstance;
}
}
글쎄요.private static
변수를 사용하여 해당 클래스의 인스턴스 간에 데이터를 공유할 수 있다.귀하가 옳으시다면, 저희는 에 액세스할 수 없습니다만private static
다음과 같은 구문을 사용하는 변수ClassName.member
또는ClassInstance.member
그러나 구성원은 항상 해당 클래스의 방법 또는 해당 클래스의 인스턴스에서 볼 수 있다.그래서 사실상 그 클래스의 예들은 항상 멤버를 언급할 수 있을 것이다.
개인 정적 클래스 변수의 용도는 무엇인가?
도서관 책 클래스가 있다고 가정해 봅시다.새 책을 만들 때마다 고유한 ID를 할당하려는 경우.한 가지 방법은 단순히 0에서 시작하여 ID 번호를 증가시키는 것이다.하지만, 다른 모든 책들은 어떻게 마지막으로 만들어진 ID 번호를 알 수 있을까?단순, 정적 변수로 저장하십시오.고객들은 실제 내부 ID 번호가 각 책마다 있는지 알아야 하는가?아니, 그 정보는 비공개야
public class Book {
private static int numBooks = 0;
private int id;
public String name;
Book(String name) {
id = numBooks++;
this.name = name;
}
}
이것은 조작된 예지만, 모든 클래스 인스턴스가 다른 모든 계층으로부터 비공개되어야 하는 공통 정보에 접근할 수 있는 경우를 쉽게 생각할 수 있을 것이다.또는 할 수 없더라도 사물을 가능한 한 사적인 것으로 만드는 것이 좋은 프로그래밍 연습이다.만약 당신이 실수로 그 numBooks 필드를 공개하게 된다면, 비록 Book 사용자들은 그것을 가지고 어떤 것도 해서는 안되지만 말이다.그러면 누군가가 새로운 책을 만들지 않고도 책의 수를 바꿀 수 있을 것이다.
아주 교활해!
그private
키워드는 클래스 내에서 변수 액세스에 사용할 수 있으며static
정적 방법으로 변수에 접근할 수 있다는 뜻이지
정적 방법으로는 비정적 기준 변수에 액세스할 수 없는 경우 이 원인이 필요할 수 있다.
또 다른 관점:
- 클래스와 인스턴스는 런타임에 서로 다른 두 가지 사항이다.클래스 정보는 해당 클래스의 모든 인스턴스에 의해 "공유"된다.
- 비정적 클래스 변수는 인스턴스에 속하고 정적 변수는 클래스에 속한다.
- 인스턴스(instance) 변수가 비공개 또는 공개적일 수 있는 것처럼, 정적 변수 역시 비공개 또는 공개적일 수 있다.
정적 변수는 클래스의 모든 인스턴스에 공통적인 변수들이다.한 인스턴스가 변경되면..그러면 정적 변수 값이 다른 모든 인스턴스에 대해 업데이트될 것이다.
어떤 사람들에게는, 만약 그들이 그것을 두 개의 다른 언어로 본다면, 더 이치에 맞다. 그래서 나는 Java로 예를 썼고, PHP는 내가 이 수식어들을 설명하는 페이지에 썼다.잘못 생각하고 있을지도 몰라.
아래 내용이 이해가 안 되면 내 사례를 봐야 해.여기로 이동 http://www.siteconsortium.com/h/D0000D.php
하지만 결론은 그것이 말하는 것과 거의 똑같다는 것이다.그것은 사적인 정적 멤버 변수다.예를 들어 Singleton 개체를 생성하려는 경우 SingletonExample.instance 변수를 공개하려는 이유만약 당신이 수업을 이용하고 있는 사람이 그 값을 쉽게 덮어쓸 수 있다.
그게 다야.
공용 클래스 SingletonExample{개인용 정적 SingletonExample 인스턴스 = null;비공개 정적 int 값 = 0;개인 SingletonExample() {++이것.값;}공용 정적 SingletonExample getInstance() {만약!=csv)반환 인스턴스;동기화된(SingletonExample.class) {인스턴스 = 새 SingletonExample();반환 인스턴스;}}public void printValue() {System.out.print(이 .value );} 공용 정적 보이드 주(String [] args) {SingletonExample 인스턴스 = getInstance();instance.printValue();인스턴스 = getInstance();instance.printValue();}}
자바는 처음 접하지만 많은 사람들이 알고 있듯이 정적 변수를 사용하는 한 가지 방법은 클래스의 인스턴스 수를 세는 것이다. 예:
public Class Company {
private static int numCompanies;
public static int getNumCompanies(){
return numCompanies;
}
}
그리고 나서 당신은 sysout할 수 있다.
Company.getNumCompanies();
수업의 각 인스턴스에서 numCompanies에 접속할 수도 있지만(완전히 이해하지는 못하지만), "정적인 방식"은 아닐 것이다.이게 최선의 방법인지 아닌지는 모르겠지만, 내겐 말이 돼.
에서는 다다다에에를 들 수 있다eye
PersonBERE는 동질적이다.leg
그대로 유지한다.이는 개인 변수가 자신의 복사본을 메소드에 만들어 원래 값이 그대로 유지되도록 하기 때문이다. 반면 개인 정적 값은 모든 공유 방법에 대해 하나의 복사본만 가지고 있기 때문에 값을 편집하면 원래 값이 변경된다.
public class test {
private static int eye=2;
private int leg=3;
public test (int eyes, int legs){
eye = eyes;
leg=leg;
}
public test (){
}
public void print(){
System.out.println(eye);
System.out.println(leg);
}
public static void main(String[] args){
test PersonA = new test();
test PersonB = new test(14,8);
PersonA.print();
}
}
> 14 3
정적 방법에서 변수를 사용하는 경우 변수도 다음과 같이 정적이어야 한다.
private static int a=0;
public static void testMethod() {
a=1;
}
변수가 공개 정적으로 정의되면 어떤 클래스에서든 클래스 이름을 통해 액세스할 수 있다.
보통 함수는 구현 클래스 이름을 부르는 것만으로 접근할 수 있는 공개 정적으로 정의된다.
그것의 아주 좋은 예로는 다음과 같다.sleep()
스레드 클래스의 메서드
Thread.sleep(2500);
변수가 개인 정적(private static)으로 정의된 경우 해당 클래스 내에서만 액세스할 수 있으므로 클래스 이름이 필요하지 않거나 클래스 이름을 계속 사용할 수 있다(최대 사용자).private var_name과 private static var_name의 차이점은 private static var_name은 class의 정적 방법으로만 액세스할 수 있는 반면 private static 변수는 해당 클래스의 어떤 방법으로도 액세스할 수 있다는 것이다(static methods 제외).
그것의 아주 좋은 예로는 데이터베이스 연결이나 변수를 개인 정적으로 선언할 필요가 있는 상수를 정의하는 것이다.
또 다른 일반적인 예는 다음과 같다.
private static int numberOfCars=10;
public static int returnNumber(){
return numberOfCars;
}
*)변수가 비공개로 선언되면 클래스 밖에서는 볼 수 없다.이것을 데이터 하이딩이라고 한다.
*)변수가 정적(static)으로 선언되면 변수의 값은 모든 인스턴스에 대해 동일하며, 우리는 그 변수를 호출할 객체를 만들 필요가 없다.우리는 간단히 그 변수를 부를 수 있다.
classname.variableename;
개인 정적 변수는 하위 클래스에서도 공유될 것이다.한 하위 클래스에서 변경하고 다른 하위 클래스에서 변경된 값을 얻는 경우, 이 경우 기대한 값이 아닐 수 있다.
public class PrivateStatic {
private static int var = 10;
public void setVar(int newVal) {
var = newVal;
}
public int getVar() {
return var;
}
public static void main(String... args) {
PrivateStatic p1 = new Sub1();
System.out.println(PrivateStatic.var);
p1.setVar(200);
PrivateStatic p2 = new Sub2();
System.out.println(p2.getVar());
}
}
class Sub1 extends PrivateStatic {
}
class Sub2 extends PrivateStatic {
}
클래스에서 개인 정적 변수를 사용하면 클래스의 정적 내부 클래스가 변수에 도달할 수 있다.이것은 컨텍스트 보안에 완벽하게 좋다.
ThreadLocal
변수는 일반적으로 다음과 같이 구현된다.private static
. 이렇게 하면 클래스에 바인딩되지 않으며 각 스레드는 자체적인 "스레드 로컬" 객체에 대한 참조를 갖는다.
참조URL: https://stackoverflow.com/questions/7279887/what-is-the-use-of-a-private-static-variable-in-java
'Programing' 카테고리의 다른 글
GCC 최적화가 활성화된 상태에서 스트렌을 사용하는 코드가 6.5배 느리게 표시되는 이유는? (0) | 2022.05.04 |
---|---|
읽기()와 recv()의 차이점과 보내기()와 쓰기()의 차이점은 무엇인가? (0) | 2022.05.04 |
v-for를 사용하여 어레이의 일부만 반복하는 방법 (0) | 2022.05.04 |
역추적()/backtrace_symbols() 기능 이름을 인쇄하는 방법? (0) | 2022.05.04 |
알 수 없는 작업: Vuex를 사용하여 카운터가 증가하지 않음(VueJS) (0) | 2022.05.04 |