java에서 구성원 변수와 국부 변수의 차이 분석

본고는 자바에서 구성원 변수와 국부 변수의 차이를 실례적으로 분석했다.여러분에게 참고할 수 있도록 나누어 드리겠습니다.구체적인 분석은 다음과 같다.
구성원 변수: 이 클래스에서 정의된 개인 변수는 이 클래스에 속합니다.
구성원 변수 생성 및 사용
public class Person {
    String name;
    String Sex;
    int age;
    double Height;
   
    public static void main(String arges[])
    {
        Person p=new Person();
        p.name=" ";
        p.Sex=" ";
        p.age=20;
        p.Height=1.7;
        System.out.println(" :"+p.name+", "+p.Sex+", :"+p.age+", :"+p.Height);
    }
}
구성원 변수 초기화 프로세스
클래스의 초기화
클래스의 초기화: 클래스의 초기화는 일반적으로 한 번만 초기화되고 클래스의 초기화는 주로 정적 구성원 변수를 초기화합니다.
클래스의 컴파일은 클래스의 초기화 과정을 결정한다.
컴파일러가 생성한 class 파일은 주로 원본 파일에 정의된 클래스를 다음과 같이 변경합니다.
1) 정적 구성원 변수의 정의 순서에 따라 클래스 내부에서 구성원 변수를 선언합니다.
2) 원java류에서 구성원 변수의 초기화 순서에 따라 초기화한다.
자바 클래스와 컴파일된 클래스의 변환은 다음과 같습니다.
소스 파일:
public class Person{
  public static String name=" ";
  public static int age;
  static{
       age=20;
    System.out.println(" age");
  }
  public static String address;
  static{
    address=" ";
    age=34;
  }
  public static void main(String[] args) {
                   System.out.println(name);
                   System.out.println(age);
                   System.out.println(address);
         }
}
자바 소스 코드가 class 파일로 변환되면 다음과 같은 코드로 변환됩니다.
public class Person{
  public static String name;
  public static int age;
  public static String address;
  static{
    name=" ";
    age=20;
    System.out.println(" age");
    address=" ";
    age=34;
  }
  public static void main(String[] args) {
                   System.out.println(name);
                   System.out.println(age);
                   System.out.println(address);
         }
}
초기화 순서는 변환 후 대응하는class류 구성원 변수의 초기화 순서에 따라 순서대로 실행되기 때문에 모든 정적 구성원 변수는 먼저 성명하고 나중에 값을 집행한다. 또한 값의 순서도 원본 코드에 따라 정적 구성원 변수를 초기화하는 순서에 따라 진행된다. 주의: 하나의 구성원 변수를 정의하고 직접 초기화하는 것은 정적 코드 블록에서 초기화하는 것과 같은 가격이다.모두 원본 코드에 정의된 순서에 따라 진행된다.
국부 변수
국부 변수: 방법체에서 생성됩니다. 방법체 외에는 이 변수에 접근할 수 없습니다.
국부 변수의 생성과 사용 (국부 변수는 반드시 값을 부여해야 하며 구성원 변수는 값을 부여하지 않을 수 있습니다)
 
public class Person {
    public static void main(String arges[])
    {
        String name=" ";
        String Sex=" ";
        int age=20;
        double Height=1.70;
        System.out.println(" :"+name+", "+Sex+", :"+age+", :"+Height);
    }
}
예를 들다
public class PassTest {
 public static void main(String args[]) {
  StringBuffer a = new StringBuffer("a");
  StringBuffer b = new StringBuffer("b");
  a(a, b);
  System.out.println(a);
  System.out.println(b);
 
  PassTest p = new PassTest();
 
  p.c();
 }
 static void a(StringBuffer a, StringBuffer b) {
  a = a.append(b);
  b = a;
 }
}
국부 변수의 사용 범위에 따라 결과는 ab가 되어야 하지만 실제로 출력된 것은 확실한 abb입니다. 왜요?
매개 변수 인용 문제를 전달해 주십시오.인용하면 같은 인용의 사본을 전달해야 한다.
a 방법 안의 b=a는 복사본 b인용=a를 바꾸는 것이지만main의 b에는 영향을 주지 않습니다.
a = a.append(b); 주로 a.append(b);이 문장은 a 인용이 가리키는 값을 바꿨습니다.main의 a도 같은 대상을 가리키기 때문에 abb로 출력됩니다
만약 a = a.append(b);a = new StringBuffer("ab")로 변경합니다.출력 a b
다음 두 단락의 프로그램을 다시 보십시오.
프로그램 1:
public class Variable
{
int i;
void test()
{
   int j=8;
   if(j==i)
    System.out.println(" ");
   else
    System.out.println(" ");
}
public static void main(String[] args)
{
   Variable v=new Variable();
   v.test();
}
}
프로그램 2:
public class Variable
{
   void test()
{
   int i;
   int j=8;
   if(j==i)
    System.out.println(" ");
   else
    System.out.println(" ");
}
public static void main(String[] args)
{
   Variable v=new Variable();
   v.test();
}
}
첫 번째 프로그램은 매우 정상적이어서 컴파일할 때 오류가 발생하지 않는다.두 번째 프로그램을 컴파일할 때 다음과 같은 오류가 표시됩니다.
D:Programjavatest>javac Variable.java
Variable.java:9: 변수가 초기화되지 않았을 수도 있습니다 i
                if(j==i)
                      ^
잘못
이러한 오류가 발생하는 이유는 구성원 변수에 기본값이 있기 때문이다. (final에 의해 수식되고 static의 필수 현식 부여가 없음) 국부 변수는 자동으로 부여되지 않기 때문이다.
유체는 두 부분으로 나뉜다.변수 정의 부분에서 정의된 변수는 클래스의 구성원 변수라고 하고, 방법체에서 정의된 변수와 방법의 매개 변수는 모두 국부 변수라고 부른다
국부 변수와 구성원 변수의 차이
국부 변수는 이 방법의 체내 속성을 묘사하고 구성원 변수는 이 대상의 속성을 묘사한다.
구성원 변수는public,protected,default,private,static,final 수식자에 의해 수식될 수 있고 국부 변수는final 수식자에게만 수식될 수 있습니다.
구성원 변수는 더미 안에서 만들고 국부 변수는 창고에서 만듭니다.
국부 변수는 시스템 기본값입니다. 국부 변수는 시스템 기본값이 없습니다. 수동으로 값을 부여해야 합니다.
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기