《从C/C++到Java入门指南》- 18.面向对象编程基础

18.面向对象基础

前言

写到这里的时候,笔者的《Java从入门到精通》恰好到了,接下来的内容将会以这本书为主要资源进行学习。

成员变量

Java 中对象的属性称为成员变量,范围是整个类。

public class Book {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

这个代码中申明了一个成员变量name,关于这里private等权限修饰符和变量作用域的内容放在后面。

权限修饰符

Java中的权限修饰符有privatepublicprotected

private

如果一个成员变量被修饰为private,该成员变量只能在本类中被访问,在子类中不可见,并且在其他类中也是不可见的。设置为private之后,这个类将隐藏它内部的所有数据,防止用户直接进行访问。

public

如果设置为public,则表示公开该成员变量,所有地方皆可访问。

protected

设置为protected,只有本包内的该类的子类和其他类可以访问该类的成员变量和成员方法。

总结

三种方法都有其对应的使用场景。publicprotected修饰的类可以被子类访问,但是子类和父类不在同一个包中就需要通过public进行访问。如果父类不允许继承的子类访问成员变量,就需要使用private来进行限制。

再进行概括一下就是,所有修饰符对于本类皆可见。区别在于同包下的其他类或者其他包。

privateprotectedpublic
本类可见可见可见
同包其他类或子类不可见可见可见
其他包的类或子类不可见不可见可见

也很好总结,private就只能在本类中访问,protected不能再其他类中进行访问,public较为博爱皆可访问。

当申明类时不适用修饰符,默认为包存取范围,只有这个包内可以访问成员变量或成员方法。

this 关键字

我们知道,类就是蓝图,可以批量生产出不同编号的类。this关键字所指的就是当前这个编号的对象,而不是其他对象。

可以使用this方法返回类本身,原因是该方法就是类自身的引用。

静态变量和静态方法

static修饰的变量或方法称为静态变量和静态方法。

有时在多个类中会需要在同一个内存共享一个数据,比如圆类中,PI在所有类中的值都是一样的,那就没有必要在每一个圆类中都分配一个空间来存放PI,直接在同一个内存中进行存放即可。为了解决这个问题,可以将PI设置为静态变量。

被声明为static的变量和方法叫做静态成员。静态成员归属于类所有,而不是任何一个对象。

import java.util.*;
public class Main {public static String name;public static void main(String[] args) {System.out.println(Main.name);System.out.println(getName());setName("Jack");printName();}public static String getName() {return name;}public static void setName(String name) {Main.name = name;}public static void printName() {System.out.print(name);}
}

上述创建了一个static变量,为静态的变量进行了一些基本的操作。

类的构造方法

import java.util.*;
public class Main {public static String name;public static void main(String[] args) {System.out.println(Main.name);System.out.println(getName());setName("Jack");printName();}public static String getName() {return name;}public static void setName(String name) {Main.name = name;}public static void printName() {System.out.print(name);}
}

输出结果:

HarryPotter
又多了一本书.
HelloBook!
又多了一本书.
现在有2本书!

上述代码利用了类的构造,在创建类的时候为其指定一个名字。并应用了类的静态变量,所有书维护一个统一的数量。静态方法可以打印这个类的变量。

public class Example {static {...}
}

可以用static定义一个静态区域,当类文件被执行时,会首先执行static块中的程序,并且只会执行一次。

需要注意的是,在static 静态代码块内部,避免使用动态的方法,也就是非静态方法,否则会报错。

public class Book {public static int count;public String name;static {System.out.println("static 静态代码块内的代码会优先执行!");System.out.println(count);// System.out.println(name);}public static void main(String args[]) {System.out.println("主方法后调用!");}
}

name是一个非静态的变量,会随着生成的对象而变化,不是类进行统一维护的,如果进行调用会导致报错。但是 count是一个静态的变量,可以进行访问。

类的主方法

类的主方法是类的入口点,并且args[]形参在之前也提到过,这里就不进行过多的赘述。

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

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

相关文章

【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备

目录 华为IoTDA平台 注册IoTDA实例 创建产品 添加设备 本文首发于:【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! 在上一篇博文中介绍了如何在HZHY-AI300G智能盒创建南向设备&a…

react中的context就是vue中的provide/inject吗?

在学习中我发现React 中的 Context 和 Vue 中的 Provide/Inject 类似,下面是讲解与区分。 React Context 作用 在组件树中共享数据,而无需通过逐层传递 props。 使用方法 创建 Context: const MyContext React.createContext(defaultVal…

前端特效动画魔法书:文字渐入效果实现,可做引导页面

前端特效动画魔法书:文字渐入效果实现,可做引导页面 简介 在网页设计的世界中,动画是吸引用户眼球的魔法。Anime.js,一个轻量级且功能强大的JavaScript动画库,是实现这一魔法的完美工具。本文将作为你的技术文档&…

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS,很久没有这么有成就感了。我以前在学3D数学的时候,书上就有一句话,说你把矢量这些东西用久了,就应该形成一种“直觉”,仿佛这些东西就是你的左右手一样。而这次,我居然真的用“直觉”来…

【开源库学习】libodb库学习(三)

4 查询数据库 如果我们不知道我们正在寻找的对象的标识符,我们可以使用查询在数据库中搜索符合特定条件的对象。ODB查询功能是可选的,我们需要使用--generate-query ODB编译器选项显式请求生成必要的数据库支持代码。 ODB提供了一个灵活的查询API&#x…

Android 14 适配之— BluetoothAdapter、JobScheduler、 Tiles

1. BluetoothAdapter 改动: 在 BluetoothAdapter 中必须加入 BLUETOOTH_CONNECT 权限 Android 14(API 级别 34)或更高版本为目标的App,在调用函数 BluetoothAdapter getProfileConnectionState() 时,需要 BLUETOOTH_…

JAVA零基础小白自学日志——第二十天

文章目录 1.为什么我们需要抽象类2.抽象类3.我们一起来抽象(有病,象也没招你)[1].抽象方法[2].为什么我们先说抽象方法呢?[3].需要明确的 4.关于Object的题外话 今日提要:抽象类 你以为这几天看的内容都是多态&#xf…

复现Android中GridView的bug并解决

几年前的一个bug,GridView的item高度不一致。如下图: 复现bug的代码: import android.os.Bundle; import android.widget.BaseAdapter; import android.widget.GridView; import androidx.appcompat.app.AppCompatActivity; import java.uti…

麻省理工学院 - MIT - 线性代数学习笔记

学习视频地址 文章目录 1.01方程组的几何解释2.02矩阵消元3.03乘法和逆矩阵乘法逆 4.04矩阵A的LU分解5.05转置,置换,向量空间置换转置向量空间 6.06列空间和零空间7.07求解Ax0:主变量,特解 1.01方程组的几何解释 对于二元方程组&…

Scratch自制:《袁坤》游戏攻略

大家好!我也是很久没有动静了,这次我又来了,并且还带来了一个用Scratch制作的游戏,大家还记得我很久以前用C制作的《袁坤》吗?(详见C自制游戏《袁坤》1.2版本发布!-CSDN博客)这次它又…

种类并查集

最近玩的太嗨了,都忘了自己还有三篇博客还在拖更,也是今天一更到底好吧,边更新边写题,让看官老爷有更多的样题去联系 引入—— 在学这个之前,我相信各位应该已经接触过了并查集了吧,嗯?什么&a…

Kubernetes 1.24 版弃用 Dockershim 后如何迁移到 containerd 和 CRI-O

在本系列的上一篇文章中,我们讨论了什么是 CRI 和 OCI,Docker、containerd、CRI-O 之间的区别以及它们的架构等。最近,我们得知 Docker 即将从 kubernetes 中弃用!(查看 kubernetes 官方的这篇文章)那么让我…

VSCODE 下 openocd Jlink 的配置笔记

title: VSCODE 下 openocd Jlink 的配置笔记 tags: STM32HalCubemax 文章目录 内容VSCODE 下 openocd Jlink 的配置笔记安装完成后修改jlink的配置文件然后修改你的下载器为jlink烧录你的项目绝对会出现下面的问题那么打开下载的第一个软件 (点到这个jlink右键&…

Kafka架构详解之分区Partition

目录 一、简介二、架构三、分区Partition1.分区概念2.Offsets(偏移量)和消息的顺序3.分区如何为Kafka提供扩展能力4.producer写入策略5.consumer消费机制 一、简介 Apache Kafka 是分布式发布 - 订阅消息系统,在 kafka 官网上对 kafka 的定义…

你有多自律就有多自由

当你失去对时间的控制权,生活也就失去了平衡。 真正对自己有要求的人,都是高度自律的人。 追求自己想要的生活,任何时候开始都不会晚,关键在于你能够坚持下去,以高度自律的精神,日复一日、年复一年的坚持下…

【11】微服务链路追踪SkyWalking

1、skywalking是什么 1.1 链路追踪介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如: 如何串联整个调用链路,快速定位问题?如何缕清各个微服务之间的依赖关系?…

【AI学习】LLaMA 系列模型的进化(二)

在前面LLaMA 系列模型的进化(一)中学习了LLama模型的总体进化发展,再来看看其中涉及的一些重要技术。 PreLayerNorm Layer Norm有Pre-LN和Post-LN两种。Layer Normalization(LN)在Transformer架构中的放置位置对模型…

基于PaddleOCR + NLP实现证件识别

基于PaddleOCR NLP实现证件识别 PaddleOCR识别paddleOCR安装安装 anconda虚拟环境(可参考yolov5的安装教程) paddleOCR识别PaddleNLP模型信息抽取paddle打包exe 进行ocr识别 什么是PaddleOCR? PaddleOCR 旨在打造一套丰富、领先、且实用的 OCR 工具库,助…

【HarmonyOS开发】Navigation使用

简介 Navigation是路由容器组件,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。适用于模块内和跨模块的路由切换。 在页面跳转时,应该使用页面路由router,在页面内的页面跳转时,建议使用Navigation达到更好的转场动效…

Spring Boot集成Spring Batch快速入门Demo

1.什么是Spring Batch? Spring Batch 是一个轻量级的开源框架,它提供了一种简单的方式来处理大量的数据。它基于Spring框架,提供了一套批处理框架,可以处理各种类型的批处理任务,如ETL、数据导入/导出、报表生成等。S…