JAVA_类和对象(1)

认识面向对象

 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.hqwc.cn/news/625634.html

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

相关文章

【项目实战】记录一次PG数据库迁移至GaussDB测试(上)

目录 一、说明 1.1、参考文档 1.2、注意事项 1.3、环境基本情况 二、GaussDB新环境安装 2.1 配置操作环境变量 2.1.1 关闭防火墙 步骤1 执行以下命令,检查防火墙是否关闭。 步骤2 执行以下命令,关闭防火墙并禁止开机启动。 步骤3 修改/etc/sel…

Adobe AE(After Effects)2024下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

记录Python链接mysql数据的增删改查方法

一、添加方法 db pymysql.connect(hostlocalhost,userroot,password123456,dbpython) cursor db.cursor() sql """insert into EMPLOYEEVALUES(3,张,天爱,35,F,8000) """ try:cursor.execute(sql)db.commit() #提交后,数据才会变 …

Chrome将网页保存为PDF的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

欧盟CE认证GPSD指令是什么?符合GPSD指令的产品都有哪些呢?

GPSD指General Product Safety Directive,译为通用产品安全指令。 2006年7月22日欧盟委员会发布第2001/95/EC标准法规GPSD指令的标准清单,由欧洲标准化组织按欧盟委员会指示制定的。 GPSD对产品安全的概念进行了定义,并规定了产品的通用安全要求、符合…

错误分析 (Machine Learning研习十九)

错误分析 您将探索数据准备选项,尝试多个模型,筛选出最佳模型,使用 Grid SearchCV微调其超参数,并尽可能实现自动化。在此,我们假设您已经找到了一个有前途的模型,并希望找到改进它的方法。其中一种方法就…

使用VLC无法播放安防监控EasyCVR平台分发出的FLV视频流,是什么原因?

安防视频汇聚平台EasyCVR不仅可支持的接入协议非常多(包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等)&#xff0…

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法。以下是一般而言的目标检测实现步骤: 1、数据收集与标注:首先需要收集包含目标物体的大量图像数据,并对这些图像进行标注,标注出目标物体的位置和类别信息。这些…

Netty学习——实战篇4 Netty开发Http服务实战、ByteBuf使用、开发群聊系统

1 Netty开发Http服务实战 (1)Netty服务器监听8000端口,浏览器发出请求“http://localhost:8000” (2)服务器可以回复消息给客户端,“你好,我是服务器”,并对特定请求资源进行过滤。 HttpServer…

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)

Docker之自定义镜像上传至阿里云

一、Alpine介绍 Alpine Linux是一个轻量级的Linux发行版,专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库,使得它具有出色的性能和资源利用率。 Alpine Linux的主要特点包括: 小巧轻量:Alpine Linux的安装…

内网隧道技术总结

隧道技术解决的是网络通信问题,因为在内网环境下,我们不同的内网主机管理员会进行不同的网络配置,我们就需要使用不同的方式去控制我们的内网主机。隧道技术是一个后渗透的过程,是可以是我们已经取得了一定的权限,在这…