关于类和对象超级初级小白知识

news2025/1/13 7:51:31

下面的内容只是一小部分,在整个面向对象的知识中并不完整,用于记忆和梳理

目录

前言:类和对象是什么?

一、定义类

 1.如何定义类

2.类的注意事项

二.类的实例化

1.创建对象的基础知识

2.如何创建对象

3.实例化举例

4.访问对象

5.实例化对象的一些注意事项

三、this引用

1.this引用的三大作用

2.具体使用

​编辑

四、初始化方式

1.默认初始化

2.就地初始化

3.构造方法

总结

1.类和对象

2.this引用

3.初始化成员变量

4.构造方法


前言:类和对象是什么?

(1)类是什么?

1.类是用来对一个实体(对象)来进行描述的。比如这个实体(对象)的大小、长度和质量等等。

2.类是Java语言中一种结构

3.类的一般组成:成员变量、成员方法和构造方法

(2)对象是什么?

1.对象是一个实体。如果说类是一个形容词,那么对象就是被形容词修饰的名称。

2.类是用来描述对象的。在Java语言中,对象是由类创造出来的。

3.类相当于是一个类型,通过类型来创建变量

(3)类、对象分别长什么样?


上面就是类和对象大概长什么样,接下来一起更加深入的去了解如何定义类跟对象吧

一、定义类

 1.如何定义类

(1)类的定义格式

class是定义类的一个关键字,是必须要有的。在class前面可以有一个修饰符,一般是public

// 创建类
class ClassName{  
    field;       // 字段(属性) 或者 成员变量

    method;      // 行为 或者 成员方法
}

(2)定义一个狗类

这个类的名字为:PetDog;其中,花括号中的代码是狗的一些属性 ,用户可自行添加。

(1)像前面两行代码,称为类的成员方法

(2)后面两个方法,称为类的属性

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
   }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
   }
}

(3)类出现的两种形式

第一种:class+类名的方式创造

第二种:通过创造文件的形式

(4)类的改名操作

类不能直接在代码页面改名,需要通过以下的操作来

第一步:找到类的位置

第二步:

改名后:

在大概知道一个类是怎么定义之后,就应该了解在定义类时的一些注意事项,包括易错点和潜规则

2.类的注意事项

(1)一般一个java文件中定义一个类(推荐)

最好就是一个java文件中出现一个class就好

(2)类的命名采用大驼峰定义(推荐)

1.只有一个单词时,需要首字母大写

2.多个单词时,每个单词的首字母大写

(3)public修饰的类必须要和文件名相同(必须要求)

这种类 一般都是在创建类的时候自带的一个public(属于类的第二种创造方法)

(4)一般main方法所在的类使用public修饰(推荐)


了解了类的一些注意事项,就应该去了解对象是怎么来的,对象是什么了

二.类的实例化

用类类型创建对象的过程,称为类的实例化

1.创建对象的基础知识

1.使用new关键字和类名来创建对象

2.一般会有一个指向对象的引用(变量)

2.如何创建对象

第一种:有一个引用指向对象

第二种:匿名对象(当前用来理解对象是什么?)

这种直接是new+类名+(),这个整体就是一个对象

new Chichen6666();

3.实例化举例

这是一个定义好的狗类:

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
   }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
   }
}

在主函数内使用类定义对象

public class Main{
 public static void main(String[] args) {
        PetDog dogh = new PetDog();     //通过new实例化对象
 }
}

实例化大致包含两步:(1)为对象分配内存空间(2)调用合适的构造方法进行初始化

4.访问对象

每实例化一个对象,该对象就会拥有类中全部属性,可以说这些属性是属于对象的,接下来就可以通过对象的引用去访问这些属性了

访问的格式:指向对象的引用(变量)+.  来访问对象中的属性和方法

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
   }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
   }
}
public class Main{
 public static void main(String[] args) {
        PetDog dogh = new PetDog();     //通过new实例化对象

        dogh.name = "阿黄";//给对象中的name进行赋值
        dogh.barks();//访问成员方法
 }
}

5.实例化对象的一些注意事项

1.new 关键字用于创建一个对象的实例。

2.同一个类可以创建对个实例。

3.使用 . 来访问对象中的属性和方法。

三、this引用

1.this引用的三大作用

(1)this可以指向当前对象

(2)this可以调用成员方法

(3)this可以调用构造方法

2.具体使用

(1)指向当前对象

 当形参名字和成员变量名字一样时,是优先执行局部变量的,编译器就会认为两个变量都是局部变量,所以不能成功给成员变量赋值。

public class Data {
    public int year;
    public int month;
    public int day;

   public Data(int year,int month,int day) {
      year = year;
      month = month;
      day = day;
   }
   public void print() {//打印的方法
      System.out.println(this.year+"/"+this.month+"/"+this.day);
    }

    public static void main(String[] args) {
        Data data = new Data();//对象1

        Data data1 = new Data(1999,9,9);//对象2
        data1.print();//调用打印函数
    }
}

针对上面的情况,要使用this表明该变量属于对象的,是成员变量

public class Data {
    public int year;
    public int month;
    public int day;

   public Data(int year,int month,int day) {
      this.year = year;
      this.month = month;
      this.day = day;
   }
   public void print() {//打印的方法
      System.out.println(year+"/"+month+"/"+day);
    }
    public static void main(String[] args) {
        Data data = new Data();//对象1

        Data data1 = new Data(1999,9,9);//对象2
        data1.print();
    }
}

只要是成员变量,我们都可以在前面加上this引用。谁调用的这个变量,this就表明这个成员变量是这个对象的,就会给这个对象中的成员变量进行赋值

(2)调用成员方法

代码示例: 

class Student {
    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void study() {
        this.eat();//在一个方法中调用其他的方法
        System.out.println(this.name+"正在学习");
    }
    public void eat() {
        System.out.println(this.name+"正在干饭");
    }

}

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("张三",18);
        student1.study();
    }
}

结果分析示例:

(3)调用构造方法

常用于在一个构造方法中去调用其他的构造方法

代码示例:

class Student {
    public String name;
    public int age;

    public Student(String name, int age) {
        this();//必须放在第一行
        this.name = name;
        this.age = age;
    }
    public Student() {
        System.out.println("无参构造方法被this调用了");
    }
}

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("张三",18);
    }
}

注意事项:

this()调用构造方法时,必须放在第一行

四、初始化方式

我们定义类的时候,一般都会有成员变量和成员方法;而在定义成员变量的时候可以选择赋一个初值或者不赋(初始化),也可以在后续的操作中赋值,下面一一介绍

1.默认初始化

其实默认初始化就是不初始化,变量会有一个默认的初值

class PetDog {
    public String name;//默认初始化
    public String color;//默认初始化
}

2.就地初始化

就地初始化就是在定义成员变量的时候,直接赋值,这样定义的类的使用范围就会变得很狭窄,实例化的对象都是一样的属性

class PetDog {
    public String name = "旺财";//就地初始化
    public String color = "黄色";//就地初始化
}

所以为了能应对更多的情况,不同的对象属性不同,使用构造方法去初始化成员变量

3.构造方法

(1)什么是构造方法

1.构造方法又称为构造器,是一种特殊的成员方法。

2.在构造方法中,可以初始化成员变量。

(2)构造方法的特点

1.构造方法的名字必须与类名相同。

2.在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

3.无论用户有没有写构造方法,总是会被调用。

4.构造方法没有返回值这一说法,设置为void也不行。

5.构造方法可以重载。

 

(3)使用构造方法

第一种:编译器默认(隐式)提供

下面的类是没有构造方法的,当用户没有提供时,编译器会默认提供一个无参的构造方法

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
   }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
   }
}

将编译器默认的构造方法显示出来

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
   }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
   }
   public PetDog() {
        //默认的无参构造方法
    }
}

这个默认的无参构造方法即使我们不写出来,编译器也会默认提供(这里为了认识特意写出来)

第二种:自己写构造方法

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
   }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
   }
   public PetDog() {
        //默认的无参构造方法
    }
    //自己写的构造方法
   public PetDog(String name,String color) {
       this.name = name;
       this.name = color;
    }
}

第三种:由编译器自己生成

由编译器生成的前提是:类中有成员变量,不然没有必要由编译时生成(默认会由有)

根据下面提升的操作:

第一步:这一步的快捷键为:Alt+Ins

第二步:

第三步:选择需要成员变量

结果展示:


上述就是构造方法的创造方法,下面介绍两种构造方法的区别,和当自己定义了构造方法之后,创建对象时的区别。

(4)构造方法的区别和初始化

下面介绍无参构造方法和有参构造方法在在实例化对象时候的区别

第一种区别:默认无参构造方法与有参构造方法的区别

无参构造方法在实例化对象的时候:

public class PetDog {

    public String name;//名字
    public String color;//颜色

    public PetDog() {
    }
}
class Test {
    public static void main(String[] args) {
        PetDog dog1 = new PetDog();
    }
}

 这种情况下的对象,就是为默认初始化的

有参的构造方法在实例化对象的时候:

总结

1.类和对象

(1)类是一个类型,用来创造对象

(2)类中有成员变量和成员方法

(3)对象的引用可以通过.号访问对象中的成员方法和成员变量

2.this引用

(1)this引用成员变量

(2)this调用成员方法

(3)this调用构造方法(存在一个构造方法中,必须在代码的第一行)

(4)this只能在成员方法中使用

(5)this调用构造方法时,不能形成闭环

3.初始化成员变量

(1)默认初始化

(2)就地初始化

(3)使用成员方法(在实例化对象时)

4.构造方法

(1)系统隐式默认提供

(2)手动显示提供

(3)通过编译器自己生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1514091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考75-上午题-【面向对象技术3-设计模式】-设计模式的要素

一、题型概括 上午、下午题(试题五、试题六,二选一) 每一个设计模式都有一个对应的类图。 二、23种设计模式 创建型设计模式:5 结构型设计模式:7 行为设计模式:11 考试考1-2种。 三、设计模式的要素 3…

数据驱动下的私域运营战略布局

一、以用户为中心的组织重构或整合 发现,市场上大部分做的非常成功的私域项目,都是由CEO推动的、基于该战略的组织重构去驱动的。 我们也看到,在很多公司,私域运营是由品牌部门、CRM部门和Trade Marketing部门合作一起运营的。 …

FineReport报表如何在单元格中显示本地图片(图片地址已存储到MySQL数据库中)

帆软帮助文档对应查看链接:https://help.fanruan.com/finereport/doc-view-854.html?source4#需求:在设计FineReport报表时,想在单元格中显示图书信息对应的图片,图片路径已存储到MySQL数据库中 一、查询数据库 查询MySQL中图书…

一起玩儿3D打印机——02 3D打印机TinyBee主板、Marlin固件

摘要:本文介绍3D打印主板、固件 在前边已经介绍了3D打印机的基本组成,其中主板是3D打印机的硬件核心,而固件则是3D打印机的软件核心,在进行选择的两者一定要配合起来。因为3D打印机的核心处理器,不像PC机这样&#xff…

计算机网络-第4章 网络层(2)

主要内容:网络层提供的两种服务:虚电路和数据报(前者不用)、ip协议、网际控制报文协议ICMP、路由选择协议(内部网关和外部网关)、IPv6,IP多播,虚拟专用网、网络地址转换NAT,多协议标…

零基础自学C语言|自定义类型:联合与枚举

✈联合体 🚀联合体的类型声明 像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。 给…

鸿蒙开发月薪过万,背后的秘密~

自从智联招聘公布出春节后首周的岗位需求数据后,鸿蒙开发岗位就被推上了热潮!鸿蒙相关职位数同比增长163%,投递人数同比增长349%,即分别增至去年同期的2.6倍、4.5倍,涨势突出。 于是我的朋友圈中就有人去市场中简单探…

Linux下menuconfig与Kconfig基础知识概要

一、简介 menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。上至决定某一程序模块是否编译,下到某一行具体的代码是否需要编译以及某个项的值在本次编译时该是什么都可由menuconfig来定义。 menuconfig的使用方式通常是在编译系统之前在系统源代码根…

php.exe运行时,提示缺少VCRUNTIME140.dll

php.exe运行时,提示缺少VCRUNTIME140.dll 下载地址 https://www.microsoft.com/zh-cn/download/details.aspx?id48145根据需要选择下载3.运行安装后,再次运行php.exe。

【XMU学科实践二】豆瓣爬虫实践

文章目录 分析豆瓣阅读网站完整爬虫代码 叠甲:仅供学习。。 XMU的小朋友实在不会了可以参考我的思路,但还是建议自己敲一遍哈。 学科实践二还是挺有意思的! 分析豆瓣阅读网站 豆瓣阅读出版页面 打开浏览器开发者工具,可以看到如下…

Apache Paimon系列之:认识Paimon

Apache Paimon系列之:认识Paimon 一、认识Paimon二、统一存储三、基本概念1.文件布局2.Snapshot3.清单文件4.数据文件5.分区6.一致性保证 一、认识Paimon Apache Paimon的架构: 如上架构所示: 读/写:Paimon 支持多种读/写数据和…

CLion 配置 Qt 开发环境

文章目录 CLion 配置 Qt 开发环境环境说明基本配置1. 创建Qt项目2. 设置CLion工具链3. 配置外部工具 一些问题的补充 CLion 配置 Qt 开发环境 环境说明 操作系统:Windows 10 CLion版本:2023.3.4 CMake版本:3.27.7 Qt6版本:6.6…

后Xposed时代: 一篇文章看懂如何安装和使用Edxposed

文章转载于:https://blog.coderstory.cn/guide-install-edxposed/ 序言: 大名鼎鼎的xposed框架不必多说了吧,想要实现QQ抢红包,微信抢红包,防止消息撤回等功能必须得靠它的支持才行。xposed也是所有android系统获取root后必装的东西。但可惜…

跨境电子商务支付与结算

一、跨境电子商务支付与结算的业务架构 跨境电子商务支付与结算的业务架构,结合跨境电子商务支付与结算的技术架构,其业务架构主要包括以下五大模块 (1)商户模块。商户模块包括虚拟账户、管理平台、多币种收银台、争议管理。 &…

【Django开发】前后端分离美多商城项目第1篇:美多商城【附代码文档】

美多商城项目4.0文档完整教程(附代码资料)主要内容讲述:美多商城,项目准备,商业模式介绍,开发流程,需求分析,项目架构,创建工程,1. 在git平台创建工程1.B2B--…

flex弹性盒子实现左中右居中布局

1、效果展示 2、布局与样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试弹性盒子</title> </head> <body> <div class"out-parent"><div class"…

C++入门篇(2)

1. 内联函数 1.1 概念 C中&#xff0c;以 inline 修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 #include <iostream> using namespace std;int Add(int…

Java后端八股文之java基础

文章目录 0.Java 中有 8 种基本数据类型1. 为什么浮点数运算会丢失精度&#xff1f;如何解决&#xff1f;2. 面向对象的三大特征2.1 封装2.2 继承2.3 多态 3. 深拷贝和浅拷贝的区别&#xff1f;什么是引用拷贝&#xff1f;4. equals方法与“”方法4.1 4.2 equals方法 5.hashcod…

LeetCode543题:二叉树的直径(python3)

代码思路&#xff1a; 先递归调用左儿子和右儿子求得它们为根的子树的深度 L和 R &#xff0c;则该节点为根的子树的深度即为max(L,R)1。该节点的 dnode值为LR1 递归搜索每个节点并设一个全局变量 ans记录 dnode的最大值&#xff0c;最后返回 ans-1 即为树的直径。 # Definit…

蓝桥杯历年真题省赛 java b组 2016年第七届 凑算式

一、题目 凑算式 B DEF A --- ------- 10 C GHI 这个算式中A~I代表1~9的数字&#xff0c;不同的字母代表不同的数字。 比如&#xff1a; 68/3952/714 就是一种解法&#xff0c; 53/1972/486 是另一种解法。 这个算式一共有多少种解法&#xff1f; 注意&a…