(二)Java对象与内存控制
一、java的类变量和实例变量:
java中的变量可分成两种:成员变量和局部变量。
1、局部变量包括以下几类:
方法内的局部变量:作用域为方法体。代码块内的局部变量:作用域为代码块形参:方法内的形式参数,作用域为方法体。注意:局部变量的生存期很短,被存储在方法的栈内存之中。
2、成员变量:类体内定义的变量,使用static修饰的成员变量称为静态变量或者类变量。
没有被static修饰的成员变量称为实例变量。
注意1:static关键字的用法
static可以修饰的部分包括:成员变量、方法、内部类、初始化代码块、内部枚举类。如果使用static修饰,这些成
员就属于类本身,否则属于类实例。
注意2:Java中的前向引用。
一般看来,java没有规定定义成员变量时要有先后顺序。但Java要求定义成员变量时必须采用合法的前向引用。
package com.beijng.object;public class Object01 { //a变量在b变量没定义之前就引用它,属于非法前向引用int a = b + 1;int b = 2;}public class Object02 { //属于非法前向引用static int a = b + 1;static int b = 2;}public class Object01 { //完全正常 int a = b + 1;static int b = 2;}package com.beijng.object;public class User { String username;String password;public User(String username,String password){System.out.println("执行构造方法");this.username = username;this.password = password;}{System.out.println("执行非静态初始化块");age = 18;}//定义时指定初始值int age =20;public String toString(){ return "username="+username+",password="+password+",age="+age;}public static void main(String[] args){User user1 = new User("xiaoming","123");System.out.println(user1);}}package com.beijng.object;public class JavapToolTest {int a = 30;{a = 31;}public JavapToolTest(){System.out.println(a);}public JavapToolTest(String b){System.out.println(b);}}
package com.beijng.object;class Base {private int i = 2;public Base(){ System.out.println(this.i);//输出2this.display();}public void display(){System.out.println(i);//输出0}}class Derived extends Base {private int i = 22;public Derived(){i = 222;}public void display(){System.out.println(i);}}public class ConstructorTest {public static void main(String[] args) {new Derived();}}