📚 目录
前言:
Java是一门纯面向对象的语言在面向对象的世界里,⼀切皆为对象。面向对象是解决问题的⼀种思想,主要依靠对象之间的交互完成⼀件事情。
学习Java这么久还是对类和对象的理解都不是特别深刻的,今天带你走进这个抽象的概念,加强对类和对象这个概念的理解和印象。
1. 什么是类和对象?

我们传统过程中洗衣服的时候,注重的是洗衣服的过程,而我们现代洗衣机我们只需要将衣服洗衣液倒入洗衣机过段时间我们就能够得到我们的洗干净的衣服。'

而我们的Java就像我们的洗衣机,只注重得到洗干净的衣服,不必关心洗衣服的过程,通过对象的交互来进行完成操作。
注意:面向对象和面向过程不是一门语言,是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
就拿我们C语言来举例,C语言比较注重细节的过程,而我们的Java不需要只要知道怎么用就行了。
[🔙 返回目录](#🔙 返回目录)
1.1简单认识类
类是一个抽象的概念。
类:对一个实体(对象)来进行描述的。,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来做什么),描述完成后计算机就可以识别了。
例如:
品牌的洗衣机就相当于类的名字。
属性:型号、尺寸、颜色等。
功能:烘干、定时。
[🔙 返回目录](#🔙 返回目录)
1.2简单认识对象
对象:简单来说就是我们看到的事物,就相当于我们想要制作一个月饼,我们就能够将类看作一个模具,我们只需要将面团往上面一扣,我们就能够得到一个月饼的形状。
也就相当于我们洗衣机(模具)洗完的衣服,得到的就是我们的对象。
[🔙 返回目录](#🔙 返回目录)
2. 类的定义和使用
[🔙 返回目录](#🔙 返回目录)
2.1类的定义
类的定义格式:我们定义类的时候需要使用Class关键字(采用大驼峰)。
java
class ClassName{
field; //字段或者是成员变量
method; //成员方法
}
例如:
java
class Dog {
public int age;
public String name;
public String color;
public void walk () {
//动作
}
public void habit() {
//习惯
}
// ......
}
采用Java语言将狗的类在计算机中定义完成,经过javac编译后生成 .class文件,在JVM的基础上就能够采用计算机识别了。
[🔙 返回目录](#🔙 返回目录)
2.2类的实例化
实例化:定义了一个类,相当于在计算机中定义了一种新的类型(就相当于用模具变成对象)
例如:我们想要在计算机中创建一个女朋友。
java
public class MyGrilFrind {
public String name;
public int age;
public int big;
public double kg;
//...
public void arr(int day) {
//....
}
public void arr1() {
//...
}
//....
}
用我们定义的对象进行变现:
java
MyGrilFrind mygirlfrienf = new MyGrilFrind();//没有女朋友就在计算机中new一个。
访问当中的成员用点号来操作 ( . )
例如:
java
public class Test {
public static void main(String[] args) {
MyGrilFrind mygirlfrienf = new MyGrilFrind();
mygirlfrienf.name = "翠花";
System.out.println(mygirlfrienf.name);
}
}

注意:
new关键字用于创建对象的实例化(分配内存)
点号可以访问和操作成员变量。
同时可以创建多个实列。
[🔙 返回目录](#🔙 返回目录)
3. 对象的构造和初始化
3.1this关键字
为什么要用this这个关键字?
示例:
java
public class Date {
int year;
int month;
int day;
//打印年份
public void swap(int year,int month,int day) {
year = year;
month = month;
day = day;
}
}
实例化:
java
public class Test {
public static void main(String[] args) {
Date date = new Date();
date.swap(2006, 3, 15);
System.out.println(date.year + "/" + date.month + "/" + date.day);
}
}

为什么全都是默认初始值呢?为什么没有交换?
原因:局部变量优先,就相当于自己给自己赋值,而不是给Data这个类中的year,month,day赋值。
加上this效果:
java
public class Date {
int year;
int month;
int day;
//打印年份
public void swap(int year,int month,int day) {
this.year = year;
this.month = month;
this.day = day;
}
}

this这个关键字就告诉我们这个year是我们用类创建的对象中的year,而不是局部变量的。
this特性:
对应类类型引用,即哪个对象调⽤就是哪个对象的引用类型。
在"成员方法"中,this只能引用当前对象,不能再引用其他对象。
this是"成员方法"第⼀个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
[🔙 返回目录](#🔙 返回目录)
3.2初始化
初始化又分默认初始化和就地初始化和构造初始化。
我们创建完类的时候没有进行初始化,编译器会自动帮我们进行初始化。
各个类型初始化值:

就地初始化:
java
public class MyGrilFrind {
public String name = "小美";
public int age = 18;
public double kg = 48;
public void arr(int day) {
//....
}
public void arr1() {
//...
}
//....
}
在进行写类的时候就初始化完了。
构造初始化:
什么是构造初始化?
** 构造方法:构造方法是一种特殊成员方法(构造器)
注意事项:
名字必须与类名字相同。
没有返回值。
创建对象时候自动调用并且只调用一次。**
java
public class Test {
public static void main(String[] args) {
Apple apple = new Apple();
}
}
java
public class Apple {
String name;
public Apple() {
System.out.println("构造方法被调用");
}
}

构造方法支持重载。
java
public class Apple {
String name = "apple";
public Apple() {
System.out.println("构造方法被调用");
}
public Apple(String name) {
System.out.println(this.name);
}
}
当我们写了构造方法的时候并有参数的情况下:
java
public class Apple {
String name;
public Apple(String name) {
this.name = name;
}
}

这时候就会出现报错,为什么???
java
public class Apple {
String name;//编译器会默认生成一份没有参数的构造类型。
}
为什么这种情况下不会报错?
** 原因:用户没有定义构造方法的时候编译器会默认给你生成一份构造方法(隐形我们看不见)默认生成的构造方法是没有参数的。**
** 快速构建构造方法的快捷键:鼠标右键(或者:Ctrl+insert)+Generate+Constructor**

java
public class Dog {
String name;
int age;
String color;
public Dog() {
}
public Dog(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
public Dog(int age) {
this.age = age;
}
public Dog(String name) {
this.name = name;
}
}
java
public class Test {
public static void main(String[] args) {
Dog dog = new Dog("旺财",8,"yellow");
}
}
当我们想要使用各种初始化的时候可以自己写也可以用快捷键来进行编写。
[🔙 返回目录](#🔙 返回目录)