返回顶部
首页 > 资讯 > 后端开发 > JAVA >深度剖析java类和对象
  • 371
分享到

深度剖析java类和对象

java开发语言面向对象 2023-09-07 12:09:20 371人浏览 安东尼
摘要

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 在Java中,一切皆对

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【JavaSE_primary
在这里插入图片描述

在Java中,一切皆对象。

目录

一、类的定义和使用

在Java中,我们通过类来描述对象。

类的定义:Java类是面向对象编程中的基本构建模块,用于描述对象的属性(成员变量)和行为(方法)

1.1类的定义格式

Java类的定义格式如下:

[访问修饰符] class 类名 {    // 成员变量(属性)        // 构造方法        // 方法}

一个类应该有以下几部分组成:类声明、成员变量、成员方法、构造方法、访问修饰符。

1.2定义学生类

class Student{//成员变量public String name;public String gender;public short age;public double score;//方法public void DoClass(){}public void DoHomework(){}public void Exam(){}}

我们定义类时应该注意一下注意事项:

1.一般一个文件当中只定义一个类
2.main方法所在的类一般要使用public修饰
3.public修饰的类必须要和文件名相同
4.不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

二、类的实例化

我们首先要知道,我们定义一个类时其实就是在计算机当中自定义了一个类型,就像int、double一样,只不过类这个类型时我们自己定义的而已,而int、double这样的类型是Java语言自带的内置数据类型。

有了类这个类型(可以理解为我们自己定义的一种自定义类型)之后,我们就可以利用类这个类型来定义实例(也称对象)了,这个过程就称为类的实例化。

举个例子:
下面有一个Teacher类,请看:

class Teacher{//成员变量或字段    public String name;    public int age;    public int ID;//成员函数    public void work(){        System.out.println("今天的工作是教学");    }    public void wages(){        System.out.println("本月的工资为10000");    }}

我们现在实力化一个Teacher类对象,请看:

public class Test2 {    public static void main(String[] args) {        //通过new来实例化一个Teacher对象        Teacher t1 = new Teacher();        t1.name = "李华";        t1.age = 25;        t1.ID = 123456;        System.out.println(t1.name);        System.out.println(t1.age);        System.out.println(t1.ID);        t1.work();        t1.wages();    }}

运行结果如下:
在这里插入图片描述
在这里插入图片描述

关于类的实例化这里有以下几点需要注意:

通过new 关键字来实例化一个对象。
2.使用 . 来访问对象中的属性和方法。
3.同一个类可以实例化多个对象。
4.**当成员变量没有赋值的时候,默认值就是其对应的初始值。**即int->0 float->0.0f boolean->false char->'\u0000'

三、this引用

3.1this引用是什么

概念:this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

下面是日期类对象,请看:

class Date {    public int year;    public int month;    public int day;    public void setDay(int year, int month, int day){        this.year = year;        this.month = month;        this.day = day;    }    public void printDate(){        System.out.println(this.year + "-" + this.month + "-" + this.day);    }}public class Test3 {    public static void main(String[] args) {        //先构造3个日期类对象        Date d1 = new Date();        Date d2 = new Date();        Date d3 = new Date();        //对每个对象的成员变量进行赋值        d1.setDay(23,8,30);        d2.setDay(23,8,31);        d3.setDay(23,9,1);        //对每个日期类对象进行打印        d1.printDate();        d2.printDate();        d3.printDate();    }}

运行结果如下:
在这里插入图片描述

注意关键字this用于引用当前对象,即调用当前方法的对象。它可以在对象的成员方法中引用当前对象的成员变量和方法。
请看举例:

class MyClass {    private int value;    public void printValue() {        System.out.println(this.value); // 使用this引用当前对象的成员变量    }}

3.2this引用特性

this引用有如下几个特性:

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在成员方法中使用(静态成员方法无法使用)
  3. 在成员方法中,this只能引用当前对象,不能再引用其他对象
  4. this是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

四、对象的构造及初始化

4.1如何初始化对象

我们先来看一个问题,如果一个对象没有对其成员变量赋值的话,那能不能打印其成员变量呢?依然是那日期类对象来进行举例:
在这里插入图片描述

运行结果如下:在这里插入图片描述

可以看到这里并没有报错。因为如果我们没有显式的初始化对象的成员变量,那么编译器就会默认将对象的成员变量进行初始化。

4.2构造方法

我们也可以通过构造方法来对对象进行初始化

构造方法概念:构造方法(也称为构造器)是一个特殊的成员方法,构造方法的名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次

请看举例:

//不带参数的构造函数public Date(){    System.out.println("不带参数的构造方法");}//带参数的构造函数public Date(int year,int month,int day){    System.out.println("带参数的构造方法");}

我们要想实例化一个对象,就必须调用构造函数,因为只有调用完构造函数之后,才算真正实例化出了一个对象(调用完构造函数之后对象才算真正意义上的产生)。

另外,构造方法是可以构成重载的,如上(一个带参数、一个不带参数的构造方法)。

4.3构造方法特性

  • 名字必须与类名相同
  • 没有返回值类型,设置为void也不行
  • 当创建对象时由编译器自动调用构造函数,并且在对象的生命周期内只调用一次
  • 如果我们自己写了构造方法(无论是带参数还是不带参数),编译器则不会自己生成构造函数。
  • 当没有显式定义构造方法,编译器会自动为我们生成一个不带参数的构造方法
  • 构造方法支持重载(根据自己需求来提供不同参数的构造方法)
  • 大多数情况下,构造方法用public来进行修饰,特殊场景下需要用private来修饰。

4.4调用本类当中其它构造方法

什么是调用本类当中其它构造方法呢?请看举例:

class Date {    public int year;    public int month;    public int day;//无参构造    Date(){        //调用本类当中其它构造方法        this(23,5,21);//不许放在构造方法里面而且是第一行        System.out.println("不带参数的构造方法");    }    //带参构造    Date(int year,int month,int day){        System.out.println("带参数的构造方法");    }    public void setDay(int year, int month, int day){        this.year = year;        this.month = month;        this.day = day;    }    public void printDate(){        System.out.println(this.year + "-" + this.month + "-" + this.day);    }}

this(…)有两点需要注意

  • 必须放在构造方法中且是第一行
  • 不能形成环

4.5默认初始化

默认初始化是指在创建对象时,如果没有显式地对成员变量进行初始化,Java会使用默认值来初始化它们。默认值根据成员变量的类型而定,例如,整型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。默认初始化确保了对象在创建时每个成员变量都有一个初始值。

请看举例:
在这里插入图片描述
运行结果如下:
在这里插入图片描述

4.6就地初始化

就地初始化是指在创建对象时,对成员变量进行显式的初始化。我们可以在对象创建的同时为成员变量赋予特定的值。

请看举例:

public class MyClass {//当然,在这里进行就地初始化也是可以的    private int value;    private String str;    // 就地初始化块    {        value = 10;        str = "Hello";    }    // 构造方法1    public MyClass() {        // 存在就地初始化的成员变量的初始化语句    }    // 构造方法2    public MyClass(int value) {        // 存在就地初始化的成员变量的初始化语句        this.value = value;    }}

解释
MyClass类包含一个就地初始化块,在这个块中对成员变量value和str进行了初始化。在编译期间,编译器会将就地初始化块的内容添加到所有的构造函数中(包括无参构造函数和带参构造函数)。
因此,无论是使用无参构造函数还是带参构造函数创建对象,成员变量value和str都会得到就地初始化块中指定的初始值。

所以,就地初始化后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中。这样可以确保无论使用哪个构造函数创建对象,成员变量都得到了正确的初始化

以上就是本文类和对象的全部内容。

好了,本文到这里就结束了,再见啦友友们!!!
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_74352571/article/details/132580022

--结束END--

本文标题: 深度剖析java类和对象

本文链接: https://lsjlt.com/news/398263.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 深度剖析java类和对象
    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 在Java中,一切皆对...
    99+
    2023-09-07
    java 开发语言 面向对象
  • 带你用Java全面剖析类和对象
    目录一、面向过程?面向对象?二、类和类的实例化2.1普通成员变量和普通成员方法2.2静态成员变量和静态成员方法三、封装3.1private3.2getter和setter四、构造方法...
    99+
    2024-04-02
  • 深入浅出分析Java类和对象
    目录一、什么是类二、Java的类和C语言的结构体异同三、类和类的实例化类的声明实例化的对象,成员遵循默认值规则类的实例化静态属性(静态成员变量)四、构造方法创建构造方法this一、什...
    99+
    2024-04-02
  • C++中的类与对象深度解析
    目录初始化列表引论初始化列表explicit关键字引论explicit关键字使用static成员 友元引论友元内部类基础概念内部类的使用补充析构顺序例题总结初始化列表 引论...
    99+
    2024-04-02
  • 深入剖析Python类与对象的内部运作机制
    类与对象 在Python中,类是对象的蓝图,它定义了对象的属性和方法,而对象是类的实例,它具有类的所有属性和方法。 class Person: def __init__(self, name, age): self.na...
    99+
    2024-02-22
    Python 对象 方法 属性 继承 多态
  • Java 接口与抽象类:深入浅出的概念剖析
    主要特性: 只能包含抽象方法,不能有具体实现。 所有方法都默认为 public 和 abstract。 可以扩展多个接口,但不能继承类。 提供了一种抽象层面,关注于方法的定义而不是具体的实现。 抽象类 定义: 抽象类是一种部分抽象的类...
    99+
    2024-04-02
  • 怎么深度剖析C++对象池自动回收技术实现
    本篇文章为大家展示了怎么深度剖析C++对象池自动回收技术实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。对象池可以显著提高性能,如果一个对象的创建非常耗时或非常昂贵,频繁去创建的话会非常低效。对象...
    99+
    2023-06-17
  • 怎样深度剖析C++中的C++类型
    这期内容当中小编将会给大家带来有关怎样深度剖析C++中的C++类型,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在C++中,C++类模板不能直接使用,必须先实例化为相应的模板类,定义模板类的对象后,才可使...
    99+
    2023-06-17
  • Java 深入浅出解析面向对象之抽象类和接口
    目录抽象类声明抽象类声明抽象方法案例使用规则接口声明接口案例接口特性抽象类和接口的区别抽象类 java语言,声明类时 abstract class Db{} 说明Db类为抽象类。 j...
    99+
    2024-04-02
  • Servlet | 深度剖析转发和重定向
     一:深度剖析转发和重定向 (1)在一个web应用中通过两种方式可以完成资源的跳转 第一种方式:转发方式 第二种方式:重定向方式 (2)转发和重定向的区别 区别一:代码上的区别 ①转发 (1)路径上不需要写项目名! ...
    99+
    2023-09-02
    servlet 服务器 http
  • 深入浅析Java 抽象类和接口
    目录一、抽象类1.抽象类1.1抽象类的定义1.2抽象方法的定义方式1.3抽象类的定义方式2.抽象类和实例类的区别3.抽象类示例4.抽象类的特征二、接口1.接口1.1接口的定义1.1定...
    99+
    2024-04-02
  • 【JAVA】类和对象
    作者主页:paper jie的博客   本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将...
    99+
    2023-08-31
    java 开发语言
  • Java 类与对象:对象导向编程的基石(深入分析)
    : 类:对象的蓝图 类是描述一组具有相同特征和行为的对象的模板。它定义了对象的属性(数据成员)和方法(行为)。类是抽象概念,不能直接实例化。 创建类: class Employee { private String name; ...
    99+
    2024-03-09
    : Java、类、对象、OOP、封装、继承、多态
  • Java面向对象的封装特征深度解析
    目录面向对象三大特征封装private关键字——实现类封装访问器方法和更改器方法包——类的集合导入包从人的角度理解包不加访问权限——实现包封装总结在上一篇文章中,我们了解了面向对象的...
    99+
    2024-04-02
  • Java类和对象的示例分析
    这篇文章给大家分享的是有关Java类和对象的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是类类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实...
    99+
    2023-06-29
  • Vue3学习之深度剖析CSS Modules和Scope
    Css Modules 是通过对标签类名进行加装成一个独一无二的类名,比如.class 转换成.class_abc_123,类似于symbol,独一无二的键名Css Scope 是通过为元素增加一个自定义属性,这个属性加上独一无二的编号,而...
    99+
    2023-05-14
    前端 Vue.js
  • Java 8 - Optional类深度解析
    对Java 8 Optional类进行深度解析。 @pdaiJava 8 - Optional类深度解析Optional类包含的方法ofofNullableisPresentgetifPresentorElseorElseGetorElse...
    99+
    2022-12-02
    java框架 java全栈 java学习路线 java全栈知识 java面试 知识体系 java技术体系 java编程
  • 深入剖析Java中String类的concat方法
    目录Java String类的concat方法String的两点特殊性源码分析String类中concat()方法笔记及底层实现Java String类的concat方法 ...
    99+
    2024-04-02
  • 深度剖析java中JDK动态代理机制
    摘要相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定一组接口及目标类对象就能动态的获得代理对象。代理模式使用代理模式必须要让代理类和目标类实现相同的接口,客户端通过代理类来调用目标方法,代理类会将所有的方法调用...
    99+
    2023-05-31
    jdk 动态代理 ava
  • JPA 深度刘宝宝剖析版
    刘宝宝讲解开始了。。。。。第一讲 JPA介绍JPA 1.JPA的概念:    Java Persistence API:用于对象持久化的 API   &nb...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作