取值会变化的数据
1 变量的作用域
- 成员变量:在类中声明,它的作用域是整个类
- 局部变量:在一个方法的内部声明,它的作用域是整个方法
- 方法参数:方法的参数,它的作用域是整个方法
public class VarTester{
int var1 = 0; //定义var1成员变量
void method1(int var2){ //var2为方法参数
int var3 = 0; //定义var3局部变量
var1++;
var2++;
var3++;
}
void method2(){
var1++;
var2++; //编译出错
var3++; //编译出错
}
}
类的成员变量有两种:
- 类变量(静态变量)static修饰:类的静态变量在内存中只有一个,被类的所有实例共享。静态变量可以直接通过类名被访问
- 实例变量:类的每个实例都有相应的实例变量。每创建一个类的实例,Java虚拟机就会为实例变量分配一次内存
可以通过静态变量统计实例的个数
在一个方法内,可以定义和成员变量同名的局部变量或参数,此时成员变量被屏蔽。此时如果要访问实例变量,可以通过this关键字来访问,this为当前实例的引用。如果要访问类变量,可以通过类名来访问。
public Monkey(String name){ //参数name
this.name = name; //把参数name赋值给Monkey类的成员变量name
}
2 对象的默认引用:this
this是对象默认引用自身的指针
只能在构造方法或实例方法内使用this关键字,而在静态方法内不能使用this关键字
3 参数传递
?方法内部参数可以是类的成员变量,然后在main里在方法间互相传递??
4 变量初始化
- 成员变量的初始化
引用类型的变量默认值为null,剩下的看数据类型的表 - 局部变量:局部变量声明后,不会自动初始化为默认值,必须先显示初始化
public void method(){
String s1;
String s2 = null;
System.out.println(s1); //编译出错:变量s1必须先初始化
System.out.println(s2); //合法,运行的时候打印null
}
- 用new关键字创建对象
1.为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值
2.如果实例变量在声明时被显式地初始化,那就把初始化值赋给实例变量
3.调用构造方法
4.返回对象引用