零基础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只能引用当前对象,不能再引用其他对象

相关推荐
马剑威(威哥爱编程)1 小时前
Java如何实现PDF转高质量图片
java·开发语言·pdf·1024程序员节
CoderJia程序员甲2 小时前
重学SpringBoot3-Spring WebFlux之HttpHandler和HttpServer
java·spring boot·reactor·1024程序员节
长潇若雪3 小时前
指针进阶(四)(C 语言)
c语言·开发语言·经验分享·1024程序员节
混迹网络的权某4 小时前
每天一道C语言精选编程题之求数字的每⼀位之和
c语言·开发语言·考研·算法·改行学it·1024程序员节
IronmanJay7 小时前
【LeetCode每日一题】——862.和至少为 K 的最短子数组
数据结构·算法·leetcode·前缀和·双端队列·1024程序员节·和至少为 k 的最短子数组
加载中loading...8 小时前
Linux线程安全(二)条件变量实现线程同步
linux·运维·服务器·c语言·1024程序员节
Wx120不知道取啥名8 小时前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
biomooc9 小时前
R语言 | paletteer包:拥有2100多个调色板!
r语言·数据可视化·1024程序员节
Hello.Reader9 小时前
FFmpeg 深度教程音视频处理的终极工具
ffmpeg·1024程序员节
Y.O.U..10 小时前
STL学习-容器适配器
开发语言·c++·学习·stl·1024程序员节