目录
[1.1. 什么是面向对象](#1.1. 什么是面向对象)
[1.2. 面向对象与面向过程](#1.2. 面向对象与面向过程)
[2.1. 类的定义格式](#2.1. 类的定义格式)
[2.2. 类的定义练习](#2.2. 类的定义练习)
[3.1. 什么是实例化](#3.1. 什么是实例化)
[3.2. 类和对象的说明](#3.2. 类和对象的说明)
[4.1. 什么是this引用](#4.1. 什么是this引用)
[4.2. this引用的特性](#4.2. this引用的特性)
一、拜访对象村
在之前的代码中,我们都是main()方法中执行,但这都是面向过程的。从这一起开始,博主将待大家离开过程化的编程世界,建立起自己的对象。注意:一旦进入对象村,你就再也不想回头。
1.1. 什么是面向对象
在对象村里面,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
1.2. 面向对象与面向过程
我们拿洗衣服来举例,洗衣粉、洗衣机、人就是对象;过程如下:
二、类定义和使用
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。到底类和对象有什么不同呢?其实,类不是对象,却是用来创建它们的模型。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量。我们可以使用狗类创建出年龄、性别、姓名。
2.1. 类的定义格式
语法规则:类名一般采用大驼峰,字段或成员属性定义在方法外部、类的内部。成员方法和成员变量可以细分为两种,静态与非静态的。public可有可无。
java
public class 类名{
字段/成员属性;
成员方法;
我们拿洗衣机举例,
java
public class WashMachine{
public String brand; // 品牌
public String type; // 型号
public double weight; // 重量
public double length; // 长
public double width; // 宽
public double height; // 高
public String color; // 颜色
2.2. 类的定义练习
(1)定义一个购物车类
java
public class ShoppingCart {
public String cartContents;//定义购物车内容
public void addToCart(){
System.out.println(cartContents+"把购买的物品添加进购物车");
}
}
(2)定义一个按钮类
java
public class Button {
public String label;//定义标签
public String color;//定义颜色
public void SetColor(){
System.out.println("The button is" + color);
}
public void setLabel(){
System.out.println("The button is"+label);
}
}
三、类的实例化
3.1. 什么是实例化
定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自 带的内置类型,而类是用户自定义了一个新的类型,比如上述的:ShoppingCart类和Button类。用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。下面我们来进行一个电影类的实例化:
java
public class Movie {
String title;//定义标题
String genre;//定义题材
int rating;//定义评级
public void playIt(){
System.out.println(title+""+genre+""+rating);
}
}
java
public class MovieTestDrive {
public static void main(String[] args) {
Movie one =new Movie();
one.title="Gone with the Stock";
one.genre="Tragic";
one.rating=-2;
one.playIt();
Movie two =new Movie();
two.title ="Lost in Cubicle Space";
two.genre ="Comedy";
two.rating =5;
two.playIt();
}
}
那么类的实例化在栈和堆上是如何开辟内存空间的:
one先在栈上开辟一块内存空间,栈上的地址指向堆里面,此时我们创立的属性title、genre、rating、就会在堆上进行赋值。
对于类的成员变量来说,每一个成员变量都有一个默认值,引用类型为null,基本类型为对应的默认类型。
3.2. 类和对象的说明
到底类和对象两者之间有什么不同呢?首先,类不是对象,是用来创建它们的模型。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量 。
对象可以执行的动作叫方法。在设计类时,我也会同时设计出操作对象数据的方法。举例来说,闹钟对象会有个变量来保存时间,且会有GetTime和SetTIme来保存该时间。
java
public class Alarm {
public int AlarmTime;//定义时间
public String AlarmMode;
public void GetTime(){
System.out.println("get the time");
}
public void SetTime(){
System.out.println(" set the time");
}
}
四、this引用
4.1. 什么是this引用
先看一个日期类的例子:
java
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 date = new Date();
date.SetDate(2005,3,13);
date.PrintDate();
System.out.println("=========");
Date date1 =new Date();
date1.SetDate(2024,10,25);
date1.PrintDate();
}
}
此时博主要给出两个问题去思考一下:
1、每个方法只有一个,那么该方法怎么知道给哪个成员变量赋值?
2、当修改SetDate之后,赋值失败
我们先看第二个问题,当我们修改了之后,就会出了两个形参,相当于形参自己给自己赋值。可我们有时候无法避免命名相同,此时就可以通过this来解决。
java
public void SetDate(int year,int month,int day){
year=year;
month=month;
day=day;
}
java
public void SetDate(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
那么第一个问题呢?this表示当前对象的引用,在方法的内部还存在着一个隐藏的this,编译器自动接收,谁调用SetDate谁就会把引用传给this,它携带的信息就会包含我要修改的成员变量。
4.2. this引用的特性
-
this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
-
this只能在"成员方法"中使用
-
在"成员方法"中,this只能引用当前对象,不能再引用其他对象