Java--类和对象

news2025/1/11 0:30:31

目录

  • 面向对象
  • 一.类
    • 1.类的创建
    • ==默认初始化==
    • 2.类的实例化
    • 3.注意事项
    • ==利用类的创建来交换值==
  • 二.this
    • 1.使用this
    • 2.可使用this来调用其他构造方法来简化
  • 三.构造方法
    • 3.1概念
    • 3.2特性
    • 3.3不带参数的构造方法
    • 3.4带参数的构造方法
    • ==当使用自定义的构造方法后,再删除时,再new则编译不通过==
    • 3.3可使用this来调用其他构造方法来简化
        • 前提

面向对象

Java是一门面向对象的语言,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。

一.类

1.类的创建

命名规则: 大驼峰

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

定义一个狗类

class Dog{
    //属性,字段,成员变量:这些是定义在方法外部,类内部的
    public String name;
    public int age;
    //成员方法
    public void dogSay(){
        System.out.println("wangwangwang");
    }
}

采用Java语言将狗类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以识别了。

在定义一个类时,一般包含成员变量和成员方法。

默认初始化

在成员变量未初始化时,会默认初始化为其对应的0值
在这里插入图片描述

2.类的实例化

用类类型创建对象的过程,成为类的实例化
分为两步
1.为对象分配内存
2.调用合适的构造方法

Date date = new Date();

3.注意事项

1.一个文件一般只定义一个类
2.main方法所在的类一般要使用public修饰
3.public修饰的类必须要和文件名相同

1.引用不可以指向引用

这代表两个引用数据类型指向同一个对象

 Dog dog1 = new Dog();
 Dog dog2 = dog1;
 //相当于
  int[] arr1 ={1,2,3};
  int[] arr2 = arr1;

2.一个引用不能指向多个对象
** 3.引用=null**
不代表指向null,而是代表这个引用不指向任何对象。

利用类的创建来交换值

因为基本数据类型是不能交换的

class MyValue{
    public int val;
}
public class test {
    public static void swap(MyValue val1,MyValue val2){
        int temp = val1.val;
        val1.val = val2.val;
        val2.val = temp;
    }
    public static void main(String[] args) {
        MyValue myValue1 = new MyValue();
        myValue1.val = 10;
        MyValue myValue2 = new MyValue();
        myValue2.val = 20;
        swap(myValue1,myValue2);
        System.out.println(myValue1.val);;
        System.out.println(myValue2.val);;
    }
}

在这里插入图片描述

swap创造出形参 val1 和 val2 ,此时他们的类型也是MyValue。
利用temp进行交换。
这里注意val1 和 vla2 形参 形参 形参 !!!

二.this

由于局部变量优先使用,在进入setDate中时,public void setDate(int year,int month,int day),括号里面的属于局部变量,优先使用,造成的结果就是 year(你输入的) = year; 如下图

在这里插入图片描述

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDate(int year,int month,int day){
        year = year;
        month = month;
        day = day;
    }
    public void ptintDate(){
        System.out.println("年:"+year+"月:"+month +"日:"+day);
    }

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(1945,9,1);
        date.ptintDate();
    }
}

由于优先使用局部变量的条件,编译并不能通过这时就需要使用this

1.使用this

加上this就可以成功赋值了。

谁调用当前方法,谁就是this

 public void setDate(int year,int month,int day){
        this.year = year;
       this.month = month;
        this.day = day;
    }

在这里插入图片描述

2.可使用this来调用其他构造方法来简化

构造方法中讲解

三.构造方法

3.1概念

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

3.2特性

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

3.3不带参数的构造方法

是在new的过程中调用的
一般使用public修饰,方法名和类名一样,没有返回值,void也不行。
在创建对象时,由编译器自动调用,并在对象的生命周期中只调用一次。

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(){
        this.year = 2008;
        this.month = 8;
        this.day = 8;
        System.out.println("执行了不带参数的构造方法");
    }
    public static void main(String[] args) {
        Date date = new Date();
    }
}

3.4带参数的构造方法

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public static void main(String[] args) {
        Date date2 = new Date(1999,45,3);
    }
}

当使用自定义的构造方法后,再删除时,再new则编译不通过

参考特性第三条

3.3可使用this来调用其他构造方法来简化

 public Date(){

        this(1988,8,8);//这里调用了带参数的Date方法
        System.out.println("调用了不带参数的构造方法");
    }
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带参数的构造方法");
    }
    public void print(){
        System.out.println("年:"+year+ "月:"+month+ "日"+day);
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.print();
    }

在这里插入图片描述

前提

1前面不能有其他语句,如果有则报错。

   public Date(){
        System.out.println("调用了不带参数的构造方法");
           this(1988,8,8);
    }

2.不能形成闭环,例如在Date()中调用带参数的,而在带参数中右调用Date()

public Date(){
//        this.year = 2008;
//        this.month = 8;
//        this.day = 8;
        this(1988,8,8);
        System.out.println("调用了不带参数的构造方法");
    }
    public Date(int year,int month,int day){
        this();
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带参数的构造方法");
    }

在这里插入图片描述
如上会形成闭环,造成错误。
码字不易,感谢观看
如果对你有帮助的话,记得点赞👍评论+关注吧

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

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

相关文章

【Linux系统编程】系统用户和权限的操作

目录 一,Linux的用户 1,用户之间的切换 2,超级用户权限的使用 二,Linux的文件权限 1,文件信息的介绍 2,文件权限的修改 3,用户的修改 3-1,拥有者的更改 3-2,所属…

chinese-stable-diffusion中文场景文生图prompt测评集合

腾讯混元大模型文生图操作指南.dochttps://mp.weixin.qq.com/s/u0AGtpwm_LmgnDY7OQhKGg腾讯混元大模型再进化,文生图能力重磅上线,这里是一手实测腾讯混元的文生图在人像真实感、场景真实感上有比较明显的优势,同时,在中国风景、动…

“一键批量拆分HTML文本,高效整理文件,提升工作效率“

您是否曾经被大量的HTML文本文件困扰,难以找到所需的特定信息?现在,我们向您推荐一款强大的工具,它能够一键拆分HTML文本,让您轻松实现文件整理,提高工作效率! 首先,在首助编辑高手…

大航海时代Ⅳ 威力加强版套装 HD Version (WinMac)中文免安装版

《大航海时代》系列的人气SRPG《大航海时代IV》以HD的新面貌再次登场!本作品以16世纪的欧洲“大航海时代”为舞台,玩家将以探险家、商人、军人等不同身份与全世界形形色色的人们一起上演出跌宕起伏的海洋冒险。游戏中玩家的目的是在不同的海域中掌握霸权…

使用javafx,结合讯飞ai,搞了个ai聊天系统

第一步:先在讯飞ai那边获取接入的api 点进去,然后出现这个页面: 没有的话,就点击免费试用,有了的话,就点击服务管理: 用v2.0的和用3的都行,不过我推荐用2.0版本 文档位置&#xff1…

1825_ChibiOS的OSLIB中的存储分配器

全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 之前有点不是很理解什么是静态OS,从这里基本上得到了这个答案。所谓的静态,其实就是内核之中不会使用Free以及Malloc这样…

ORAM文献笔记

Deterministic, stash-free write-only oram Roche D S, Aviv A, Choi S G, et al. Deterministic, stash-free write-only oram[C]//Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2017: 507-521. 确定性的、无堆栈的只写O…

【黑马程序员】SSM框架——SpringBoot

文章目录 前言一、SpringBoot 简介1. 入门案例1.1 入门程序① 创建新模块② 选择当前模块需要使用的技术集③ 开发控制类④ 运行自动生成的 Application 类 1.2 创建 SpringBoot 程序的两种方式1.2.1 最简 SpringBoot 程序所包含的基础文件1.2.2 基于 SpringBoot 官网创建项目 …

解析SD-WAN组网方式及应用场景,全面了解典型案例

随着企业业务高速发展,跨区域开展业务首要解决的难题是构建各站点能互联互通的网络,然而目前大多数企业在广域网优化的问题上依旧碰壁,主要原因是企业广域网面临的挑战并不能马上得到解决。 传统网络互联方案无论是IPsec还是专线&#xff0c…

单目结构光三维重建最终公式推导

详细推导(建议自己推导一遍) 参考:https://blog.csdn.net/u010430651/article/details/104868734?spm1001.2014.3001.5502

【漏洞复现】Apache_Shiro_1.2.4_反序列化漏洞(CVE-2016-4437)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞分析3、漏洞验证 说明内容漏洞编号CVE-2016-4437漏洞名称Apache_Shiro_1.2.4_反序列化漏洞漏洞评级…

【Spring】bean的配置

文章目录 1. 前言2. name3. lazy-init4. init-method5. destroy-method6. factory-method和factory-bean 1. 前言 在之前的文章中.写到过bean的常用配置,当时只是介绍了bean标签中的常用属性配置:class,id和scope这三个属性. 不熟的小伙伴可以看一下这篇文章:【Spring】IOC容器…

类和对象 下

构造函数 初始化列表 构造函数是在构造类的时候给对象赋初值,并不是给类的成员函数初始化,赋值可以赋多次,而初始化只能初始化一次,这里我们引入初始化列表来对成员函数进行初始化 初始化列表,以冒号 :开…

【JVM系列】- 挖掘·JVM堆内存结构

挖掘JVM堆内存结构 文章目录 挖掘JVM堆内存结构堆的核心概念堆的特点 堆的内存结构内存划分新生代/新生区(Young Generation)老年代(Tenured Generation)永久代(或元数据区)(PermGen 或 MetaSpa…

学习视频剪辑:巧妙运用中画、底画,制作画中画,提升视频效果

随着数字媒体的普及,视频剪辑已经成为一项重要的技能。在视频剪辑过程中,制作画中画可以显著提升视频效果、信息传达和吸引力。本文讲解云炫AI智剪如何巧妙运用中画、底画批量制作画中画来提升视频剪辑水平,提高剪辑效率。 操作1、先执行云…

两种MySQL OCP认证应该如何选?

很多同学都找姚远老师说要参加MySQL OCP认证培训,但绝大部分同学并不知道MySQL OCP认证有两种,以MySQL 8.0为例。 一种是管理方向,叫:Oracle Certified Professional, MySQL 8.0 Database Administrator(我考试的比较…

“我“何去何从?2024年软件测试职业发展方向?运筹帷幄方能决胜千里之外...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 测试的职责无非就…

《进化优化》第6章 进化策略

文章目录 6.1 (11) 进化策略6.2 1/5规则:推导走廊问题 6.3 μ1进化策略6.4 μλ和(μ,λ)进化策略6.5 自身自适应进化策略协方差阵自适应CMA 6.1 (11) 进化策略 假设f(x)是随机向量x的函数,我们想要最大化适应度f(x).…

Mysql进阶-SQL优化篇

插入数据 insert 我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。 批量插入数据 一条insert语句插入多个数据,但要注意,每个insert语句最好插入500-1000行数据,就得重新写另一条insert语句 Insert into…

YOLO系列环境配置及训练

目录 前言 一、下载所需 1、Anaconda安装 2、NVIDIA 驱动程序安装 3、CUDA安装 4、CUDNN下载及配置 二、环境配置 1、虚拟环境创建 2、Pytorch安装 3、pycharm环境切换及剩余库的安装 4、YOLO代码的测试及训练配置步骤 (1)测试 &#xff08…