文档章节

《Java编程思想》第四版读书笔记 第六章

一万
 一万
发布于 2016/05/07 14:41
字数 1068
阅读 135
收藏 1

6.1

文中提到“Java可运行程序是一组可以打包并压缩为一个JAR的.class文件。Java解释器负责这些文件的查找、装载和解释”。注释中又提到“Java中并不强求必须要使用解释器。因为存在用来生成一个单一的可执行文件的本地代码Java编译器”。这里实际上是提到了JVM的两种执行方式,编译器将java文件编译成class文件后,具体的执行方式有两种:

(1)解释执行,将字节码视为脚本,Java解释器解释成本地方法;

(2)由JIT编译成本地机器码执行。(JIT可见第五章的读书笔记)

 

如果使用package语句,它必须是文件中除注释外的第一句程序代码。

文中提到Java包的命名全部使用小写字母,应该是官方的一种规范,编码测试时使用大写字母也可,不过eclipse似乎在看待包时不区分大小写。

CLASSPATH环境变量包含一个或多个目录,用作查找class文件的根目录。在使用JAR文件时,必须在CLASSPATH路径中将JAR文件的实际名称写清楚,而不仅是指明它所在的位置目录。

作者提到,Java去掉了C的条件编译功能,因为它大多数时候是用于解决跨平台问题的。而Java本身可以自动跨平台。条件编译的另一个用途是,调试环境和生成环境的切换。在Java中可以通过改变包来实现。比如练习3中提到的在debug包和debugoff包中包含一个名字相同的类,由测试环境切换到生产环境时把包由debug切换到debugoff。

练习3中的翻译有一些问题,大概意思应是:第一个版本将String参数显示在控制台上,第二个版本什么都不做。

6.2

作者再次强调:不要误认为Java总是将当前目录视作是查找行为的起点之一。如果你的CLASSPATH之中缺少“.”作为路径之一的话,Java就不会查找那里。

 

将构造函数设置为private有两个效果:

第一,控制如何创建对象,阻止别人直接访问某个构造函数;

第二,阻碍对此类的继承(如果所有构造函数都是private)。

 

protected也提供包访问权限

练习6读起来让我有些费解,查了一下英文原版,我的翻译是这样的:

创建一个带有protected数据的类;并创建在同一文件中的另一个类,这个类带有一个方法操作第一个类的protected数据。

 

6.3

有两个重要的原因,将权限的边界划在了数据类型的内部:

第一个原因是要设定客户端程序员可以使用和不可以使用的界限。可以在结构中建立自己的内部机制,不必担心客户端程序员会偶然的将内部机制当作是他们可以使用的接口的一部分;

第二个原因是接口和具体实现进行分离。如果结构是用于一组程序之中,而客户端程序员除了可以调用public方法之外什么也不可以做,那么代码编写者就可以随意更改不是publicde 代码,而不会破坏客户端代码。

 

6.4

编译单元内(一个java文件内)可以完全不带public的类。在这种情况下可以随意对文件进行命名。

除内部类以外,类既不可以是private的也不可以是protected。所以对于类的访问权限仅有两个选择包访问权限或public。

P123第一段最后一句话根据上下文有些难以理解。我的理解是作者从本段开始处的讨论类的访问修饰符,跳跃到讨论将类的构造函数设置成private,这样虽然无法创建该类的对象依旧可以访问该类的public static函数。

© 著作权归作者所有

共有 人打赏支持
一万
粉丝 29
博文 102
码字总数 173386
作品 0
朝阳
程序员
私信 提问
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
8
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
读书笔记之《Java并发编程的艺术》-java中的锁

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

echarts实现中国地图

最近项目中有个需求:在地图上展示各省市的数据分布,像这样: 项目中接入的图表展示工具是echart,查了echart官网,发现并没有中国地图相关的实现,唯一接近的,只有香港18区人口密度。没办...

Funcy1122
17分钟前
0
0
持续集成工具Jenkins结合SVN的安装和使用

持续集成工具Jenkins结合SVN的安装和使用 2018年06月08日 11:30:23 止步前行 阅读数:2932 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxd1435513775/ar...

linjin200
24分钟前
0
0
ES6 对象的解构赋值

基本用法 1.等号右边如果不是数组,将会报错(不是可遍历结构) 2.解构赋值 var, let, const命令声明均适用 3.set结构也可解构赋值(具有Iterator接口,可采用数组形式结构赋值) set解构:任何...

Jack088
26分钟前
0
0
微信小程序富文本table超出宽度处理

一、微信小程序富文本table超出宽度处理 处理思路: 使用正则删除table中的width属性。 //去除table的宽度content = content.replace(/<table[^>]*>/gi, function (match, capture) { ...

tianma3798
28分钟前
0
0
阿里云全站加速DCDN全面支持WebSocket协议

WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销、保持连接状态、更强实时性、更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议。为了更好的满足客户在实时通...

阿里云官方博客
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部