今天在我们了解类之前,我们需要了解什么是对象和面向对象。
一.对象
对象其实是一个真实存在的实体,在Java中,一切事物皆是对象,所以Java是一个面向对象的语言。
二.面向对象
面向对象其实是将一个过程拆分成不同对象,让对象和对象之间相互协作,完成这件事情。
比如我们说一个例子
我们洗衣服的时候,我们需要接水->放入衣服->放洗衣液->搓衣服->过清水->拧干。
这是我们洗衣服的过程,但是在现在其实我们可以利用洗衣机来洗衣服,所以我们这时候可以将洗衣服的过程看做人,衣服,洗衣液,洗衣机,四个对象的协作,人将衣服和洗衣液放入洗衣机中,至于洗衣机是如何洗衣服的我们不需要关系,洗衣机会自己会完成,这就是一个面向对象的过程。
三.类定义和使用
1.什么是类
类是用来对一个对象来进行描述的,描述对象的属性和功能,比如猫的名字,颜色和吃饭的行为。
2.类的定义格式
class ClassName{field;//字段(属性)或成员变量;method;//行为或成员方法;}
我们以猫类为例:
class Cat{public String name;public String color;public void eat(){System.out.println(name+"正在吃饭");} }
注意事项:
- 类名注意采用大驼峰定义
- 此处写的方法不带 static 关键字
- 一般一个文件定义一个类
- public修饰的类要与文件同名
四.类的实例化
1.什么是类的实例化
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
比如我们实例化一个猫类
class Cat{public String name;public String color;public void eat(){System.out.println(name+"正在吃饭");}
}public class Test {public static void main(String[] args) {Cat cat = new Cat();cat.name = "小猫";cat.eat();}
}
我们对他进行调用,将名字赋为“小猫”,同时调用Cat类中的eat()方法
注意事项
- new 关键字用于创建一个对象的实例. 类名 对象名=new 类名()
- 使用 . 来访问对象中的属性和方法 对象名.属性或方法
- 同一个类可以创建多个实例.
五.类和对象的说明
- 类只是一个模型,用来对一个实体进行描述,限定了类有哪些成员
- 类是一种自定义的类型,可以用来定义变量.
- 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
六. this引用
1.什么是this引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。
2.为什么要有this引用
我们先来看下面图片中代码的过程
我们发现,我们将值传给了Cat类中的setCat方法中的n和c,并且成功为name和color赋值,并且正确打印,但是这时后如果我们将n和c变成name和color会发生什么呢?那么我们来看下面这张图片
我们发现我们最后所打印的值的名字为null,这是为什么呢,其实我已经在图中画出来了,这时因为,我们传入的值,并没有赋给我们的成员变量,而是赋给了自己,所以当我们进行调用并打印的时候,我们的成语变量其实,并没有值,这就导致了我们打印了null。那么我们该如何防止这种情况的发生呢,这就需要用到我们的this关键字了。让我们看下面这张图片
我们发现,我们并没有改变我们变量的名字,只是在要赋值的变量前加上了(this.),这时我们发现我们成功的打印了正确的值,这就是this关键字的作用它所引用的是调用成员方法的对象。简单来说就this调用的是成语变量
3.this引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
- this只能在"成员方法"中使用
- 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
- 可以通过this访问当前对象的非静态成员方法,不可以访问静态成员方法
七.对象的构造及初始化
1.构造方法
什么是构造方法
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。
为什么要使用构造方法
我们知道在java类内部定义一个局部变量,要进行初始化。
而成员变量变量或方法会有自己的默认值。那我每实例化一个对象,就要进行初始化,我们应该怎么进行初始化?
所以我们就要用到构造方法,构造方法的作用就是初始化对象当中的成员
构造方法定义的格式
修饰符 方法名称(参数类型形参){
方法体代码;
}
例如
public Cat (String name , String color){
this.name = name;
this.color = color;
}
注意:
- 构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。
特性
1. 名字必须与类名相同
2. 没有返回值类型,设置为void也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法
5.如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
6.可以通过this()调用其他构造方法,但不要形成环,两个构造方法相互调用;
我们发现,我们对this进行传值,成功的给了带参的构造方法,并且我们其实还有一个小的知识点就是,一旦我们加载了对象,就会执行构造方法,所以我们发现我们先打印了”Cat的带参构造方法”,然后再打印方法。
注意:我们不能形成闭环
7.this调用当前对象的其他构造方法的时候一定要放在第一排。
如果我们不放在第一排就会报错
放在第一排就没有任何问题
2.默认初始化
我们知道在Java中变量必须进行初始化,才能使用,同样的我们对象也需要进行初始化,例如我们上面例子中的setCat这个方法就进行了初始化
但是我们发现如果我们没有进行初始化,我们也可以正常运行 ,这是为什么呢,这其实是因为在声明成员变量中,没有赋值的时候,编译器会默认给成员变量一个值。
我们发现我们所打印的值是null,而这个null就是编译器默认给的一个值,当然不同的类型有不同的值
- byte -- 0
- short -- 0
- int -- 0
- long -- 0L
- char -- '\u0000'
- flost -- 0.0f
- double -- 0.0
- String -- null
- boolean -- false
- reference(引用类型) -- null
3.就地初始化
在成员变量声明或成员方法中,直接初始化 。
好了今天的分享就到这里了,我们下一篇见!