类与对象
一、全局变量与局部变量
1、变量的分类
2、成员变量(全局变量)
直接在类中声明的变量叫成员变量(又称全局变量)
如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null。
成员变量定义后,其作用域是其所在的整个类。
成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部。
3、局部变量
方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。局部变量的作用域范围从定义的位置开始到其所在语句块结束。
如果局部变量的名字与全局变量的名字相同,则全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。
如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。
局部变量在使用以前必须显式初始化或赋值,局部变量没有默认值。
声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值;
二、static关键字
对于static关键字,最主要的是把握以下几点:
总的要把握:用static修饰的成员变量、代码块、方法在类加载的时候执行,没有用static修饰的成员变量、代码块、方法在创建对象的时候执行。而类加载发生在前,此时还没有创建对象,所以静态无法直接调用非静态。例如:
(1)、静态方法不能直接调用非静态方法,可以间接通过创建该方法(指非静态方法)所在类的对象来调用;非静态方法可以直接调用静态方法;
(2)、静态代码块不能直接调用非静态方法;可以间接通过创建该方法(指非静态方法)所在类的对象来调用;静态代码块可以直接调用静态方法;
(3)、静态方法或者静态代码块不能直接使用非静态成员变量,可以间接通过创建该成员变量的对象来调用;静态方法或者静态代码块只能直接使用静态变量;
三、构造方法
为什需要构造方法?
看如下代码:
public class Teacher {
int age; // 年龄
String name; // 姓名
String position; // 职位
String education; // 学历
public String introduction() {
return "大家好!我是" + name + ",我今年" + age + "岁,学历" + education + ",目前职位是" + position;
}
}
如果要在这个类中创建若干的对象,那么我们需要写N多行代码,为了提高效率,我们引用了构造方法这一名词。
什么是构造方法?
构造方法的实质就是用来创建对象的方法,每一个类中都会有默认的构造方法(一个空的构造方法)。构造方法有以下特点:
(1)、构造方法负责初始化类中的实例变量。
(2)、构造方法是一种特殊的方法,这种方法必须满足以下语法规则:构造方法必须与类名相同;不包含返回值类型描述部分。
(3)、构造方法不能有static和final关键字修饰。
如何使用构造方法?
使用new关键字调用构造方法,即构造方法在创建对象(也称对象实例化)时被调用。
public class TeacherTest {
public static void main(String[ ] args) {Teacher teacher = new Teacher(); //创建Teacher对象
}
}
创建类时,如果没有显式定义构造方法,则该类会存在一个默认的无参构造方法;
可以在类中声明一个或多个有参构造方法,但每个构造方法在参数个数或参数数据类型上要有所差别
类中构造方法的相互调用
四、this关键字
this代表对当前对象的一个引用,this实质是一个带词,代指的就是它所属的对象。
this关键字用于调用属性、方法及本类中构造方法。下面是几个例子:
对象初始化过程
用new创建并初始化对象步骤:
给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
成员变量声明时的初始化;
初始化块初始化(又称为构造代码块或非静态代码块);
构造方法初始化