初识Java(三)

一、类和对象

Java语言是面向对象语言,通过对象与对象之间的交互,完成一个一个的任务。

例:要盖出一间房子,要有一张图纸。

类就好比是那张图纸,对象就好比是那一间房子。

房子是根据图纸盖出来的,对象是根据类创建出来的。

  • 一个Java文件一般只定义一个类。
  • public修饰的类要与文件名相同。
  • 改变类名,通过设置去改,在文件中手写去改,只能改文件里面的,文件名不会改。

二、this引用

1、this,代表当前对象的引用

        由于this关键字只存在于成员方法当中,所以当前对象指的是调用此成员方法的对象。所有对此方法中成员变量的操作,都是通过this完成的,只不过用户看不见,是编译器自动进行的。下面两个问题有利于对这句话的理解。

  • 写出一个类,类中有成员变量和方法,实例化出了两个对象date和date2,去调用成员方法完成对象的赋值,那么此时,成员方法只有一个阿,但是对象有两个阿,它是怎么知道是对哪个对象赋值的呢?
public class Date {private int year;private int month;private int day;public void setDate(int y,int m,int d){year = y;month = m;day = d;}public static void main(String[] args) {Date date = new Date();date.setDate(2001,5,7);Date date1 = new Date();date1.setDate(2001,5,13);}
}

 因为成员方法有一个隐藏的参数,这个参数是this,它是一个引用变量,存放的是对象的地址,简称this引用,当对象去调用成员方法时,对象的地址会传给this,那么在成员方法内,它就会知道是给哪个对象赋值了。

public class Date {private int year;private int month;private int day;public void setDate(Date this,int y,int m,int d){this.year = y;this.month = m;this.day = d;//在成员方法中,给成员变量加上this}public static void main(String[] args) {Date date = new Date();date.setDate(2001,5,7);Date date1 = new Date();date1.setDate(2001,5,13);}
}
  • 当把值传给成员方法,形参接收后,发现形参与成员变量的名字相同时,那成员方法给谁赋值呢?是让形参给对象的变量赋值,还是让形参自己给自己赋值呢?
public class Date {private int year;private int month;private int day;public void setDate(int year,int month,int day){year = year;month = month;day = day;}public static void main(String[] args) {Date date = new Date();date.setDate(2001,5,7);Date date1 = new Date();date1.setDate(2001,5,13);}
}

      根据局部变量优先原则,形参是局部变量,所以是优先给形参赋值。为了不让它识别为形参,在方法中的变量前加上this,代表是对象中的变量,也就是成员变量。

public class Date {private int year;private int month;private int day;public void setDate(int year,int month,int day){this.year = year;this.month = month;this.day = day;}public static void main(String[] args) {Date date = new Date();date.setDate(2001,5,7);Date date1 = new Date();date1.setDate(2001,5,13);}
}

2、this引用的特点

  1. 只存在于成员方法当中。
  2. 只能引用当前对象。
  3. 哪个对象调用,this的类型就是哪个对象的类型。
  4. this在成员方法中是隐藏的参数。

 三、构造方法

此方法是对对象的成员变量赋值的,当使用关键字new一个对象时,会自动调用构造方法。

Date d = new Date(2021,6,9);
  • 1、构造方法的组成是 public + 类名。
  • 2、一个类的构造方法可以有多个,构成了方法的重载。
  • 3、“救急不救穷原则”,若自己不写构造方法,编译器会默认提供一个无参构造,若写出来构造方法,那编译器不再提供。比如自己写了一个有参构造,若创建对象时,并没有传递参数,需要无参构造,编译器不会提供的,需要自己再写出一个无参构造。
  • 4、可以在一个无参构造中用this去调用一个有参构造,传递参数。
public Date(){this(1900,1,1); //必须是第一条语句。
}
public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;
}

四、封装

面向对象的语言的三大特性:封装、继承、多态。

在类和对象阶段,主要是封装特性。

  • 1、什么是封装?

例:对于一台电脑来说,我们并不关心它内部的细节,比如里面线路怎么分布的,都有什么零件。我们只需要能用这台电脑的功能就可以,可以上网,可以用它的插口等。

对于类来说,也是这样,我们也并不关心它内部的实现细节,将成员变量隐藏起来,通过公共的方法操作成员变量,完成于对象之间的交互,这就是封装。

  • 2、用什么完成封装?

使用访问限定符 :private,protected,public。三者均不加则为默认访问。

  • 3、包

Java中的包是为了将类进行分类,方便进行管理。

使用import语句导入包

例:导入util包下的Arrays类

import java.util.Arrays;

导入util下的所有类

import java.util.*;
  • 4、static关键字

1.修饰成员变量

创建好几个对象之后,发现某一个成员变量的值是相同的,比如有四个对象,这四个对象是同一个班级的,且对象中有一个成员变量是班级,那么可以把班级这个成员变量用static修饰,变为静态成员变量。

  • 此时的成员变量变为静态成员变量,属于类的变量。
  • 随着类的创建而创建,随着类的销毁而销毁。
  • 通过类名.静态成员变量访问。

2.修饰成员方法

  • 在静态成员方法中没有this这个隐藏的参数,所以不能在方法中使用this,因为this依赖对象,而静态成员方法不属于对象,属于类。
  • 所以不能在方法中调用非静态成员方法。
  • 不能在方法中调用非静态成员变量。

3.静态成员变量的初始化

不会在构造方法中初始化,因为构造方法依赖对象,而静态成员变量不属于对象。

分为就地初始化和静态代码块初始化。

  • 就地初始化

在定义时直接给出初始值。

  • 静态代码块初始化
static {
classRoom = "bit306";
}

静态代码块不管生成多少个对象,只执行一次 。

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

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

相关文章

【实在RPA案例集】实在智能助力中国烟草11省40余家多场景自动化!

近年来,为深入贯彻行业数字化转型战略部署和发展新质生产力体制机制,诸多省市烟草公司及中烟公司大力推进烟草行业数字化转型,然而烟草行业在数字化转型过程中始终存在一个核心痛点,即数据整合的复杂性、系统间的兼容性问题&#…

LabVIEW汽车动态信号模拟系统

随着汽车工业的快速发展,对汽车电子控制单元(ECU)的测试与仿真需求日益增加。开发了一种基于LabVIEW软件开发的汽车动态信号模拟系统,该系统能有效模拟ECU在实车环境下的工作状态,为ECU的开发和测试提供了一个高效、经…

函数式编程范式

文章目录 函数式编程范式不可变性(Immutable)纯函数(Pure Functions)函数作为一等公民(First-Class Functions)高阶函数(Higher-Order Functions函数组合(Function Composition&…

bug bug bug

importError: DLL load failed while importing _multiarray_umath: 找不到指定的模块。 Traceback (most recent call last): File "D:\yolov8_about\ultralytics-main3\trainCPU.py", line 4, in <module> from ultralytics import YOLO File "…

python项目通过docker部署到Linux系统并实现远程访问

背景需求&#xff1a;在Windows系统编写了简单的python代码&#xff0c;希望能通过docker打包到Linux Ubuntu系统中&#xff0c;并运行起来&#xff0c;并且希望在本地Windows系统中能通过postman访问。 目录 一、原本的python代码 二、创建一个简单的Flask应用程序 三、创…

基于深度学习的内容推荐

基于深度学习的内容推荐系统通过分析用户行为、内容特征以及用户与内容之间的交互数据&#xff0c;自动向用户推荐他们可能感兴趣的内容。这类系统在新闻、视频、音乐、社交媒体等平台中广泛应用。以下是对这一领域的系统介绍&#xff1a; 1. 任务和目标 内容推荐系统的主要任…

js求和reduce使用方法

1.使用循环结构&#xff08;如for循环&#xff09;进行累加 let sum 0; for (let i 1; i < 100; i) {sum i; } console.log(sum); // 输出5050 2.使用Array.prototype.reduce方法进行数组元素求和&#xff1a; const numbers [1, 2, 3, 4, 5]; const sum numbers.re…

MySQL 查询 limit 100000000, 10 和 limit 10 速度一样快吗?

MySQL 查询 limit 100000000, 10 和 limit 10 速度一样快吗&#xff1f; MySQL内部分为server层和存储引擎层。一般情况下存储引擎都用innodb。 server层有很多模块&#xff0c;其中需要关注的是执行器是用于跟存储引擎打交道的组件。 执行器可以通过调用存储引擎提供的接口&…

整合StarRocks更新表全部知识点

总结StarRocks更新表的全部内容的集合&#xff08;V3.2版本&#xff09; 一、基本功能 聚合函数replace的聚合表主键被主键表替代采用Merge-On-Read的策略&#xff0c;读取时需要在线Merge多个版本的数据文件&#xff0c;谓词和索引无法下推至底层数据&#xff0c;会严重影响…

LeetCode:对称的二叉树(C语言)

1、问题概述&#xff1a;给一个二叉树&#xff0c;看是否按轴对称 2、示例 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 3、分析 &#xff08;1&a…

解决 Android 应用安装错误:INSTALL_FAILED_BAD_PERMISSION_GROUP

解决 Android 应用安装错误&#xff1a;INSTALL_FAILED_BAD_PERMISSION_GROUP 在开发 Android 应用时&#xff0c;我们有时会遇到安装错误。这篇文章将讨论一种常见的错误&#xff1a;INSTALL_FAILED_BAD_PERMISSION_GROUP&#xff0c;并介绍解决方法。 问题描述 在尝试安装…

Go实用技巧

Golang实用技巧 Golang实用技巧 Context 1. 为了gorouines更可靠&#xff0c;避免实用context.Background()2. 不幸得是&#xff0c;context.Value 不是我们的朋友3. 使用context.WithoutCancel 保持 context 活跃 Context 1. 为了gorouines更可靠&#xff0c;避免实用con…

教学用MQTT工具的思考

前言 我在《智能物联网应用设计》课程中有个实验就是学习MQTT的使用&#xff0c;目前使用的是以下几个工具&#xff1a; 客户端使用MQTTX本地服务器使用的是mosquitto 云端服务器采用的巴法云协议分析软件采用的是Wireshark 这里Wireshark基本没有啥可以替代的&#xff0c;而…

Vue3 study

Vue3 工程 创建 还是能像 vue2 一样通过 vue-cli 创建&#xff0c;即 vue create projectName 但是官方更推荐 vite 创建&#xff0c;即 npm create vuelatest&#xff0c;然后从项目名开始配置 总结&#xff1a;入口在 index.html&#xff0c;它会引入 main.ts&#xff0c;…

Win11 操作(四)g502鼠标连接电脑不亮灯无反应

罗技鼠标连接电脑不亮灯无反应 前言 罗技技术&#x1f4a9;中&#x1f4a9;&#xff0c;贴吧技术神中神&#xff01; 最近买了一个g502&#xff0c;结果买回来直接插上电脑连灯都不亮&#xff0c;问了一下客服。客服简单的让我换接口&#xff0c;又是下载ghub之类的&#xf…

Go 1.22 remote error: tls: handshake failure

Golang 1.22 remote error: tls: handshake failure 1.22之前运行下面代码是没有错误 package mainimport ("crypto/tls""fmt""net/http" )func main() {http.DefaultTransport.(*http.Transport).TLSClientConfig &tls.Config{InsecureS…

从零开始!JupyterNotebook的安装教程

安装 Anaconda 1、下载 Anaconda&#xff1a; 访问 Anaconda 官方网站 (https://www.anaconda.com/products/distribution/) 下载适合您操作系统的 Anaconda 发行版。 2、安装 Anaconda&#xff1a; Windows&#xff1a;运行下载的安装程序&#xff0c;选择“Just Me”…

Leetcode—297. 二叉树的序列化与反序列化【困难】

2024每日刷题&#xff08;148&#xff09; Leetcode—297. 二叉树的序列化与反序列化 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(…

Esxi 上的 CentOS 7.6 系统中搭建本地 Yum 源

1. 挂载 CentOS 安装盘 在 ESXi 管理界面中&#xff0c;将 CentOS 安装 ISO 文件挂载到虚拟机。 2. 挂载光盘镜像 在虚拟机中执行以下命令&#xff0c;将安装盘挂载到 /mnt/cdrom&#xff1a; mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom3. 禁用所有默认的 YUM 源 进入…

4. kubernetes资源——deployment无状态负载

kubernetes资源——deployment无状态负载 一、deployment无状态负载1、deployment无状态负载 二、创建deployment1、创建deployment2、验证副本维护 三、deployment滚动更新1、创建pod2、测试滚动更新流程2.1、修改镜像版本、或者副本数2.2、执行更新2.3、查看更新过程2.4、查看…