目录
一. 面向对象
1.1 面向对象和面向过程
二. 类的定义和使用
2.1 什么是类
2.2 类的定义格式
三. 类的实例化
四. this引用
4.1 this引用的作用
五. 构造方法
5.1 构造方法重载
5.2 通过this调用其他构造方法
5.3 默认初始化
结语
一. 面向对象
1.1 面向对象和面向过程
面向过程注重解决问题的步骤和操作,面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
举例说明:将大象装进冰箱
(1) 面向过程
第一步:打开冰箱
第二步:将大象塞进冰箱
第三步:关上冰箱
那么以上三个步骤就是就是把大象塞进冰箱的过程,我们注重这一件事的过程,那么这种解决问题的方法我们就叫做面向过程。
(2) 面向对象
那么此时只有人、大象、冰箱三个对象,将大象装进冰箱的整个过程是:人、大象、冰箱三个对象之间交互完成的,我们不需要关心大象是如何被装进冰箱的,那么这种不关注过程,通过对象之间的交互完成的解决问题的方式我们叫做面向对象。
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
二. 类的定义和使用
什么是类呢?我们一起来简单认识一下
2.1 什么是类
类就是用来对一个对象进行描述的,主要描述该对象有哪些属性,哪些功能等
例如:学生
属性:年龄、姓名、性别......
行为:上学、吃饭、考试......
那么我们知道了类的作用,那么该如何定义类呢?
2.2 类的定义格式
在JAVA中定义类的时候需要用到class关键字,语法格式如下:
class ClassName { //ClassName表示类的名称
field; //表示成员变量(属性)
method; //表示行为或者成员方法
}
那么我们来创建一个上述提到的学生类:
public class Student {public String name;//学生姓名public int age ;//学生年龄public int score ;//学生成绩public void eat(){System.out.println("正在吃饭......");}public void exam(){System.out.println("正在考试......");}}
那么一个简单的学生类就创建好了,里面描述了学生的属性和行为。
定义类的注意事项:
1. 类型采用大驼峰定义
2.成员前写法统一为public ,后面会介绍其他的访问修饰限定符
三. 类的实例化
通过上述描述我们知道 类 只是用来对一个实体进行描述的,通过实例化才能够创造出对象,那么在JAVA中我们该如何实例化出一个对象呢?这时候就要用到new这个关键字来进行实例化
以上述的学生类示范:
public class Student {public String name;//学生姓名public int age ;//学生年龄public int score ;//学生成绩public void eat(){System.out.println(name+"正在吃饭......");}public void exam(){System.out.println(name+"正在考试......");}public static void main(String[] args) {Student student1=new Student();student1.name="张三";student1.age=10;student1.score=99;student1.eat();student1.exam();}
}
类实例化的注意事项:
1. new 关键字用于创建一个对象的实例 .2. 使用 . 来访问对象中的属性和方法 .3. 同一个类可以创建多个实例对象
四. this引用
接下来我们看看这个日期类的代码和运行结果,让我们带着问题来探索this的用法。
public class Day {public int year;public int month;public int day;public void setDay(int year, int month, int day){year = year;month = month;day = day;}public void printDay(){System.out.println(year + "/" + month + "/" + day);}public static void main(String[] args) {Day d1 = new Day();Day d2 = new Day();Day d3 = new Day();d1.setDay(2020,9,15);d2.setDay(2020,9,16);d3.setDay(2020,9,17);d1.printDay();d2.printDay();d3.printDay();}
}
通过运行结果可以看见,我们明明利用setDay方法d1、d2、d3都进行的赋值,那么打印出来的结果为什么还是0/0/0呢?
第一个问题:形参名与成员变量名相同时,形参究竟是给成员变量赋值呢还是形参自己对自己赋值呢?
第二个问题:此时我们的d1、d2、d3都在调用printDay方法,该方法是如何知道打印的是哪个对象的数据呢?
那么带着这两个问题,我们一起来探索一下this的用法。
4.1 this引用的作用
public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}
public void printDay(){System.out.println(this.year + "/" + this.month + "/" + this.day);}
printDay方法通过this引用就能够知道打印的是当前对象的数据。
总结:
1. 当形参名和成员变量名字相同时,通过this引用表示该变量是当前类的成员变量2. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
五. 构造方法
构造方法是一个特殊的成员方法,方法名必须与类名相同,构造方法可以直接给成员变量进行初始化
public class Day {public int year;public int month;public int day;public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}public static void main(String[] args) {Day d1=new Day(2024,10,10);d1.printDay();}
}
注意事项:
1. 名字必须与类名相同2. 没有返回值类型,设置为 void 也不行3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次4. 如果不写构造方法,编译器会主动添加一个不带参数的构造方法
public class Day {public int year;public int month;public int day;public Day(){......}public void printDay(){System.out.println(year + "/" + month + "/" +day);}
}
那么如果我们自己写了一个构造方法,那么编译器就不会自动生成构造方法,正所谓救急不救穷。
5.1 构造方法重载
我们可以定义多个不同参数的构造方法,这样就实现了构造方法的重载,方便用于多种情况
public class Day {public int year;public int month;public int day;public Day(){}public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}
}
5.2 通过this调用其他构造方法
public class Day {public int year;public int month;public int day;public Day(){this(2020,10,31);}public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}public static void main(String[] args) {Day d1=new Day();d1.printDay();}
}
注意事项:
1. this(...)必须是构造方法中第一条语句
2. 构造方法之间不能互相调用形成环
5.3 默认初始化
在使用局部变量之前是必须进行初始化的,否则会进行报错。但是使用成员变量时,可以不进行初始化,当我们实例化一个对象后,对象空间被申请好之后,对象中包含的成员其实已经设置好了初始值。
结语
以上就是部分类和对象的内容,希望大家看完本篇后能够理解类和对象的概念,在此小新感谢大家的观看!!!