Java编程思想之十四 类型信息】的更多相关文章

第十四章 类型信息 运行时类型信息使得你可以在程序运行时发现和使用类型信息 14.1 为什么需要RTTI 面向对象编程中基本的目的是:让代码只操作对基类的引用. 多态: import java.util.*; abstract class Shape { void draw() { System.out.println(this + ".draw()"); } abstract public String toString(); } class Circle extends Shape…
运行时类型信息使得你可以在运行时发现和使用类型信息,主要有两种方式: "传统的"RTTI,它假定我们在编译时已经知道了所有的类型: "反射"机制,它允许我们在运行时发现和使用类的信息. 14.1 为什么需要RTTI RTTI维护类型类型的信息,为多态机制的实现提供基础. 14.2 Class对象 类型信息在运行时是通过Class对象来表示的,完成的Class对象包含了与类有关的信息.Class对象就是用来创建所有"常规"对象的,Java使用Cla…
运行时类型信息使得你可以在程序运行时发现和使用类型信息.Java是如何让我们在运行时识别对象和类的信息得呢? 主要有两种方式:1.传统RTTI,他假定我们在编译期间已经知道了所有类型:2.反射,它允许我们在运行时发现和使用类的信息. 一.为什么需要RTTI 我们来看一个例子: 这是一个典型的类层次结构图,基类位于顶部,派生类向下扩展.面向对象编程中的基本目的是:让代码只操纵对基类(Shape)的引用.这样,如果添加一个新类(比如从Shape派生的Rhomboid)来扩展程序就不会影响原来代码了.…
六.反射:运行时的类信息 我们已经知道了,在编译时,编译器必须知道所有要通过RTTI来处理的类.而反射提供了一种机制——用来检查可用的方法,并返回方法名.区别就在于RTTI是处理已知类的,而反射用于处理未知类.Class类与java.lang.reflect类库一起对反射概念进行支持,该类库包含Field.Method以及Constructor(每个类都实现了Member接口).这些类型是由JVM运行时创建的,用来表示未知类种对应的成员.使用Constructor(构造函数)创建新的对象,用ge…
关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 基本enum特性 调用enum的values()方法可以遍历enum实例,values()方法返回enum实例数组,且数组中元素保持在enum声明时的顺序. public class TestEnum { public static void main(String[] args) { Fruit[] values = Fruit.values(); for (Fruit fruit : va…
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) { case integral-value1: statement; break; case integral-value12: statement; break; default: statement; } 其中integral-selector(整数选择因子)是一个能产生整数值的表达式.并且说…
感谢,参考:https://www.cnblogs.com/buwuliao/p/8073211.html 一.链接: 中文版: https://pan.baidu.com/s/1d07Kp4 密码:x2cd 英文版: https://pan.baidu.com/s/1boOSdAZ 密码: rwgm 文件截图: 二.注意: 中文版 有一页( 文件页码548,书籍页码515 )图像缺失.不过没关系,只是一页源码以及简单说明,不影响整体知识. 网上的所有版本此页都是缺失的. 实在要看,可以看对应的…
一.链接: 中文版: https://pan.baidu.com/s/1d07Kp4 密码:x2cd 英文版: https://pan.baidu.com/s/1boOSdAZ 密码: rwgm 文件截图: 二.注意: 中文版 有一页( 文件页码548,书籍页码515 )图像缺失.不过没关系,只是一页源码以及简单说明,不影响整体知识. 网上的所有版本此页都是缺失的. 实在要看,可以看对应的英文版本(文件658页,书籍636页),没什么难度. 三.代码引入: 注解一章中,按照书中的jar包引入代码…
注解Annotation又叫元数据,是JDK5中引入的一种以通用格式为程序提供配置信息的方式.使用注解Annotation可以使元数据写在程序源码中,使得代码看起来简洁,同时编译器也提供了对注解Annotation的类型检查,使得在编译期间就可以排除语法错误. 1JDK内置的3中Annotation: 在JDK5中,内置了3个通用目的的注解Annotation,这三个内置的注解在java.lang包下: (1).@Override: 这个注解常用在继承类或实现接口的子类方法上,表面该方法是子类覆…
关键字enum可以将一组具名的值的有限集合创建为一种新的类型, 而这些具名的值可以作为常规的程序组件使用.这是一种非常有用的功能. 18.1 基本enum特性 创建enum时,编译器会为你生成一个相关类,这个类继承自java.lang.Enum.下面演示一些基本功能. import static net.mindview.util.Print.*; enum Shrubbery { GROUND, CRAWLING, HANGING } public class EnumClass { publ…
目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的默认访问权限(包访问权限) 6.组合与继承 7.多态 8.容器(自己最浅显的理解) 9.参数化类型 10.并发编程 二.Everything Is an Object 1.用引用操纵对象 2.存储位置 3.基本类型(无需使用new即可创建) 4.new创建对象的作用域 5.static的作用 6.j…
Java的基本概念是结构不佳的代码不能运行余下的问题必须在运行期间解决,这就需要错误源能通过某种方式,把适当的信息传递给某个接收者--该接收者将知道如何正确处理这里问题. 12.1 概念 使用异常所带来的另一个相当明显的好处,它往往能够降低错误处理代码的复杂度. 12.2 基本异常 异常情形是指阻止当前方法或作用域继续执行的问题.把异常情形与普通问题相区分很重要,普通问题是指,在当前环境下能得到足够的信息,总能处理这个错误.而对于异常情形,就不能继续下去了,因为在当前环境下无法获得必要的信息来解…
Collection类的层次结构图(来源与网络)如下所示: 接口:Iterator<T> public interface Iterable<T> Iterable<T>接口作为超级接口,此接口中只有一个返回类型为Iterable<t> 的iterator()方法,实现这个接口允许对象成为 "foreach" 语句的目标. 接口:Collection<T> public interface Collection<E>…
线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是真正的并行运行,而是通过时间片切换来执行,由于时间片切换频繁,使用者感觉程序是在并行运行.单核心CPU中通过时间片切换执行多线程任务时,虽然需要保存线程上下文,但是由于不会被阻塞的线程所阻塞,因此相比单任务还是大大提高了程序运行效率. 1.线程的状态和切换: 线程的7种状态及其切换图如下: 2.多线…
正则表达式是一种强大的文本处理工具,使用正则表达式我们可以以编程的方法,构造复杂的文本模式,并且对输入的字符串进行搜索.在我看来,所谓正则表达式就是我们自己定义一些规则,然后就可以验证输入的字符串是不是满足这些规则,主要的问题在于定义这些规则时要用到一些比较特别的语法,加大了理解的难度.以前就学习过一次java的正则表达式,但是学的模模糊糊的;主要的原因在于正则表达式的语法实在是很复杂,所以这次又去学习了正则的基本语法.其实在了解了正则表达式的基本语法后,学习java中的正则表达式还是很简单的.…
可以将一个类定义放在另一个类的定义内部,这就是内部类. 10.1 创建内部类 创建内部类就是把类的定义置于外部类里面. public class Parcell { class contents{ int i=0; public void GetI(){ System.out.println("contents"+i); i++; } } class Destintion{ private String label; public void GetI(String s){ System…
之前学习的是Collection层次的List接口.List层次比较简单,除去与多线程安全相关的CoppyOnWriteArrayList<T>类,这一个类在集中涉及多线程相关知识时候再学习,以及已经过时的向量Vector<T>.栈Stack<T>外,只剩下两种比较常用的List接口的实现,也就是基于数组的ArrayList和基于链表的Linkedlist两个类.这两个列表实现中最简单.最常用的还是ArrayList.至于LinkedList,由于其具体实现中实现了De…
import static java.lang.System.out; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.…
一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的话就是对象数组默认值为null,而基本数组视本身情况而定. package lkl; import java.util.Arrays; ///下面演示了数组的初始化 //包括对象数组和普通数组 class Base{ private static long counter; private fina…
前言 关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 正文 基本enum特性 调用enum的values()方法可以遍历enum实例,values()方法返回enum实例数组,且数组中元素保持在enum声明时的顺序. public class TestEnum { public static void main(String[] args) { Fruit[] values = Fruit.values(); for (Fruit frui…
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成. 在Java中,使用引用来操纵对象,在Java编程思想的第四版中,使用的术语是“引用(reference)”,之前有读过Java编程思想第三版,在第三版中,使用的术语是“句柄(handle)”,事实上,我觉得第三版的术语“句柄”更加形象传神,就像你用一个门的把柄来开门关门一样,不用管门是什么门,总…
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 public √ √ √ √ protected √ √ √ default(friendly) √ √ private √ protected:处理的是继承的概念.子类 extends 父类,如果父类希望某个特定成员,把对它的访问权限赋予派生类而不是所有类,即可以使用 protected. 2. 8个基本…
现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始说起. 一.为什么需要内部类 1.一个内部类的对象可以访问它的外围类的私有数据. 2.对于同一个包中的其他类来说,内部类能够隐藏起来. 3.使用内部类实现多重继承. 二.内部类重要提要 1.在方法内部或者方法内部的作用域的内部类 eg:方法内部的内部类 public interface InnerInterf…
9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字abstract方法修饰. 编译器会禁止我们对抽象类进行实例化. 9.2接口 接口是对抽象类更进一步的抽象. 接口声明时使用interface关键字,接口中的域都是隐式添加关键字:public static与final. 接口想被导出类实现需要通过关键字implement来完成. 接口中的方法是被默…
来自:Java编程思想(第四版) 第十三章 字符串   字符串操作是计算机程序中最常见的行为.   String对象是不可变的.查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,已包含修改后的字符串内容.而最初的String对象则丝毫未动.   不可变性会带来一定的效率问题.为String对象重载的"+"操作符就是一个例子.用于String的"+"与"+="是Java中仅…
On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! 如果您在阅读本书的过程中有发现不明白或者错误的地方,请随时到项目地址发布 issue 或者 fork 项目后发布 pr 帮助译者改善!不胜感激! 书籍简介 本书原作者为 [美] Bruce Eckel,即<Java 编程思想>的作者. 本书是事实上的 <Java 编程思想>第五版.…
本章内容绕不开一个名词:RTTI(Run-time Type Identification) 运行时期的类型识别 知乎上有人推断作者是从C++中引入这个概念的,反正也无所谓,理解并能串联本章知识才是最重要的 本章的内容其实都是为类型信息服务的,主要内容有 一.Class对象 问题: 1.Class对象的创建过程是怎么样的 2.Class对象有哪几种创建方式,之间有什么差异 3.使用泛型 在了解类型信息之前,需要了解class对象 创建class对象,需要先查找这个这个类的.class文件, 查找…
前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次记录的是第十九章到第二十章的内容,相关示例代码放在码云上了,码云地址:https://gitee.com/reminis_com/thinking-in-java 第十九章:枚举类型 关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能…
<Java编程思想第四版完整中文高清版.pdf>-笔记 附录 B 对比 C++和 Java “作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无疑是非常熟悉的.事实上,Java 本来就是从 C++衍生出来的.” 然而,C++和Java 之间仍存在一些显著的差异.可以这样说,这些差异代表着技术的极大进步.一旦我们弄清楚了这些差异,就会理解为什么说Java 是一种优秀的程序设计语言.本附录将引导大家认识用于区分 Java 和C++的一些重要特征. (1) 最…
坊间传说这本书翻译得很烂,我倒觉得还好.虽然看原文更准确,但是如果在具备一定编程思维和基础.能够看出来疑问的情况下,还是看中文更快一些,而且这本书本身也不适合初学者看.当然,错误和不通顺还是有的,而且官方和网上居然没有一份公开的勘误表,至少我没有搜到,搜索“Java编程思想第四版勘误”时出现的都是CSDN上的一篇久远的帖子.也许发现问题的人已经懂了,不在意那些错误. 在此记录我发现的问题以及翻译得不够好的地方,如果有人能够看到此文,且发现各种问题,欢迎补充.开源的工具就应当一切周边都开源. 1.…