Java--类和对象

目录

  • 面向对象
  • 一.类
    • 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("调用了带参数的构造方法");
    }

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Orangepi Zero2 全志H616】驱动舵机控制 / Linux定时器(signal、setitimer)

一、SG90舵机开发 舵机基本介绍 二、Linux定时器 signal 函数setitimer 函数原型signal、setitimer函数API调用 三、舵机 软件PWM实现 一、SG90舵机开发 舵机基本介绍 如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控…

JMeter:断言之响应断言

一、断言的定义 断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。可以是看成验证测试是否预期的方法。 对于接口测试来说,就是测试Request/Response,断言即可以针对Request进行,也可以针对Response进行。但大部分是对Respons…

【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件

文章目录 1.MenuStrip2.ContextMenuStrip3.ToolStrip4.StatusStrip 1.MenuStrip MenuStrip作为一个容器可以包含多个菜单项。MenuStrip 的重要属性包括: Name:菜单的名字Dock:菜单的停靠位置Items:菜单项的集合 ToolStripMenuI…

多种循环法打印乘法表

1 问题 使用多种循环法打印乘法表,有助于巩固夯实循环的语法及用法。 使用for-for、for-while、while-for方法实现乘法表。 2 方法 (1)for-for:使用两个for.. in..来实现乘法表。 (2)for-while:使用一个for语句再一个w…

Visual Studio Code将中文写入变量时,中文老是乱码问题

对于这个问题,我也是弄了很久才知道,编码格式的问题 在此之前我们要先下载个插件 照这以上步骤,最后按F6运行即可,按F6是利用我们刚刚下载的插件进行编译,唯一有一点不好就是,用这种插件运行的话&#xff…

【算法| 差分 No.1】AcWing 797. 差分 AcWing 798. 差分矩阵

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮…

VMware Ubuntu 共享文件夹

VMware Ubuntu 共享文件夹 flyfish 物理机配置 Network Adapter设置 此处设置为NAT Shared Folders设置 虚拟机配置 vmware-hgfsclient sudo vmhgfs-fuse .host:/ /mnt -o nonempty -o allow_other 或者 sudo vmhgfs-fuse .host:/ /mnt/ -o allow_other第一行命令是查看共…

如何保障企业TikTok直播网络的可靠性?

在这个直播流量爆炸的时代,直播带货的营销方式逐渐走向大众,企业通过直播的方式向消费者展示产品和服务,从而提高品牌知名度。而TikTok作为全球最受欢迎的短视频和直播社交平台,拥有庞大且活跃的用户群体,是不少企业直…

每日一题 --- 力扣318----最大单词长度乘积

这道题时间复杂度我感觉设置的不是很好,应该最好是有一个1000变成10000就行。 因为我在做这道题的时候被误导了,以为双重循环暴力判断一下也能过,因为1000*1000 *26的时间复杂度没有到1亿,那么我刚开始认为是能过的,结…

RPC 原理详解

文章目录 什么是 RPCRPC 基本原理RPC核心功能服务寻址数据编解码网络传输一次RPC的调用过程 实践基于HTTP协议的RPC基于TCP协议的RPC 什么是 RPC RPC(Remote Procedure Call),即远程过程调用,它允许像调用本地服务一样调用远程服…

内涝积水监测仪怎么样?万宾科技城市内涝积水监测的作用

在城市建设发展过程中,道路基础设施的建设永远都占据着重要一席,因为人们出行一旦受阻便会影响城市进展,也会影响经济发展。在城市之中有隧道,下穿式立交桥等容易存积水的地方,一旦出现恶劣暴雨天气,这些地…

腾讯云CVM服务器操作系统镜像大全

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像,公共镜像包含基础操作系统和腾讯云提供的初始化组件,公共镜像分为Windows和Linux两大类操作系统,如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…

chroot

1.chroot技术 在Linux系统中,系统默认的目录结构都是以/,即根(root)开始的。而在使用chroot之后,进程的系统目录结构将以指定的位置作为根(/)位置。chroot实际作用就是将进程描述符中struct fs_struct中的root的值设置为选定的目录。 在经过…

品牌如何长期占领小红书市场,小红书投放复盘怎么规划?

想要实现产品种草与品牌营销,达人投放成了很多品牌的选择。然而随着达人协助成本的水涨船高,提高达人投放结果,就变得迫在眉睫。今天我们将为大家分享下,品牌如何长期占领小红书市场,小红书投放复盘怎么规划&#xff1…

el-select 搜索无选项时 请求接口添加输入的值

el-select 搜索无选项时 请求接口添加输入的值 <template><div class"flex"><el-select class"w250" v-model"state.brand.id" placeholder"请选择" clearable filterable :filter-method"handleQu…

随时随地时时刻刻使用GPT类应用

疑问 很多人说GPT的广泛使用可能会使人们失业&#xff0c;会对一些互联网公司的存活造成挑战&#xff0c;那么这个说法是真的吗&#xff1f; 这个说法并不完全准确。虽然GPT等AI技术的广泛应用可能会对某些行业和职业产生影响&#xff0c;但并不意味着它会导致人们失业或互联网…

【Qt之事件过滤器】使用

介绍 事件过滤器是Qt中一种重要的机制&#xff0c;用于拦截并处理窗口和其他对象的事件。 它可以在不修改已有代码的情况下&#xff0c;动态地增加、删除一些处理事件的代码&#xff0c;并能够对特定对象的事件进行拦截和处理。 在Qt中&#xff0c;事件处理经过以下几个阶段&…

.NET Core 中插件式开发实现

在 .NET Framework 中&#xff0c;通过AppDomain实现动态加载和卸载程序集的效果&#xff1b;但是.NET Core 仅支持单个默认应用域&#xff0c;那么在.NET Core中如何实现【插件式】开发呢&#xff1f; 一、.NET Core 中 AssemblyLoadContext的使用 1、AssemblyLoadContext简…

CodeWhisperer 的安装及体验

文章作者&#xff1a;Pony CodeWhisperer 是亚马逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似 Cursor 和 Github Copilot 编码工具。 官网&#xff1a;https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 在编写代码时&#xff0c…

pg14-sql基础(二)-排序与统计

排序 SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY first_name; --按字母&#xff0c;默认升序 ORDER BY hire_date ASC; --升序 ORDER BY hire_date DESC; --降序SELECT employee_id, first_name, last_name, hire_date, salary F…