JAVA_类和对象(1)

news2025/2/4 8:59:56

认识面向对象

 Java是一门纯面向对象的语言(Object Oriented Program, OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
 面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

一、类定义和使用

2.1 类的定义

 基本概念:类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能。

类的定义格式
 在java中定义类时需要用到class关键字,类的定义格式如下:

// 创建类
class ClassName{
	field; // 字段(属性) 或者 成员变量
	method; // 行为 或者 成员方法
}

其中,class为定义类的关键字,ClassName为类的名字, { }中为类的主体。
类名采用大驼峰定义。

比如定义一个类

public class Person {

    private String name;
    private int age;
    
	// 狗的属性
	public void barks() {
		System.out.println(name + ": 说话");
	}

    // 人的行为
	public void wag() {
	System.out.println(name + ":吃饭");
}
}

注意事项:

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

1.2 类的实例化

我们通常使用到int、char、double等这些类型,都是Java中自带的内置类型。而类是用户定义的一个新的类型,有了这些自定义类型之后,就可以使用这些类型来定义实例(对象),用这些类类型来创建对象的过程,就叫做类的实例化(简单地说就是创建一个对象)。在Java中是采用new关键字,配合类名来实例化对象。
在这里插入图片描述

比如,我们根据前面定义的Person实例化一个新对象

Person person = new Person();   //实例化一个新对象
Person person1 = new Person();   
Person person3 = new Person();   //可以实例化多个对象


然后使用 . 就可以访问对象中的属性和方法:

public static void main(String[] args) {
        Person person = new Person();
        person.name = "张三";
        person.age = 20;
        person.barks();
        person.wag();
    }
-----------------------------------------------
输出:
张三: 说话
张三:吃饭

注意事项:

  1. new 关键字用于创建一个对象的实例;
  2. 使用 . 来访问对象中的属性和方法;
  3. 同一个类可以创建对个实例;

二、初始化和构造方法

 两种常规的初始方法有两种,可分为:就地初始化和默认初始化。

2.1默认初始化

public class Date {
	public int year;
	public int month;
	public int day;
	public Date(int year, int month, int day) {
	// 成员变量在定义时,并没有给初始值, 为什么就可以使用呢?
	System.out.println(this.year);
	System.out.println(this.month);
	System.out.println(this.day);
}
public static void main(String[] args) {
	// 此处a没有初始化,编译时报错:
	// Error:(24, 28) java: 可能尚未初始化变量a
	// int a;
	// System.out.println(a);
	Date d = new Date(2021,6,9);
}
}

2.2 就地初始化

class Person{
    public String name = "张三";
    public int age = 10;
    public String sex = "男";

    public void sleep(){
        System.out.println(name+"正在睡觉");
    }
}

2.3 构造方法(重点)

基本概念:

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

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
public class Date {
	public int year;
	public int month;
	public int day;
	
	// 无参构造方法
	public Date(){
	this.year = 1900;
	this.month = 1;
	this.day = 1;
	
	// 带有三个参数的构造方法
	public Date(int year, int month, int day) {
		this.year = year;
		this.month = month;
		this.day = day;
	}
	/**
	*两个构造方法名字相同,参数列表不同,因此构成了方法重载
	*/
	public void printDate(){
		System.out.println(year + "-" + month + "-" + day);
	}
	public static void main(String[] args) {
		Date d = new Date();
		d.printDate();
	}
}

构造方法的特性:

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

三、this引用

3.1 this的基本概念

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
参考实例:

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("名字是: "+name+""+"年龄是: "+age);
 }

this引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类;
  2. this只能在"成员方法"中使用;
  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象;
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
    在这里插入图片描述

3.2 使用this的三种情况

3.2.1 this访问成员变量

this.name;   //访问成员变量

3.2.3 this访问成员方法

this.fun(); //访问成员方法

3.2.3 this调用构造方法

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("名字是: "+name+""+"年龄是: "+age);
 }

总结

以上就是今天要讲的内容,本文仅仅介绍了类和对象的定义、this引用、构造方法。下一节我们将会讨论类的封装。

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

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

相关文章

jetson系列开发板使用虚拟机烧录系统时,遇见无法识别开发板的情况

在双系统中的ubuntu系统烧录没问题,但是电脑Ubuntu系统由于版本低,所以没有网络,烧录起来还的连网线,所以问了开发板的工程师,所幸,解决了问题,很感谢工程师的指导,特此记录一下&…

前端跨域怎么办?

如果网上搜到的方法都不可行或者比较麻烦,可以尝试改变浏览器的设置(仅为临时方案) 1.新建一个Chrome浏览器的快捷方式 2.鼠标右键,进入属性,将以下命令复制粘贴到目标位置(可根据Chrome实际存放位置修改…

Innodb之redo日志

Innodb引擎执行流程 redo log ​ MySQL中的redo log(重做日志)是实现WAL(预写式日志)技术的关键组件,用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事,…

最新AI创作系统ChatGPT网站源码AI绘画,GPTs,AI换脸支持,GPT联网提问、DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

Oracle Discoverer Plus:下载公司的未交货销售订单

新建一个Report。 1,打开公司的Order management数据库 2,把需要的一些Field移到Report中,比如订单号,订单数量,fillfuled数量,或者Shipped数量,等等 3,其实这个笔记主要是为了记录…

leetcode hot100_day20

4/14/2024 128.最长连续序列 自己的 这是前两天做一半的题目了。这题给我的教训就是用哈希表的时候一定一定要考虑重复元素的问题!!!! 这题让我想到了最长递增子序列,只是名字有点像。子序列和子数组还不一样一个连续…

MongoDB分片部署(windows)

OS:win10 MongoDB:4.4.24 分片架构 从图中可以看出,分片集群中主要由三个部分组成,即分片服务器( Shard )、路由服务器 ( Mongos )以及配置服务器( Config Server &am…

Python 物联网入门指南(四)

原文:zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者:飞龙 协议:CC BY-NC-SA 4.0 第九章:构建光学字符识别的神经网络模块 本章介绍以下主题: 使用光学字符识别(OCR)系统 使…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU使用containerd部署K8S 1.26.15集群(一主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大概时间有10s多,这个时间太长了,尝试了各种办法,都解决不了,后面尝试安装了了1.26.…

中国DIVI版,wordpress DIVI网站主题在国内的替代方案。

最受欢迎的WordPress主题之一是Divi。我们创建了这个全面的Divi主题评论,以帮助您更好地了解其优点和潜在缺点。 Divi主题是什么? Divi是一个流行的WordPress主题,提供了一个网站建设平台。它有一个可视化编辑器选项,为新手和专业…

市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用,但哪些软件是最好用的?哪些软件受到开发者的喜爱?本文将根据一次在CSDN上的投票结果,为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果,希望能对大家的选择…

如何在CentOS安装Firefox并结合内网穿透工具实现公网访问本地火狐浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

软件测试的4个职业阶段,你在哪个阶段?

最近一直在忙的项目刚刚上线交付完成,让自己有了些许喘息的时间。人总是这样,在忙碌的时候,能心无旁骛关注并做好一件事,已是万幸。而全力而为之后的闲暇总是如此的珍贵,在这难得的空隙中,不自觉的开始对自…

10、【代理模式】通过引入一个代理对象来控制对原始对象的访问的方式。

你好,我是程序员雪球。 今天我们了解代理模式的原理、静态代理和动态代理的区别、Spring AOP 和动态代理的关系、代理模式的使用场景,以及用 Java 实现一个动态代理示例 一、代理模式的原理 代理模式是一种设计模式,它提供了一种通过引入一个…

最新AI一键生成漫画推文爆款视频,10分钟1条原创视频,1条视频最高2000+?

最近,有些朋友一直在询问关于AI漫画推文的方法,虽然我原本对此并不特别感兴趣,但在他们的多次催促下… 今天,我将详细解析这个玩法!、 项目 地 址 : laoa1.cn/1671.html 关于项目的收益,我…

麒麟信安LTF框架上线openEuler社区

麒麟信安LTF框架介绍 LTF(Linux Test Framework)是麒麟信安自动化组开发的一款面向Linux操作系统测试的自动化测试框架,目前已在openEuler社区开源。LTF工具积极投入国内各评测项目和日常版本测试任务中,汲取了在Linux自动化测试…

一篇文章带你了解Python常用自动化测试框架——Pytest!

在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架Pytest,它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest: Pytest基本介…

Unity之Unity面试题(四)

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之Unity面试题(四) TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取…

多轴机械臂/正逆解/轨迹规划/机器人运动学/Matlab/DH法 学习记录02——机械臂几何法与DH表示法

系列文章目录 本科毕设正在做多轴机械臂相关的内容,这里是一个学习机械臂运动学课程的相关记录。 如有任何问题,可发邮件至layraliufoxmail.com问询。 1. 数学基础 2. 机械臂几何法与DH表示法 文章目录 系列文章目录一、手臂几何法1.机械手臂2.机械手臂…

盘点数据领域1亿美金以上的收购记录

最近,Salesforce对数据复制巨头Informatica发出了收购邀约,金额预计110亿美金。 Salesforce前脚刚157亿美金买入Tableau,这下又想把Informatic买下,太豪横了。我们一起盘点数据领域还有哪些土豪收购记录: 数据领域&…