零基础Java第十一期:类和对象(二)
目录
一、对象的构造及初始化
1.1. 就地初始化
1.2. 默认初始化
1.3. 构造方法
二、封装
2.1. 封装的概念
2.2. 访问限定符
2.3. 封装扩展之包
三、static成员
3.1. 再谈学生类
3.2. static修饰成员变量
一、对象的构造及初始化
1.1. 就地初始化
在声明成员变量时,就直接给出了初始值,如下面的代码:
public int year=2005;
public int month=3;
public int day=13;
1.2. 默认初始化
当我们定义成员变量时,不会给成员变量初始化,那么成员变量就会有一个默认初始化的值,如year=0,month=0,day=0。
1.3. 构造方法
接上一期,什么是构造方法? 方法名和类名一样,没有返回值(如下面的代码)。构造方法怎么被调用呢?在Date date=new Date()时被调用。在创建对象时,由编译器自动调用一个不带参数的构造方法,只不过构造方法什么都不做,并且 在整个对象的生命周期内只调用一次。一旦用户定义,编译器则不再生成。此外,还可以提供带多个参数的构造方法(需要结合上一期的代码才能看懂)。
public Date(){}
public Date(){this.year=year;this.month=month;this.day=day;
}public static void main(String[] args){Date date=new Date(2024,10,26);date.PrintDate();
通过上面的代码,我们可以看到,构造方法可以初始化我们的成员变量。
二、封装
2.1. 封装的概念
不封装可能会很难堪。数据时公开的,会被全世界的人看到,甚至可以被改动。我们如何将程序的从不良数据改成可以保护数据且让你还能修改数据的方式很简单呢?就得将数据隐藏。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。
我们可以使用一些访问限定符来进行封装,比如private。
private String title;
private String genre;
private int rating;
那既然我们进行了限定访问,还有方法对title、genre、rating进行访问呢?代码如下:
public void setTitle(String title){this.tiltle=title;
}public void setGenre(String genre){this.genre=genre;
}
one.Settitle();
one.setGenre();
现在成员变更少,那如果成员变量多呢?我们可以用编译器自己生成,如下图所示:右键点击generate,在点击Getter and Setter,就会生成如下代码
private String title;public String getGenre() {return genre;}public void setGenre(String genre) {this.genre = genre;}private String genre;public Movie(String title) {this.title = title;}public int getRating() {return rating;}private int rating;
我们可以选择getter或setter或getter and setter
2.2. 访问限定符
Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认 知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符: private、default、protected、public。
2.3. 封装扩展之包
(1)包的概念
在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件 下,也可以对某个文件夹下的音乐进行更详细的分类。所以包的出现就是为了更好地管理java文件。
比如我们要进行输入操作时,使用Scanner,就需要导入java.util.Scanner包,点号前面是名,后面是类名。我们可以在左侧去寻找这个包,因为博主的电脑里面装了JDK17,所以就会显示出:
在我们的C盘里面这个路径下,可以找到所有java的包,与IDEA上面的一致。
(2)导入包中的类
import java.sql.*;//并不会把所有类进行加载,用谁取谁,但不是一劳永逸
package java.util;//声明一个包。当前类的第一行,声明一下该类在那个包
这段代码会报错,为什么呢?第一个包有星号,第二个包有Date,下面的date会懵了,不知道该指向哪个了。 此时就和定义顺序有关
import java.util.*;
import java.sql.Date;Date date = new Date;
这样就不会因为包的顺序而出错了:
java.util.Date date = new java.util.Date();java.sql.Date date1 = new java.sql.Date(2015,5,10);
(3)自定义的包
基本规则:在文件的最上方加上一个 package 语句指定该代码在哪个包中;包名要和代码路径相匹配;如果一个类没有 package 语句, 则该类被放到一个默认包中。
操作步骤: 右击scr,点击new,再点package,
(4)包的访问控制权限
package com.HeBei.www;public class Dog {int age;String breed;String name;public void Bark(){System.out.println(name+"汪汪叫");}
}
package com.HeBei.www;public class Test {public static void main(String[] args) {Dog dog=new Dog();System.out.println(dog.name);}
}
package com.university.www;import com.HeBei.www.Dog;public class Main {public static void main(String[] args) {Dog dog =new Dog();dog.name}
}
我们来看第一段代码,在com.HeBei.www这个包里面,第二段代码与第一段代码同包不同类,可以正常访问Dog的成员变量;但第三段代码与第一段代码不同包,就不能访问。
(5)常见的包
下面给大家看一下比较常见的包:
1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。 2. java.lang.reflect:java 反射编程包; 3. java.net:进行网络编程开发包。 4. java.sql:进行数据库开发的支持包。 5. java.util:是java提供的工具程序包。(集合类等) 非常重要 6. java.io:I/O编程开发包。
三、static成员
3.1. 再谈学生类
public class Student {int age;String name;String Class;public Student(int age,String name,String Class){this.age =age;this.name =name;this.Class=Class;}public static void doClass(){System.out.println();}
}
public class Test {public static void main(String[] args) {Student stu1=new Student(17,"Alan","101");Student stu2=new Student(18,"Henry","101");Student stu3=new Student(16,"Paul","101");}
}
三个stu都隶属于同一个Class,且都放在同一对象里,此时就需要在栈上开辟三块内存空间。那如果我们把Class也包含一份,就需要定义一个static,就不会看到属性里有Class,同时这个成员变量也不再属于对象了,而这个Class存储在了方法区。
System.out.println(stu1.Class);
System.out.println(stu2.Class);
System.out.println(stu3.Class);
这样我们就把Class放在同一个静态成员变量或者类变量里面,但这种访问不合理。
3.2. static修饰成员变量
static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。
静态成员变量属性: 1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中 2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问 3. 类变量存储在方法区当中 4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
相关文章:
零基础Java第十一期:类和对象(二)
目录 一、对象的构造及初始化 1.1. 就地初始化 1.2. 默认初始化 1.3. 构造方法 二、封装 2.1. 封装的概念 2.2. 访问限定符 2.3. 封装扩展之包 三、static成员 3.1. 再谈学生类 3.2. static修饰成员变量 一、对象的构造及初始化 1.1. 就地初始化 在声明成员变…...
NumPy包(下) python笔记扩展
9.迭代数组 nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。 控制参数 nditer 提供了多种控制参数,用于控制迭代的行为。 1.order 参数 order 参数…...
极狐GitLab 17.5 发布 20+ 与 DevSecOps 相关的功能【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
Oracle 第1章:Oracle数据库概述
在讨论Oracle数据库的入门与管理时,我们可以从以下几个方面来展开第一章的内容:“Oracle数据库概述”,包括数据库的历史与发展,Oracle数据库的特点与优势。 数据库的历史与发展 数据库技术的发展可以追溯到上世纪50年代…...
7、Nodes.js包管理工具
四、包管理工具 4.1 npm(Node Package Manager) Node.js官方内置的包管理工具。 命令行下打以下命令: npm -v如果返回版本号,则说明npm可以正常使用 4.1.1npm初始化 #在包所在目录下执行以下命令 npm init #正常初始化,手动…...
网络地址转换——NAT技术详解
网络地址转换——NAT技术详解 一、引言 随着互联网的飞速发展,IP地址资源日益紧张。为了解决IP地址资源短缺的问题,NAT(Network Address Translation,网络地址转换)技术应运而生。NAT技术允许一个私有IP地址的网络通…...
问:数据库存储过程优化实践~
存储过程优化是提高数据库性能的关键环节。通过精炼SQL语句、合理利用数据库特性、优化事务管理和错误处理,可以显著提升存储过程的执行效率和稳定性。以下是对存储过程优化实践点的阐述,结合具体示例,帮助大家更好地理解和实施这些优化策略。…...
C++ vector的使用(一)
vector vector类似于数组 遍历 这里的遍历跟string那里的遍历是一样的 1.auto(范围for) 2.迭代器遍历 3.operator void vector_test1() {vector<int> v;vector<int> v1(10, 1);//初始化10个都是1的变量vector<int> v3(v1.begin(), --…...
深入浅出:ProcessPoolExecutor 处理异步生成器函数
深入浅出:ProcessPoolExecutor 处理异步生成器函数 什么是 ProcessPoolExecutor?为什么要使用 ProcessPoolExecutor 处理异步生成器函数?ProcessPoolExecutor 处理异步生成器函数的基本用法1. 导入模块2. 定义异步生成器函数3. 定义处理函数4…...
elementUI表达自定义校验,校验在v-for中
注意:本帖为公开技术贴,不得用做任何商业用途 <el-form :inline"true" :rules"rules" :model"formData" ref"formRef" class"mt-[20px]"><el-form-item label"选择区域" prop&qu…...
Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范
1. 在 CentOS 上安装和配置 Elasticsearch 在 CentOS 系统下,安装 Elasticsearch 主要分为以下步骤: 1.1 准备工作 在开始安装之前,确保你的系统满足以下基本条件: CentOS 版本要求:推荐使用 CentOS 7 及以上版本。…...
短信验证码发送实现(详细教程)
短信验证码 接口防刷强检验以及缓存验证码阿里云短信服务操作步骤验证码发送实现 好久没发文啦!最近也是在工作中遇到我自认为需要记录笔记的需求,本人只求日后回顾有迹可寻,不喜勿喷! 废话不多说,直接上代码ÿ…...
P450催化的联芳基偶联反应-文献精读72
Chemoenzymatic Synthesis of Fluorinated Mycocyclosin Enabled by the Engineered Cytochrome P450-Catalyzed Biaryl Coupling Reaction 经工程化的细胞色素P450催化的联芳基偶联反应实现氟代麦环素的化学酶促合成 摘要 将氟原子引入天然产物有望生成具有改良或新颖药理特…...
在不支持AVX的linux上使用PaddleOCR
背景 公司的虚拟机CPU居然不支持avx, 默认的paddlepaddle的cpu版本又需要有支持avx才行,还想用PaddleOCR有啥办法呢? 是否支持avx lscpu | grep avx 支持avx的话,会显示相关信息 如果不支持的话,python运行时导入paddle会报错 怎么办呢 方案一 找公司it,看看虚拟机为什么…...
Python数据分析——Numpy
纯个人python的一个小回忆笔记,当时假期花两天学的python,确实时隔几个月快忘光了,为了应付作业才回忆起来,不涉及太多基础,适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频: 一…...
JMeter快速入门示例
JMeter是一款开源的性能测试工具,常用于对Web服务和接口进行性能测试。 下载安装 官方下载网址: https://jmeter.apache.org/download_jmeter.cgi也可以到如下地址下载:https://download.csdn.net/download/oscar999/89910834 这里下载Wi…...
【333基于Java Web的考编论坛网站的设计与实现
毕 业 设 计(论 文) 考编论坛网站设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计…...
计算机网络关键名词中英对照
物理层 IMP - Interface Message Processor - 接口信息处理机 MODEM - Modulator-Demodulator - 调制解调器 LAN - Local Area Network - 局域网 FDM - Frequency Division Multiplexing - 频分复用 TDM - Time Division Multiplexing - 时分复用 STDM - Statistical Time…...
二叉树的学习
除了根节点外的其他节点只有一个直接前驱,有多个直接前驱的逻辑结构叫做图 任何一个树都可以看成是一个根节点和若干个不相交的子树构成的; 构建思维导图时使用树形结构 题目中给出AB是堂兄弟节点说明他们处在同一层 描述两节点之间的路径是从上到下的,同层没有路径,一条边记录…...
免费开源的医疗信息提取系统:提升超声波影像的诊断价值
一、系统概述 思通数科推出的医疗信息精准抽取系统,致力于解决当前医疗行业面临的信息碎片化和数据管理难题。传统医疗过程中,超声波影像数据与诊断报告之间的脱节,往往导致信息无法有效整合,影响医生的诊断效率与准确性。我们的…...
Bash 中的 ${} 和 $() 有什么区别 ?
Bash (Bourne-Again SHell) 是一种流行的 Unix SHell,用于编写脚本。如果您使用 Bash 脚本,那么了解不同的语法元素对于提高脚本的效率和避免错误是很重要的。 在本文中,我们将解释 Bash 中 ${} 和 $() 语法之间的区别,并向您展示…...
SPSS、R语言因子分析FA、主成分分析PCA对居民消费结构数据可视化分析
全文链接:https://tecdat.cn/?p37952 分析师:Ting Mei 在经济发展的大背景下,居民消费结构至关重要。本文围绕居民消费结构展开深入研究,运用 SPSS25.0 和 R 语言,以因子分析法和主成分分析法对东北三省居民消费价格指…...
高级SQL技巧掌握
高级SQL技巧掌握 在数据驱动的时代,掌握SQL不仅仅是为了解决具体问题,它更像是一把钥匙,帮助你打开数据分析的大门。你准备好提升你的SQL技能了吗?在这篇文章中,我们将一起探索十个必备的高级SQL查询技巧,这些技巧将帮助你更有效率地进行数据处理与分析。 1. 常见表表达…...
数组实例之三子棋的实现(C语言)
目录 前言 一、三子棋实现的逻辑 二、三子棋的实现 2.1文件的创建添加 2.2 test文件基本逻辑 2.2.1菜单的实现 2.2.2菜单的选择 2.2.3game函数棋盘的实现 2.3game.c文件的编写 2.3.1初始化函数的模块 2.3.2棋盘打印的模块 2.3.3实现棋盘界面的打印 2.3.4实现玩家下…...
【Linux驱动开发】设备树节点驱动开发入门
【Linux驱动开发】设备树节点驱动开发入门 文章目录 设备树文件设备树文件驱动开发附录:嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射,虚拟内存和硬件内存地址字符驱动旧字符驱动新字…...
C++——string的模拟实现(下)
目录 成员函数 3.4 修改操作 (3)insert()函数 (4)pop_back()函数 (5)erase()函数 (6)swap()函数 3.5 查找操作 (1)find()函数 (2)substr()函数 3.6 重载函数 (1)operator赋值函数 (2)其他比较函数 (3)流插入和流提取 完整代码 结束语 第一篇链接:C——…...
面试 Java 基础八股文十问十答第二十九期
面试 Java 基础八股文十问十答第二十九期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)类加载过程 类加载…...
454.四数相加||
题目: 454. 四数相加 II - 力扣(LeetCode) 思路: 考虑到时间复杂度问题,本题最重要的是要将四个数组划分成两个部分,每个部分(n^2)的时间复杂度,选取数据结构时,考虑到既要存储元素(key),又要有元素次数…...
禅道源码部署
文章目录 禅道部署1.环境部署安装httpd和mariadb安装php 2.安装禅道首先进行httpd服务的配置安装禅道 禅道部署 1.环境部署 安装lamp环境 组件版本httpdyum安装mariadbyum安装phpphp-7.4.33 选择一个php版本就行,我们这里选择的是7.4.33 安装httpd和mariadb [r…...
️ Vulnhuntr:利用大型语言模型(LLM)进行零样本漏洞发现的工具
在网络安全领域,漏洞的发现和修复是保护系统安全的关键。今天,我要向大家介绍一款创新的工具——Vulnhuntr,这是一款利用大型语言模型(LLM)进行零样本漏洞发现的工具,能够自动分析代码,检测远程…...
我自己做的网站一直没有效果怎么办/seo网站推广目的
Zipkin 是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper 的论文设计而来,由 Twitter公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统…...
广东知名网站/网站流量分析报告
我写了一个bash脚本,它在指定的文件夹中找到CSV文件,并使用正确的配置文件将它们管道到logstash中.但是,当运行此脚本时,我遇到以下错误,说关闭进程停止,导致无限循环,直到我用ctrl c手动停止它:[2018-03-22T08:59:53,833][INFO ][logstash.runner ] Starting Logst…...
营销型网站效果/seo网站关键词优化快速官网
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!非线性编辑【Nonlinear Edit】,简称非编,是相对于传统上以时间顺序进行线性编辑而言。传统线性视频编辑是按照信息记录顺序…...
郑州市重点项目建设办公室网站/软文网站推广法
NBearLite是NBearV4的几个核心组件之一,也是目前NBearV3中ORM部分的查询语法的核心。NBearLite本身并不是一个完整的ORM解决方案,配合目前Teddy正常开发的NBearMapping组件使用(某个中间组件过渡),组成一套完整强大的O…...
Wordpress主页面增加/seo是指什么岗位
PowerShell因为在此系统中禁止执行脚本解决方法 在Powershell直接脚本时会出现: 无法加载文件 **.ps1,因为在此系统中禁止执行脚本。 简短说明 说明如何对脚本进行签名以使其符合 Windows PowerShell 执行策略。 详细说明 Restricted 执行策略不允许…...
如何做淘宝客个人网站/semantic scholar
Open Replicator ( http://code.google.com/p/open-replicator/ ) 开源了。Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析binlog,最终…...