先来看看类与对象的概念:
对象:对象是类的一个实例化,有状态和行为。例如,现实中的一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。软件对象也有状态和行为,软件对象的状态就是属性,行为通过成员方法体现。
类:类是一个模板,它描述一类对象的行为和状态。
一个类可以包含以下类型变量:
1、 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁(所占的内存自动释放)。
2、 成员变量:又叫实例变量,是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
3、 类变量: 又叫静态变量,属于该类中所有实例的共有属性。类变量也声明在类中,方法体之外,但必须声明为static类型。一个类可以拥有多个方法。
静态成员方法不能访问非静态的数据成员变量,静态成员变量的值可以修改。
使用类必须先产生对象,对象只有在实例化之后才能使用:
声明并实例化对象:类名称 对象名称 = new 类名称();
调用类中的属性: 对象. 内容 ;
调用类中的方法: 对象.方法() ;
调用类中的静态方法:类名.方法();
下面主要来看看对象的初始化方式
1.通过setter,getter方法初始化
例如:
class Person{
// 成员变量(实例变量)
private String name;
private int age;
private String sex;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
public void info() {
System.out.println("name = " + name + ", age = " + age + ", sex = " + sex);
}
}
public class Demo {
public static void main(String[] args) {
Person per = new Person();
per.setName("Alan");
per.setAge(18);
per.setSex("man");
per.info();
}
}
结果是:name = Alan, age = 18, sex = man
2.通过构造方法初始化
看以下例子:
class Person{
private String name;
private int age;
private String sex;
public void info() {
System.out.println("name = " + name + ", age = " + age + ", sex = " + sex);
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Demo {
public static void main(String[] args) {
Person per = new Person("Alan", 18, "man");
per.info();
}
}
结果是:name = Alan, age = 18, sex = man
3.静态代码块初始化
静态代码块用来初始化类中的静态成员变量,该静态代码块在类的加载过程中的初始化阶段执行,并且只执行一次。
class Person{
// 类变量(静态变量)
public static int data;
static{
data = 10;
}
}
public class Demo {
public static void main(String[] args) {
Person per = new Person();
System.out.println("data = " + Person.data);
}
}
结果是:data = 10
4.实例代码块初始化
看以下例子:
class Person{
private String name;
private int age;
private String sex;
public static int data;
{
name = "Alan";
age = 18;
sex = "man";
data = 1000;
}
public void info() {
System.out.println("name = " + name + ", age = " + age + ", sex = " + sex);
}
}
public class Demo {
public static void main(String[] args) {
Person per = new Person();
per.info();
System.out.println("data = " + Person.data);
}
}
结果是:
name = Alan, age = 18, sex = man
data = 1000
几种初始化的优先级:静态代码块最先执行,其次是实例化代码块,然后是getter、setter方法,最后是构造方法。
关于继承关系中的类对象初始化顺序参见我的另一篇文章继承中的第7节。