零基础Java第十期:类和对象(一)

目录

一、拜访对象村

[1.1. 什么是面向对象](#1.1. 什么是面向对象)

[1.2. 面向对象与面向过程](#1.2. 面向对象与面向过程)

二、类定义和使用

[2.1. 类的定义格式](#2.1. 类的定义格式)

[2.2. 类的定义练习](#2.2. 类的定义练习)

三、类的实例化

[3.1. 什么是实例化](#3.1. 什么是实例化)

[3.2. 类和对象的说明](#3.2. 类和对象的说明)

四、this引用

[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引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

  2. this只能在"成员方法"中使用

  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

相关推荐
希忘auto2 小时前
详解Redis的常用命令
redis·1024程序员节
yaosheng_VALVE17 小时前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
dami_king18 小时前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节
一个通信老学姐5 天前
专业125+总分400+南京理工大学818考研经验南理工电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节
sheng12345678rui6 天前
mfc140.dll文件缺失的修复方法分享,全面分析mfc140.dll的几种解决方法
游戏·电脑·dll文件·dll修复工具·1024程序员节
huipeng9267 天前
第十章 类和对象(二)
java·开发语言·学习·1024程序员节
earthzhang20217 天前
《深入浅出HTTPS》读书笔记(19):密钥
开发语言·网络协议·算法·https·1024程序员节
爱吃生蚝的于勒8 天前
计算机基础 原码反码补码问题
经验分享·笔记·计算机网络·其他·1024程序员节
earthzhang20218 天前
《深入浅出HTTPS》读书笔记(20):口令和PEB算法
开发语言·网络协议·算法·https·1024程序员节
一个通信老学姐8 天前
专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节