一.首先我们应该知道类体是由哪几部分构成:
1. 类是由定义的变量和定义的方法(一个类可以有多个方法)构成;
java语言支持的变量有两种,一种是成员变量(成员变量也就是我们所说的全局变量),一种是局部变量;
成员变量:在类里面定义的变量,在整个类里都有效,都可以被访问;
局部变量:在类的方法、构造方法或者语句块里面定义的变量,只在所属的区域内有效;
2.局部变量和成员变量的区别是什么?
成员变量:1.它定义在类里面,在整个类中都可以被访问;
2.它随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中;
3.它有默认的初始化值;
局部变量:1.它只能定义在局部范围内,只在所属的区域内有效;
2.它在方法、构造方法或者语句被执行的时候创建,在它们执行结束后,局部变量将要被销毁;
3.它不能被访问修饰符来修饰;
4.它存在于栈内存中;
5.它没有默认的初始化值;
注意:如果定义的局部变量的名称和成员变量的名称相同,要想在定义局部变量的方法中使用成员变量,则必须使用this关键字;代码如下:
package test;
public class Test
{
//源文件中只能有一个类是public类,并且源文件的名字必须与这个类的名字完全相同,如
//果没有public类,那么源文件的名字只要和某个类的名字相同就可以了。
public static void main(String[] args)
{
People myPeople = new People();
myPeople.speak();
}
}
class People {
String name = "类体重定义的name"; //类中的成员变量并赋值
public void speak() {
String name = "类体方法中定义的name"; //在方法speak中定义和成员变量名字相同的局部变量并赋值
System.out.println(name);
System.out.println(this.name); //通过this来访问类中的成员变量
}
}
运行结果:
类体方法中定义的name
类体重定义的name
1.成员变量又可以分成两类,一类是实例变量,一类是类变量(也就是我们常说的静态变量);实例变量是独立于方法之外的,没有static去修饰,类变量是也独立于方法之外的,但是要用static去修饰;
代码实例:
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例所共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。而实例变量取决于类的的实例对象,每创建一个实例对象,java虚拟机就为实例变量分配一个内存,实例变量位于堆区中,其生命周期取决于实例对象的生命周期;
实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;而静态变量的默认值和实例变量大的默认值相似,数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
2.静态变量和实例变量的区别是什么??
在语法定义上的区别:静态变量前面要加static,而实例变量前面不需要加static;
程序运行上的区别:实例变量属于某个对象是的属性,必须创建了实例对象,其中的实例变量才会被分配内存空间,这样才能使用这个实例变量;静态变量不属于对象的属性,而是属于类的属性,所以也称作类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就被分配了内存空间,静态变量就能被使用了。