目录
Java是面向对象的语言,对象就是面向对象程序设计(OOP)的核心。
本篇主要带领大家理解类和对象,还有对象三大特征之一的封装性
1. 理解面向对象和面向过程
既然java是面向对象的语言,那么什么是对象,如何理解对象,我的理解是这样的
对象就是真实世界,实际存在的实体,对象和实体是相互对应的,也就是说每一个实体都是一个对象,这是一个具体的概念。
并且还有这些特点;
对象具有属性和行为,能够有变化的状态,应该具有唯一性,真实世界中所有的实物都可以看做对象。
明白了什么是对象后,那么面向对象和面向过程又是怎么样的呢,下面看一下这个例子
面向对象和面向过程都是解决问题的一种方法,没有好坏优劣之分,都有其对应场景
面向对象是基于面向过程的,面向对象能让复杂的问题简单化,我们不需要了解具体的实现过程,只需要指挥对象实现功能
2. 类的定义与使用
java语言是面向对象的一门语言,而对象又是现实世界的实体,那么如何把这个对象告诉计算机,让计算机识别出来呢,这里就要引出类这个概念了
因为计算机识别不出对象,那么就要给对象进行抽象,所以类是是具有共同属性和服务的对象的抽象(或集合)。
类的内部包含两个主要部分,属性和行为
下面看一下类的定义格式
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
class为定义类的关键字,
ClassName为类的名字,
{}花括号里为类的主体内容,构成主体内容的成员为
属性:是用来描述类的,称为成员属性或成员变量(属性是在类的内部,方法的外部)
方法:是用来说明类具有哪些功能,称为成员方法
下面看一下这个例子
class Car{
//1.字段/属性 成员变量
public String brand;//品牌
public String type;//型号
public double lenght;//长
public double weight;//宽
public double height;//高
public String color;//颜色
//2.行为/方法 成员方法
public void DrivingFunction(){//开车
System.out.println("行驶功能");
}
public void BrakeFunction(){//刹车
System.out.println("刹车功能");
}
public void AccelerationFunction(){//加速
System.out.println("加速功能");
}
}
我们在写类时要注意,
类名采用大驼峰定义,
成员变量前统一写public,
一般情况下一个文件中只定义一个类,
public修饰的类必须要和文件名相同
下面再看一个狗类的例子吧
class Dog{
public String name;
public int age;
public String color;
public void wag(){
System.out.println("摇尾巴!");
}
public void bark(){
System.out.println("旺旺!");
}
}
3. 如何将类进行实例化
先明白什么叫类的实例化
定义一个类,就相当于在计算机中定义了一个新的类型。
就和int ,double 相似,int,double也是java语言自带的内置类型。
用类的类型创建对象的过程,称为类的实例化。
这个实例化对象的关键字是new
如何使用类的成员方法呢 如何初始化赋值呢
我们还可以实例化好多对象
理解了,面向对象,类和类的实例化,我们看一下它们的关系
4. this引用
要找到什么叫this引用,先看一个日期的例子
public class Date {
public int year;
public int month;
public int day;
public void setDate(int y,int m,int d){
year = y;
month = m;
day = d;
}
public void printDate(){
System.out.println(year+" "+month+" "+day);
}
public static void main(String[] args) {
Date data1 = new Date();
data1.setDate(2021,5,21);
data1.printDate();
Date data2 = new Date();
data2.setDate(2022,5,21);
data2.printDate();
Date data3 = new Date();
data3.setDate(2023,5,21);
data3.printDate();
}
}
我们通过main方法创建3个对象,然后通过Date类中的成员方法对对象进行初始化赋值和打印。
下面我们考虑两个问题
1,形参名和成员名如果相同会发生什么
那么这个问题怎么解决?
这就要用到this引用了
2.三个对象都在调用setDate和printDate函数,这两个函数是如何知道打印的是哪个对象的数据呢?
方法只有一个,三个对象都在调用这两个函数,那么这个两个函数是怎么知道谁在调用它的,它是怎么区别对象的
很简单,就是点号前面的这个,点号前面是谁就是谁在调用
所以this引用代表是什么意思
不用this,有些情况下可能不会报错,
但用this,一定不会报错,所以以后在成员方法中就使用this吧
在成员方法中,this只能引用当前对象,不能再引用其他对象
5. 对象的构造及初始化
5.1初始化对象
这个就叫初始化对象,很简单,需要调用之前写的SetDate方法才可以将具体的日期设置到对象中
现在我们考虑两个问题
1.局部变量必须要初始化化才能使用,为什么字段声明后没有值还可以使用
前面已经说过了,这是因为有一个默认值
2.每次对象创建好后调用SetDate方法设置具体日期,很麻烦,有什么比较简单的方法
有,请看下文
5.2 构造方法
构造方法:方法的方法名和类名是一样的,这个方法很特殊,没有返回值,并且在整个对象的生命周期内只调用一次
1.我们使用IDEA,以后写构造方法,不用一个一个写,可以这样做
2.在构造方法中,可以通过this调用其他构造方法,带使代码更简单
this使用:
1.this.属性 —》访问当前对象的属性
2.this()—–》调用当前对象的构造方法
(1)必须放到构造方法中去
(2)必须放在当前的构造方法第一行
(3)调用不能形成环的调用
3.this.func(); 调用当前对象的成员方法
5.3 默认初始化
前面已经说过了,成员变量没有初始化,就会给一个默认值
下面来看一下对应类型的默认值
数据类型 | 默认值 |
---|---|
byte | 0 |
char |
‘\u0000’ |
short | 0 |
int | 0 |
long | 0L |
boolean | false |
float | 0.0f |
double | 0.0 |
reference | null |
5.4 就地初始化
就地初始化理解起来很简单,在声明成员变量时,就直接给出了初始值。
public class Date {
public int year = 2022;
public int month = 5;
public int day = 8;
public Date(){
}
public void printDate(){
System.out.println(year+" "+month+" "+day);
}
public static void main(String[] args) {
Date date1 = new Date();
date1.printDate();
}
}
5.5 总结一下,对于成员的赋值
1.定义字段的时候,同时初始化,这种叫就地初始化
2.不初始化,那就是默认初始化,0
3.在类外,通过对象的引用 直接赋值
比如
4.通过构造方法直接初始化
5.通过提供get和set(下一篇,java三大核心中会讲到)
6.看完本篇这些知识点你明白了几点
1.如何创建类:通过class
2,字段,成员变量| 方法 成员方法
3.如何创建对象:通过new关键字进行实例化对象 Dog dog = new Dog();
4.通过对象的引用dog.属性 dog.方法
5.实例化对象其实调用的是构造方法。 多个构造方法-》重载
6.this三种使用
7.成员赋值的几种方法 就地初始化 默认初始化 引用直接赋值 构造方法初始化 get和set
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91271.html