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.mfbz.cn/a/548822.html

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

相关文章

OpenStack镜像管理与制作

一、OpenStack镜像服务 1、什么是镜像 镜像通常是指一系列文件或一个磁盘驱动器的精确副本。虚拟机所使用的虚拟磁盘,实际上是一种特殊格式的镜像文件。云环境下尤其需要镜像。镜像就是一个模板,类似于VMware的虚拟机模板,其预先安装基本的…

格雷希尔G80L-T系列大口径快速连接器,在汽车膨胀水箱的气密性测试密封方案

副水箱也有人称作膨胀水箱,是汽车散热系统的一个重要组成部分,当水箱里面的温度过高的时候就会产生一定的压力,而副水箱可以根据热胀冷缩来帮助水箱和发动机排出去多余的水,起到一个调节的作用,副水箱由PP/PE塑料注塑而…

单向链表的实现

前言:继顺序表后的又一个线性结构——链表,这里将单向链表的实现。 目录 链表简介: 多文件实现: SList.h: SList.c实现函数的详解: 因为插入数据需要创建节点,很频繁,所以直接将创建新节点分…

《中医病证分类与代码》-中医疾病分类数据库

《中医病症分类与代码》由国家中医药管理局2020年底修订,目的是为中医疾病及证候的分类提供统一的规范。规定2021年起,各中医机构的临床科室及基层中医药的医师都应按照最新修订的《中医病症分类与代码》规范来填报病案及病历。 中医病证分类与代码数据库…

C++STL详解(一)— string类

string 类对象的常见容量操作 函数名称 功能 size 返回字符串有效字符长度length返回字符串有效字符长度capacity返回空间总大小clear清空有效字符empty检测字符串是否为空串,是返回true,否则返回falsereserve对容量进行改变resize扩容初始化 size和length 文档解…

Linux系统(centos,redhat,龙芯,麒麟等)忘记密码,怎么重置密码

Linux系统(centos,redhat,龙芯,麒麟等)忘记密码,怎么重置密码,怎么设置新的密码 今天在操作服务器时,DBA忘记了人大金仓数据库的kingbase密码,他的密码试了好多遍,都不行。最后只能…

sublime text中文---功能强大、操作便捷的代码编辑神器

Sublime Text是一款极受欢迎的代码编辑器,以其出色的性能、丰富的功能和优雅的用户界面赢得了广大开发者的青睐。它支持多种编程语言,包括HTML、CSS、JavaScript、Python等,让开发者能够轻松编辑和调试各种代码。Sublime Text拥有强大的自定义…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机),一根双绞线缆,一台PC,一条Console 线缆。 2.需求描述 如图6.14 所示,将两台路由器的F0/0 接口相连,通过一台PC 连接设备的 Console 端口并配置P地址(192.1…

SpringBoot是如何实现main方法启动Web项目的?

一、问题解析 在Spring Boot中,通过SpringApplication类的静态方法run来启动Web项目。当我们在main方法中调用run方法时,Spring Boot使用一个内嵌的Tomcat服务器,并将其配置为处理Web请求。 当应用程序启动时,Spring Boot会自动扫…

C#学习笔记11:winform上位机与西门子PLC网口通信_下篇

今日终于到了winform上位机与西门子PLC网口通信的系列收为阶段了,一直没一口气更新完,手头上也没有可以测试用的PLC设备,虚拟仿真用到的博图软件也不想下载(会让我电脑变卡)。 于是等了些日子购买西门子PLC&#xff0…

JIT在汽车行业中的革命性应用:颠覆传统制造模式,引领智能制造新时代

随着科技的飞速发展和市场竞争的日益激烈,汽车行业正面临着前所未有的变革。其中,准时制生产(Just-In-Time,简称JIT)作为一种先进的生产管理方式,已经在汽车行业中得到了广泛应用,成为推动汽车产…

密码学 | 椭圆曲线 ECC 密码学入门(三)

目录 7 这一切意味着什么? 8 椭圆曲线密码学的应用 9 椭圆曲线密码学的缺点 10 展望未来 ⚠️ 原文地址:A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面:本文属搬运博客,自己留…

论文略读:Window Attention is Bugged: How not to Interpolate Position Embeddings

iclr 2024 reviewer 打分 6666 窗口注意力、位置嵌入以及高分辨率微调是现代Transformer X CV 时代的核心概念。论文发现,将这些几乎无处不在的组件简单地结合在一起,可能会对性能产生不利影响问题很简单:在使用窗口注意力时对位置嵌入进行插…

DC-1渗透测试复现

DC-1渗透测试复现 目的: 获取最高权限以及5个flag 过程: 信息打点-cms框架漏洞利用-数据库-登入admin-提权 环境: 攻击机:kali(192.168.85.136) 靶机:DC_1(192.168.85.131) 复现: 一.信息收集 扫…

IDEA 本地库引入了依赖但编译时找不到

在使用 IDEA 开发 Maven 项目的过程中,有时会遇到本地库引入了依赖,但编译时报找不到这个依赖,可以使用命令处理。 打开 Terminal。 执行清理命令。 mvn clean install -Dmaven.test.skiptrue执行更新命令。 mvn -U idea:idea

怎么清除3D模型杂质?---模大狮模型网

在进行3D建模过程中,模型可能会受到各种杂质的影响,这些杂质可能来自于模型本身的结构问题、导入导出过程中的错误、或者是不当的编辑操作所留下的痕迹。清除这些杂质是保证模型质量和渲染效果的关键步骤之一。本文将介绍几种常见的清除3D模型杂质的方法…

【C++】适配器· 优先级队列 仿函数 反向迭代器

目录 适配器:适配器的应用:1. 优先级队列:仿函数:更深入的了解仿函数:一个关于不容易被注意的知识点: 2. 反向迭代器:list && vector: 适配器: 我们先来谈来一下…

最新IntelliJ IDEA 2024.1 安装和快速配置教程

IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版 文章目录 IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版前言 第一步: IntelliJ IDEA 2024.1安装教程第 0 步&…

activiti初次学习

源代码地址:https://gitee.com/ZSXYX/activiti.git​ 1、安装插件 首先安装下图所示activiti,不确定是哪个插件有用的,有时间可排除下 在resources下创建一个文件夹:processes,右键,新建 生成: 选中act.bpmn20.xm…

Android 使用ping命令判断当前网络状态

一. 介绍 ping命令是用来测试和诊断网络连接问题的基本命令,当然我们的终端设备(手机/平板/车机)都可以用这个命令来判断当前网络是否有流量的状态,本篇文章主要介绍Linux的ping命令,因为Android系统也是使用了Linux内…