类与对象的关系
类与对象的关系
类是一种抽象的数据类型,它对某一类事物整体描述/定义,但是并不能代表某一个具体的事物
- 动物、植物、手机、电脑
- Person类、Pet类、Car这些类都是用来描述、定义了某一类具体的事物应该具备的特点和行为
对象是抽象概念的具体实例
- 张三就是人的具体实例,张三家里的一个旺财就是狗的一个实例
- 能够体现出特点,展现出功能的是具体实例,而不是一个抽象的概念
创建于初始化对象
类于对象的创建
使用new关键字创建对象
-
使用new关键字创建的时候,除了分配内存空间以外,
还会给 创建好的对象 进行默认初始化 以及对类中构造器的调用
//学生类
public class Student {
//属性:字段
String name; //姓名
int age; //年龄
//方法
public void study() {
System.out.println("学生 在学习");
//可是学生不止一个,是会有变化的。所以我们用下面这种方法:
System.out.println(this.name + "在学习");//this 代表当前这个类
}
}
//一个项目应该只存一个main方法
public class Application {
public static void main(String[] args) {
//类: 抽象的, 实例化
Student student = new Student();
/*实例化后会返回一个自己的对象
student对象就是一个Student类的具体实例!*/
//不理解? 再看
Student xiaoming = new Student();
Student xiaohong = new Student();
//这是两个不一样的对象(小明,小红),但都具有name、age这两个属性以及study方法,因为都是Student类(同一个类可以产生不同的对象)
System.out.println(xiaoming.name);
System.out.println(xiaoming.age);
//输出结果为:
null
0
//因为name没有赋值,String的默认初始化就是null,int的默认初始化就是0
}
}
//重新看一下
public class Application {
public static void main(String[] args) {
//创建两个学生对象
Student xiaoming = new Student();
Student xiaohong = new Student();
//给小明这个学生赋值
xiaoming.name = "小明";
xiaoming.age = 8;
//输出小明的信息
System.out.println(xiaoming.name);
System.out.println(xiaoming.age);
//给小红这个学生赋值
xiaohong.name="小红";
xiaohong.age=10;
//输出小红的信息
System.out.println(xiaohong.name);
System.out.println(xiaohong.age);
//输出结果为
小明
8
小红
10
}
}
//以上代码都需要跟这写一遍,实践出真知
构造器详解
//打开输出目录(看下方截图)
public class Person {
}
打开输出目录
在Modules中加上根目录
现在可以看见out目录,这就是输出目录,会生成Class
查看对比:可见右边Class文件默认的加了一个方法,而且这个方法没有返回值,方法名和类名相同,其实这就是一个构造器
由此可得出一个结论:
”一个类即使什么也不写,它也会存在一个方法,这个方法就是构造方法“
-
类中构造器也成为构造方法,是在进行创建对象的时候必须要调用。
并且构造器有以下两特点:
- 必须和类的名字相同
- 必须没有返回值,也不能写void
public class Person {
//显示一个构造器
public Person(){
}
}
-
这就是一个构造器,无参构造
-
无参构造能干什么?
- 可以给我们初始化一些信息
public class Application { public static void main(String[] args) { //使用 new 关键词 实例化一个对象 Person person = new Person(); System.out.println(person.name);//不负任何值的情况下,默认值是null(这时候构造器就可以派上用场) } }
public class Person { String name; //构造器的第一个作用就是实例化一些对象 //实例化初始值 //无参构造器 public Person() { this.name = "玫玫"; } } //输出结果为 玫玫
//有参构造器:一旦定义了有参构造,无参就必须显示定义(否则就无效了) public Person(String name) { this.name = "玫玫"; }
构造器核心的作用就两个
- 1、使用 new 关键字的时候,本质是在调用构造器
- 2、构造器一般用来初始化值
构造器必须要掌握