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("调用了带参数的构造方法");}

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-树-二叉树-堆的实现

1.树概念及结构 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 。 有一个特殊的结点&#xff…

【数据结构 —— 堆的实现(顺序表)】

数据结构 —— 堆的实现(顺序表) 一.堆1.1堆的定义及结构1.1.1.堆的定义1.1.2.堆的性质1.1.3.堆的结构 二.堆的实现2.1.头文件的实现 —— (Heap.h)2.2.源文件的实现 —— (Heap.c)2.2.1.小堆的源文件2.2.2…

leetcode:随机链表的复制

题目描述 题目链接:138. 随机链表的复制 - 力扣(LeetCode) 题目分析 这个题目很长,但是意思其实很简单:就是一个单链表,每个结点多了一个指针random随机指向链表中的任意结点或者NULL,我们血需…

NX二次开发UF_CURVE_ask_curve_struct 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_struct Defined in: uf_curve.h int UF_CURVE_ask_curve_struct(tag_t curve_id, UF_CURVE_struct_p_t * curve_struct ) overview 概述 Gets the structure p…

大数据技术之数据安全与网络安全——CMS靶场实训

大数据技术之数据安全与网络安全——CMS靶场实训 在当今数字化时代,大数据技术的迅猛发展带来了前所未有的数据增长,同时也催生了对数据安全和网络安全的更为迫切的需求。本篇博客将聚焦于大数据技术背景下的数据安全与网络安全,并通过CMS&a…

3、Qt使用windeploy工具打包可执行文件

新建一个文件夹,把要打包的可执行文件exe拷贝过来 点击输入框,复制一下文件夹路径 点击电脑左下角,找到Qt文件夹, 点击打开 “Qt 5.12.0 for Desktop” (我安装的是Qt 5.12.0版本) 输入“cd bin”&#xff…

【Amazon】安装卸载AWS CLI操作流程(Windows 、Linux系统)

AWS 命令行界面(AWS CLI)是用于管理 AWS 产品的统一工具。只需要下载和配置一个工具,您就可以使用命令行控制多个 AWS 产品并利用脚本来自动执行这些服务。 AWS CLI v2 提供了多项新功能,包括改进的安装程序、新的配置选项&#…

php高级工程师范文模板

以下简历内容以php高级工程师招聘需求为背景,我们制作了1份全面、专业且具有参考价值的简历案例,大家可以灵活借鉴,希望能帮助大家在众多候选人中脱颖而出。 php高级工程师简历在线制作下载:百度幻主简历 求职意向 求职类型&…

FinGPT:金融垂类大模型架构

Overview 动机 架构 底座模型: Llama2Chatglm2 Lora训练 技术路径 自动收集数据并整理 指令微调 舆情分析 搜新闻然后相似搜索 检索增强架构 智能投顾 Hugging face 地址 学术成果及未来方向 参考资料

解决几乎任何机器学习问题 -- 学习笔记(组织机器学习项目)

书籍名:Approaching (Almost) Any Machine Learning Problem-解决几乎任何机器学习问题 此专栏记录学习过程,内容包含对这本书的翻译和理解过程 我们首先来看看文件的结构。对于你正在做的任何项目,都要创建一个新文件夹。在本例中,我 将项目命名为 “p…

数字图像处理(实践篇)二 画出图像中目标的轮廓

目录 一 涉及的OpenCV函数 二 代码 三 效果图 一 涉及的OpenCV函数 contours, hierarchy cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) image:源图像。mode:轮廓的检索方式。cv2.RETR_EXTERNAL(只检测…

uni-app,nvue中text标签文本超出宽度不换行问题解决

复现:思路: 将text标签换为rich-text,并给rich-text增加换行的样式class类名解决: