java学习笔记19--实例变量,局部变量和静态变量

程序的基本功能是处理数据,程序中需要使用变量来接收并表示数据。
程序中的变量必须先定义之后才能使用。
定义变量包括定义变量的"类型"以及变量的"名字"。
     例如: int a; Student s;
 程序中的变量分为实例变量,局部变量和静态变量。

1)实例变量(又称属性、全局变量、成员变量)
        位置:
            直接定义在中类,属于类中的一种成员(成员变量/成员方法)。
            例如:
            public class Student{
                public String name;
            }

        作用范围:
            是指变量定义之后,都在哪些地方可以被访问到。
            由于实例变量是直接定义在类中的,所以在定义的时候可以使用修饰符进行修饰。
            例如:这四种修饰符的作用之后会介绍到
            public class Student{
                public String name1;
                protected String name2;
                String name3;
                private String name4;
            }
            以上是使用了四种访问权限控制修饰符来修饰了这四个变量。
            但是不管是哪种修饰符情况,实例变量再当前类中的每一个方法都是可以被访问到的(static修饰的静态方法除外)。

            public class Student{
                public String name1;
                protected String name2;
                String name3;
                private String name4;
                
                //类中的方法里面可以直接访问实例变量
                public void run(){
                    System.out.println(name1);
                    System.out.println(name2);
                    System.out.println(name3);
                    System.out.println(name4);
                }
            }
            
        默认值:
            类的中实例变量声明后,如果我们没有显式赋值的话,每种实例变量其实都是有自己的默认值的。
            实例变量的赋值分为隐式赋值和显式赋值
                隐式赋值就是JVM给它赋的值(就是说的默认值)
                显式赋值就是我们主动给它赋的值
            例如:
            public class Student{
                public int a;
                public float f;
                public char c;
                public boolean b;
                public String str;

                public void println(){
                    System.out.println(a);
                    System.out.println(f);
                    System.out.println(c);
                    System.out.println(b);
                    System.out.println(str);
                }
            }

            基本类型的实例变量:
                整型    :默认值为 0
                浮点型    :默认值为 0.0
                布尔型    :默认值为 false
                字符型    :默认值为 0 或者 '\u0000'
            引用类型的实例变量:
                默认值都是 null
        
        生命周期:
            实例变量是属于对象的,一个对象被创建出来的时候,这个对象中的实例变量就有了,直到这个对象被GC当做垃圾回收之后,这个实例变量也就没有了。

2)局部变量
        位置:
            定义在方法的代码块中或者方法的参数列表中
            例如:a b c d四个都是局部变量
                public void test(int a){
                    int b;
                    {
                        int c;
                    }

                    if(true){
                        int d;
                    }
                }

        作用范围:
            1)如果是定义在方法的参数列表中,那么在当前方法的任何位置都可以访问该局部变量
                例如:
                public void test(int a){
                    System.out.println(a);
                    {
                        System.out.println(a);
                    }

                    if(true){
                        System.out.println(a);
                    }
                }

            2)如果是定义在方法中,那么就要看这个局部变量是"直接"位于哪一对大口号内
                例如:
                public void test(){
                    int a;
                    {
                        int b;
                    }

                    if(true){
                        int c;
                    }
                }
                观察局部变量a/b/c三个分别是"直接"位于哪一对大括号内,那么这个局部变量的作用范围就在那一对大括号内.
                如果访问的地方出了这个范围,那么是访问不到这个局部变量的。
            
        默认值:
            局部变量是"没有"默认值的,我们只能显式的赋值之后才能使用该变量,否则会编译报错.
            例如:
                //编译通过
                //只定义了变量但是没有使用
                public void test(){
                    int a;
                }

                //编译报错
                //因为在使用局部变量之前没有赋值
                public void test(){
                    int a;
                    System.out.println("a = "+a);
                }

                //编译通过
                //只有在使用之前赋值就可以了
                //int a = 1;
                //当然声明的同时就赋值也是可以的
                public void test(){
                    int a;
                    
                    a = 1;
                    System.out.println("a = "+a);
                }


        声明周期:
            当方法被调用,代码执行到局部变量的声明这一刻开始,这个局部变量就出现了,直到局部变量"直接"位于的大括号内中的代码执行结束的时候,该变量在内存中也就释放消失了。
            例如:
                //test方法执行完,变量a就没有了
                public void test(){
                    int a;
                }

                //if代码块执行完,变量b就没有了
                public void test(){
                    if(true){
                        int b;
                    }
                    
                    //这里是访问不到变量b的,编译报错
                    System.out.println("b = "+b);
                }

3)静态变量(类变量,必须用static关键字修饰)
静态变量从属于类,只要程序加载了类的字节码,静态变量就会被分配空间,即可使用。(在没有创建对象的情况下,可以通过类名直接调用static修饰的方法和变量)

java学习笔记19--实例变量,局部变量和静态变量_第1张图片

输出结果:m.x=4   m.y=10
                  n.x=6    n.y=10

 

你可能感兴趣的:(java学习笔记19--实例变量,局部变量和静态变量)