java之旅 (四)隐藏实现 & 复用类

Spire.Doc使用教程:在Java中隐藏Word中的特定段落 在操作Word文档的过程中,有时需要对他人保密一些重要信息。因此,我们可以隐藏它们以确保机密性。本文展示了如何使用Spire.Doc for Java在 Word 文档中隐藏特定段落。 阅读详情

访问控制符, import, 每个编译单元(.java文件)只能有一个public类,如果还有其他类,那这些类就成为这个
public类的辅助类,这是因为他们都不是public的,因此对外边世界来说,它们都是看不到的。

编译.java文件的时候,它里面的每个类都会产生输出。其输出的文件名字就是.java里面类的名字,这样写不了
几个java文件就会产生一堆.class文件,但是不要奇怪,一个能正常工作的java文件本来就是由一堆.class文件
组成的,当然也可以用jar把他们封装成java Archive (JAR)文件。java解释器会负责寻找,装载和解释这些
文件的。

package和import就好像一个刀一个盾。是把一个单独的全局名字空间分割开来,这样不论internet上有多少人
再用java编程,你就都不会再碰到名字冲突的问题了。值得注意的是,每次创建package给它起名的时候,你也
隐含的设置了一个目录结构。这个package必须保存在由它的名字所指示的目录里,而这个目录又必须在classpath
下面。

java的访问控制符:public是众所周知的可以任何人都可以访问的;package权限,默认的访问权限没有关键词,
但通常还是把它成为package权限,(有时也成为friendly)它的意思是所有同属这个package的类都能访问这个
成员,由于同一编译单元只能同属一个package,因此同一个编译单元里的各个类,自动的可以进行相互访问。
protected, private.

接口(interface)和实现(implementation):

类只能是package和public的,如果你不希望别人访问这个类,你可以将他的构造函数设成private,这样除你之外,没人可以在创建那个类的对象了。而你则可以使用一个静态方法来创建对象。(这招在某些场合非常管用)
还有一个实现类似功能的方法,涉及到了设计模式。

复用类

要在不改动原有代码的前提下使用类。有两种方法:合成(compostion)和继承(inheritance)。

所有非primitive对象都有一个toString()方法,当编译器需要一个String而它却是一个对象的时候,编译器就会自动调用这个方法。所以当编译器从"source="+source中看到,你想把一个字符串同一个非字符串相加的时候,它就会说“由于String只能同String相加,因此我要调用source的toString(),因为只有这样才能把它转换成String!”。于是它就把这两个String连起来,然后再String的形式把结果返还给System.out.println()。如果你想让你写的类也具备这个功能,只要写一个toString( )方法就行了。

你可以为每个类都创建一个main(),而且这也是一种值得提倡的编程方法,因为这样一来,测试代码就能都放进类里了。即使程序包括了很多类,它也只会调用你在命令行下给出的那个类的main( )方法。(只要main( )是public 的就行了,至于类是不是public的,并不重要。)于是,当你输入javaDetergent的时候,它就会调用
Detergent.main()。虽然Cleanser不是public的,但是你也可以用javaCleanser来调用Cleanser.main()。这种往每个类里都放一个main()的做法,能让类的单元测试变得更容易一些。做完测试之后,你也不必移除main();留下它可以供以后的测试用。

关键词:super, extends

派生类的初始化是从基类的初始化开始的,如果都是默认的构造函数则不用处理任何问题,但若父类的构造函数是带参数的构造函数,则需要手动利用super来调用父类的构造函数。此外,对派生类构造函数而言,调用基类的构造函数应该是它做的第一件事。

在很多情况下,清理并不是什么问题;把它留给垃圾回收器就行了。但是如果你要自己做的话,那就只能辛苦一点了,而且还要格外小心,因为在垃圾回收方面,谁都帮不上你。垃圾回收器可能永远也不会启动。即便它启动了,你也没法控制它的回收顺序。最好不要依赖垃圾回收器去做任何与内存回收无关的事情。如果你要进行清理,一定要自己写清理方法

如果Java的基类里有一个被重载了好几次的方法,那么在派生类里重新定义那个方法,是不会把基类里定义的任何一个给遮盖掉的(这点同C++不同)。其实在派生类里用相同的参数列表,相同的返回类型来覆写方法的这种做法,实在是太普通了。

继承还是合成??一般来说,合成用于新类要使用旧类的功能,而不是其接口的场合。也就是说,把对象嵌进去,用它来实现新类的功能,但是用户看到的是新类的接口,而不是嵌进去的对象的接口。因此,你得在新类里嵌入
private的旧类对象。继承则是要对已有的类做一番改造,以此获得一个特殊版本。简而言之,你要将一个较为抽象的类改造成能适用于某些特定需求的类。稍微想一下就会知道,用vehicle(车辆)对象来合成一个car(轿车)是毫无意义的——car不包含vehicle,它本来就是vehicle。继承要表达的是一种“是(is-a)”关系,而合成表达要表达的是“有
(has-a)”关系。

你得明白,程序开发就像人的学习一样,是一个渐进的过程。不论你作过多少分析,不实际做项目的话,还是得不
到答案。如果你能摒弃像建玻璃摩天楼那样毕其功于一役的开发方式,而采用类似生物进化的,让那个项目逐步的“
增长”的开发方式,那么你就会获得更大的成功——以及更多的及时反馈。

把派生类传给基类就是沿着继承图往上送,因此被称为“上传(upcasting)”。上传总是安全的,因为你是把一个较具
体的类型转换成较为一般的类型。也就是说派生类是基类的超集(superset)。

合成还是继承,再探讨:在面相对象的编程中,最常见的编程和使用代码的方式还是将数据和方法简单地封装成类
,然后再使用那个类的对象。你也可以通过合成,在现有的类的基础上创建新的类。继承则不太常用。在判断该使
用合成还是继承的时候,有一个最简单的办法,就是问一下你是不是会把新类上传给基类。如果你必须上传,那么
继承就是必须的,如果不需要上传,那么就该再看看是不是应该用继承了。

final 的三种用途:数据(data),方法(method)和类(class)。

尽管面向对象的编程会反复强调继承,但是当你着手设计的时候,通常情况下还是应该先考虑合成,只有在必要的
时候才使用继承。合成会更灵活。

//复用类这章终于看完了,现在有种当年看<c++编程思想>的感觉了:简单问题复杂化。


 

Java封装:数据隐藏的艺术与实践 面向对象编程中,封装通过隐藏内部实现细节和提供受控访问接口,显著提升代码可维护性、安全性和模块化程度。Java通过访问修饰符(private/public等)和规范方法(getter/setter)实现封装,其核心优势在于: 可维护性:内部实现可自由修改而不影响调用方 安全性:防止外部直接操作敏感数据 模块化:清晰定义公共API边界 高级封装模式包括: 不可变对象(如String) 建造者模式(复杂对象构造) Java14+记录类(简化数据载体) 合理运用封装能有效降低系统耦合度,是构建健壮企业应用的基础。 阅读详情

相关推荐

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

kercii的博客 7385

java之旅(7)隐藏实现 & 复用类

隐藏实现 & 复用类访问控制符, import, 每个编译单元(.java文件)只能有一个public类,如果还有其他类,那这些类就成为这个public类的辅助类,这是因为他们都不是public的,因此对外边世界来说,它们都是看不到的。编译.java文件的时候,它里面的每个类都会产生输出。其输出的文件名字就是.java里面类的名字,这样写不了几个java文件就会产生一堆.class文件,但

JAVA之旅 4429

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1001

开发技巧之暴露父类接口隐藏内部实现

如何使用私有类中的部分方法

qq_44733452的博客 318

2026年VIVO嵌入式岗位高频面试题(含参考答案)

摘要:VIVO嵌入式岗位考核涵盖智能手机、IoT设备、芯片适配等方向,重点考察硬件底层交互、RTOS/Linux开发、C/C++功底与问题排查能力。题目按优先级排序,分硬件架构、RTOS、C/C++、数据结构、Linux实践、行业认知6大模块,共40道题。硬件部分涉及中断、ARM架构、加速技术、BSP开发等;RTOS部分区分硬/软实时系统;C/C++部分侧重内存管理、位操作;Linux部分考察常用命令;行业部分关注鸿蒙等系统理念。题目设计贴合实际工作场景,全面评估嵌入式开发能力。

Open 52

【人工智能】提示词工程:让大模型精准响应的核心技术,提示词的基础框架 以及 常见提示词框架及场景

编写提示词的基础原则包括:简单、明确、详细,提示词拥有零样本提示、少样本提示、分配角色、提示写作风格、限定输出格式等技巧。

奶爸的编程之路,也就一周冷个三天 1138

java接口的隐藏实现_谈谈Java接口与实现的分离以及隐藏实现

class FrescoImageLoader implements ImageLoader {private Context mAppContext;@Overridepublic void init(@NonNull Context appContext) {if(Fresco.hasBeenInitialized()) return;// hold appContextmAppContext...

weixin_42570484的博客 765

10.28华为OD机试真题 新系统 - 社交网络消息转发 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - 社交网络消息转发 (Java/Py/C/C++/Js/Go)

算法大师! 436

科普文:软件架构设计【安全设计:Java动态编译JavaCompiler实现代码隐藏】

* 执行ServiceConfig类 * 第一次运行时会自动创建以下文件: * target/classes/com/zxx/study/rjava/codeBehind/spi/MyServiceImpl.class * data/my/key.enc(包含加密密钥) * data/my/MyServiceImpl.enc(加密后的类文件) * 注意事项: * 在生产环境中,请确保: * 密钥不应硬编码在代码中 * 应使用专业的密钥管理系统(如HSM或KeyStore) * 加密类应该通过混淆工具处理 *

为无为,事无事,味无味。 1231

【异常】安装hermes-agent时Git克隆大仓库报错:error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CAN

摘要:本文分析了Ubuntu服务器执行Git递归克隆时出现的网络传输中断错误(HTTP/2流异常关闭、数据截断)。主要原因是网络限制、协议兼容问题和缓冲区不足。提供了四种解决方案:1)扩大Git HTTP缓冲区;2)切换为HTTP/1.1协议;3)采用浅克隆+分步拉取子模块;4)网络优化措施。重点推荐浅克隆分步拉取作为最有效方案,所有方法无需重启即可生效,可快速解决大仓库递归克隆失败问题。

奶爸的编程之路,也就一周冷个三天 671

高速PCB设计中的一些常用规则

目前,高速PCB产品设计中,高速接口的应用日益普及,对于复杂的设计而言,高速走线就如同“蜘蛛网”一样密布在PCB各处,因此,在进行PCB检查及评审时,必要的高速PCB设计经验法则及规则是工程师开展工作必不可少的知识储备。

一只豌豆象的博客 3415

java版selenium操作隐藏对象的方法

想要通过selenium模拟点击只有一个隐藏的转跳标签的html,代码如下:&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;a id=&quot;test&quot; href=&quot;http://www.atstudy.com/login&quot; style=&quot;display:none&quot;&amp;gt;test&amp;lt;/a

Cupupup的博客 1635

主题033:燃烧反应工程

燃烧反应工程(Combustion Reaction Engineering)是研究燃料与氧化剂发生剧烈氧化反应的科学,涉及化学反应动力学、流体力学、传热传质等多个学科。燃烧是人类利用能源的主要方式,广泛应用于发电、交通运输、工业加热等领域。燃烧反应通常通过自由基链式反应进行。链引发:RH+O2⟶R⋅+HO2⋅ RH + O_2 \longrightarrow R^\cdot + HO_2^\cdot RH+O2​⟶R⋅+HO2⋅​链传递:R⋅+O2⟶RO2⋅ R^\cdot + O_2 \longrigh

kkchenjj的博客 231

java设置文件隐藏_如何在java程序中设置文件为“隐藏”属性

Java代码public class 设置文件属性 {// 执行以下代码你将看到一个属性为隐藏的文件(D:\ddd.ddd)// 请到D盘下查看public static void main(String[] args) throws IOException {// 创建新文件File file = new File("D:\\ddd.ddd");// 删除文件并创建新文件file.delete(...

weixin_39662228的博客 960

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java创建隐藏文件_如何在java程序中设置文件为“隐藏”属性

Java代码public class 设置文件属性 {// 执行以下代码你将看到一个属性为隐藏的文件(D:\ddd.ddd)// 请到D盘下查看public static void main(String[] args) throws IOException {// 创建新文件File file = new File(“D:\\ddd.ddd”);// 删除文件并创建新文件file.delete(...

weixin_39612849的博客 619

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java读取excel隐藏列,#用poi做excle导入时怎样判断行是否隐藏#poi excle读出数据

急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”我遇到过这个问题后调查发现两个原因:1.你的excel模版本身有问题,可以尝试新建一个模版。2.你的excel使用了一些POI不支持的函数。java poi 读取excel 数字类型的怎么读到以后1都变成了1.0?我也碰到了这个问题,解决很简单,就是修改Excel表的单元格格式(修改成文本)就可以,如果必须需...

weixin_35690047的博客 3524

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

用java代码创建隐藏文件

import java.io.File; import java.io.IOException; public class Yincang {  public static void main(String[] args)throws IOException  {    File file =new File("D:\\cc.text");    if(file.exists())

qtds_314的专栏 1476

java 删除隐藏文件,用Java修改隐藏文件

I have a file that user downloads and then I execute a command within java to hide the file:Runtime.getRuntime().exec("attrib +H myFile.txt");Now later I need to access that hidden file but I'm gettin...

weixin_39729840的博客 364

java隐藏一段代码,Java如何确定目录是否为隐藏?

在Java程序中,如何确定目录是否为隐藏?以下示例演示如何使用File类的file.isHidden()方法获取文件是否被隐藏。package com.yiibai;import java.io.File;public class HiddenDirectory {public static void main(String[] args) {File file = new File("C:\\B...

weixin_39605997的博客 119

java 设置文件夹隐藏_如何在java程序中设置文件为“隐藏”属性。

Java代码public class 设置文件属性 {// 执行以下代码你将看到一个属性为隐藏的文件(D:\ddd.ddd)// 请到D盘下查看public static void main(String[] args) throws IOException {// 创建新文件File file = new File("D:\\ddd.ddd");// 删除文件并创建新文件file.delete(...

weixin_39805364的博客 642

如何在java程序中设置文件为“隐藏”…

Java代码 public class 设置文件属性 { // 执行以下代码你将看到一个属性为隐藏的文件(D:\ddd.ddd) // 请到D盘下查看 public static void main(String[] args) throws IOException { // 创建新文件 File file = new File(“D:\\ddd.ddd”); // 删除文件并创建新

kf的专栏 1871

java js隐藏_[Java教程]js 奇葩技巧之隐藏代码

[Java教程]js 奇葩技巧之隐藏代码0 2014-06-27 00:00:35昨天在群看到有人发了个文章叫《“短”化你的代码》,思路非常不错,采用unicode的零宽字符来实现字符隐藏,虽然有字符,可是你却看不见它。这篇文章详细的介绍了这种方法的实现原理,最后还给出了一个生成工具。当然,作者算了留了一个小小的练习给我们,因为他只用了两个字符,导致转换后的数据是原始数据的 8倍。他...

weixin_39537397的博客 207

java excel 增加sheet_Java 添加、删除、移动、隐藏、显示Excel工作表

众所周知,Excel是日常最常用的办公软件之一。它不仅仅能够方便的处理表格和进行图形分析,同时也能够进行各种数据处理,辅助决策等操作。本文将通过使用Java程序来详细介绍如何在Excel文档中添加、删除、移动、隐藏、显示工作表。Jar文件获取及导入:方法1: 通过官网下载获取jar包。解压后将lib文件夹下的Spire.Xls.jar文件导入Java程序。(如下图)方法2:通过maven仓库安装导...

weixin_33158374的博客 2948

java隐藏手机号邮箱

【代码】java隐藏手机号邮箱。

SiriusSun_的博客 394

采用unicode的零宽字符来实现字符隐藏代码

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

weixin_33709590的博客 4730

使用java创建隐藏文件

[size=x-small][b] import java.io.File; import java.io.IOException; public class 设置文件属性 { // 执行以下代码你将看到一个属性为隐藏的文件(D:\ddd.ddd) // 请到D盘下查看 public static void main(String[] args) throws IOExcep...

j417m的专栏 577
上一篇: java之旅 (三)初始化和清理
下一篇: java之旅 (五)多态性
C_plus_learner
博客等级 码龄22年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值