文章目录
- 前言
- 一、类和对象的关系
- 二、如何创建和初始化对象
- 1.使用new关键字创建对象
- 2.对象初始化
- 三、构造器
前言
本文主要讲解类和对象的关系,以及如何创建和初始化对象,对构造器的详解
一、类和对象的关系
类是一种抽象的数据类型,它是对某一类事物的整体描述,但是不能代表某一个具体的事物。
例如:动物、植物、桌子、电脑、手机,Person类、Car类等等,这些类都是用来描述一类具体的事物因该具有的特点和行为,是抽象的概念。
对象是抽象概念的具体实例
例如:李华就是人的一个具体实例,李华养的一只大黄,就是狗的一个具体实例。
在这里,人是一个“类”,李华就是一个“对象”,同样,大黄也是一个对象,都不是抽象的,而是实实在在存在的。
二、如何创建和初始化对象
1.使用new关键字创建对象
1.首先创建一个类,我这里创建的是一个学生类,里面有学生的姓名、年龄。
public class Student {
String name; //姓名
int age; //年龄
2.类是抽象的,需要实例化,也就是创建一个对象,实例化后会返回一个对象,代码如下
Student lihua = new Student();
Student lihong = new Student();
我们就像这样new 一个对象,这里的lihua,lihong就是Student类的具体实例。
2.对象初始化
接着需要对对象进行初始化,如果不初始化,输出的数据将会是默认值,代码如下
lihua.name="李华";
lihua.age=19;
lihong.name="李红";
lihong.age=18;
看一下输出结果
System.out.println(lihua.name);
System.out.println(lihua.age);
System.out.println(lihong.name);
System.out.println(lihong.age);
李华
19
李红
18
完成初始化。
如果不初始化,我们来看一下运行结果
null
0
null
0
三、构造器
上面使用new关键字创建对象的时候,除了会分配内存空间和对创建好的对象进行默认的初始化之外,还会对类中的构造器进行调用。
- 类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的,构造器有以下两个特点
- 和类的名字相同
- 没有返回类型,也不能写void
Student类中什么也不定义,在主方法里面对Student类创建一个对象student
public class Student {
}
public static void main(String[] args) {
Student student = new Student();
}
发现即使类中内容是空的,在主方法中仍然可以调用出来Student类,为啥呢?
接下来我们在out 目录中找到Student.class文件,打开看一下
public class Student {
public Student() {
}
}
发现和源文件中的代码相比较,多出来一个public Student方法,这个方法 ,首先,它的名字和上面的类名相同,其次,它没有返回值。其实,这就是一个构造器。
对于无参构造和有参构造,代码如下
- 无参构造
public class Student {
String name;
public Student(){
this.name="李华";
}
}
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.name);
}
输出结果
李华
- 有参构造
如果使用了有参构造,就可以让无参构造中的内容空着,它什么也不用做
//无参构造
public Student(){
// this.name="李华";
}
//有参构造
public Student(String name){
this.name = name;
}
public static void main(String[] args) {
// Student student = new Student();
Student student = new Student("李华");
System.out.println(student.name);
}
使用new关键字调用方法,由于方法可以重载,调用时会自动匹配到有参构造的方法,即调用上面的public Student(String name)
结果
李华
由此,我们可以得出一些结论:
- 一个类中即使什么也不写,它也会存在一个方法。
- 使用new关键字,本质就是在调用构造器。
- 构造器可以用来初始化值。
- 注意:如果定义了有参构造,还想用无参构造new对象,就必须显示无参构造的定义。