Java编程思想学习(五) 复用类】的更多相关文章

1.继承与组合 复用类的方法有两种:继承与组合.继承就不多说了,组合就是直接在类中new一个对象. 数组也是对象,使用数组也是组合的一种. 2.初始化基类 当创建一个导出类的对象时,该对象包含一个基类的子对象.这个子对象跟直接new一个基类的对象完全相同,唯一的区别是:一个在外部,一个被包装在导出类对象内部. 在导出类构造器中,通过调用基类构造器来执行初始化.[在Java中,所有导出类的所有构造器内部都必须调用父类的某一个构造器或所有导出类的所有构造器内部都必须调用一个其他构造器(既可以是本类构…
前言 复用代码是Java众多引人注目的功能之一. 达到复用代码的方法有: 组合:新的类由现有类的对象所组成.(复用现有代码的功能,而非它的形式) 继承:按照现有类的类型组建新类.(不改变现有类的形式,复用现有类的形式并在其中添加新代码).面向对象程序设计的基石 正文 1.组合语法 将对象引用置于新类中即可(非基本类型:在新类中放置引用,基本类型:直接添加就可以了) /** * 引擎 */ class Engine{ /** * 功率 */ double power; /** * 品牌 */ St…
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并额外提供了“垃圾回收器”.对于不再使用的内存资源,垃圾回收器能自动将其释放. 5.1 用构造器确保初始化 //:initialization/SimpleConstructor.java //Demonstration of a simple constructor. class Rock { Ro…
复用代码是 Java 众多引人注目的功能之一. Java 可以通过创建类来复用代码,要在使用类的时候不破坏现有代码,有两种方式: 组合:在新的类中使用现有类的对象. 继承:按照现有类的类型来创建新类,无需改变现有类的形式,并为其添加新代码. 组合语法 使用组合技术只需要将对象引用置于新类中. 每个非基本类型的对象都有一个 toString() 方法,而且当编译器需要一个 String 而你传入一个对象时,toString() 会被调用. 类中的对象引用会被默认初始化为 null,如果你对其调用任…
3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("Hello, world"); 我们都会感觉太冗长了,能不能简单一些呢?静态导入可以省略掉System,就像这样 import static java.lang.System.*; public class Hello { public static void main(String[] args) {…
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿名内部类,局部内部类,嵌套类(静态内部类)等.下面简要的介绍以下这些内部类定义的语法. (1).对于普通的内部类,就是在外围类中插入另一个类的定义.如下面的代码: package lkl1; ///封装一个包裹类 public class Parcel { ///在一个类的内部定义的另一个类,称之为…
On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! 如果您在阅读本书的过程中有发现不明白或者错误的地方,请随时到项目地址发布 issue 或者 fork 项目后发布 pr 帮助译者改善!不胜感激! 书籍简介 本书原作者为 [美] Bruce Eckel,即<Java 编程思想>的作者. 本书是事实上的 <Java 编程思想>第五版.…
1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都可以接收同样的消息. 上面是书上总结的内容,具体代码如下: //每个对象都有一个接口,接口有对象相关的功能和数据 public class Light { public void on() { System.out.println("开灯"); } public void off() {…
学习Java编程思想,需要了解语言特性,对于各种名词,能够借助项目代码,解释其含义,不借助搜索工具,明白其在什么样场景下使用,会带来什么样的问题,能否避免这类问题. 学习的过程,与软件开发相同,一样是迭代的过程,最终的目标是越来越接近最高水平,虽然可能永远达不到.…
正则表达式是一种强大的文本处理工具,使用正则表达式我们可以以编程的方法,构造复杂的文本模式,并且对输入的字符串进行搜索.在我看来,所谓正则表达式就是我们自己定义一些规则,然后就可以验证输入的字符串是不是满足这些规则,主要的问题在于定义这些规则时要用到一些比较特别的语法,加大了理解的难度.以前就学习过一次java的正则表达式,但是学的模模糊糊的;主要的原因在于正则表达式的语法实在是很复杂,所以这次又去学习了正则的基本语法.其实在了解了正则表达式的基本语法后,学习java中的正则表达式还是很简单的.…
七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为每一个引用都创建默认对象,如果想初始化这些引用,可以在代码中的下列位置进行: 1.在定义对象的地方.这意味着它们总是能够在构造器被调用之前被初始化. 2.在类的构造器中. 3.就在正要使用这些对象之前,这种方式称为惰性初始化. 4.使用实例初始化. 2.继承语法 当创建一个类时,总是在继承,因此,除…
1.Java语言的三大特性:继承.封装和多态. 继承:复用类的一种方法,可以简省很多代码: 封装:通过合并特征和行为来创建新的数据类型.[这种“数据类型”跟Java本身提供的8大“基本数据类型”的地位完全相同.Java通过封装这种方式来扩充数据类型.] 多态:消除创新的数据类型之间的耦合关系. 2.前期绑定:static和final方法都是前期绑定(在编译时绑定和执行): 3.后期绑定:Java中除了static和final方法,都是后期绑定(前面提到过,private方法属于final方法).…
欢迎各位读者关注我的微信公众号,共同探讨Java相关技术.生命不止,学习不休! 也许你慢慢地对程序有了这样的认识:程序只是一些列带有方法的对象的组合,这些方法以其它对象为参数,可在任何地方返回,并发送消息给其他对象.这样的认识,目前来说,是对的. 一览焦点 Java中的类 新建的对象去了哪里 谁来安置无家可归的对象 总结 Java中的类 决定了对象的外观与行为.Java中用class关键字来对类进行定义. 在Java中,允许程序员定义一个新的数据类型来满足其应用的需求.其形式为class后跟上新…
二.一切都是对象 1.用引用操纵对象 在Java中,一切都被视为对象,但操纵的标识符实际上是对象的一个“引用”.可以将这想象成遥控器(引用)来操纵电视机(对象).另外,没有电视机,遥控器也可以单独存在.也就是说,你拥有一个引用,并不一定需要有一个对象与它关联. 2.必须由你创建所有对象 一旦创建了一个引用,就希望它能与一个新对象相关联.通常用new操作符来实现. ①存储到什么地方 程序运行时,对象是怎样进行放置安排的呢?特别是内存是怎样分配的?有五个不同的地方可以存储数据: 寄存器.这是最快的存…
2.1  创建新的数据类型:类 通过第一章掌握了面向对象的理论后,我们知道每个对象必定属于一个类型,那么Java如何创建新的数据类型?如下程序所示: class Circle { // 属性 // 方法 } 如上所示,使用关键字class定义了类Circle,用花括号{ }将整个类包括起来.当然,这个类还不能做任何事,它还需要定义一些属性和方法. 2.2  属性和方法 面向对象的一个特性就是将数据和方法结合起来.比如对一个圆抽象,可见圆有它的属性半径,它还有方法,如告诉我们它的周长和面积.不光是…
注解Annotation又叫元数据,是JDK5中引入的一种以通用格式为程序提供配置信息的方式.使用注解Annotation可以使元数据写在程序源码中,使得代码看起来简洁,同时编译器也提供了对注解Annotation的类型检查,使得在编译期间就可以排除语法错误. 1JDK内置的3中Annotation: 在JDK5中,内置了3个通用目的的注解Annotation,这三个内置的注解在java.lang包下: (1).@Override: 这个注解常用在继承类或实现接口的子类方法上,表面该方法是子类覆…
类的访问权限 Java中,访问权限修饰词用于确定库中哪些类对于该库的使用者是可用的. public class Foo{ } 注意点: 每个文件(编译单元)只能有一个public类. public类的名称必须完全和含有该编译单元的文件名相匹配,包括大小写. 编译单元内没有public类也是可行的(不常这么用),在这种情况下,可以随意对文件命名. 类既不可以是private的(除该类以外,任何类都不能访问它),也不可以是protected.(事实上,内部类可以是private或protected的…
一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆对象. 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的.要想请求一个对象,就必须对该对象发送一条消息.更具体的说,可以把消息想象为对某个特定对象的方法的调用请求. 3)每个对象都有自己的由其他对象所构成的存储.换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象. 4)每个对象都…
1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, Run Anywhere". 所谓的抽象过程,可以理解为对待解问题建模.比如待解问题是一个人,那么我们可以对人进行建模,它的类型是人,有属性姓名.性别.年龄,还有行为吃饭.走路.Java能直接完全据此建模编码,而无需考虑具体的计算机结构.所以当我们阅读Java程序时,正如书上说的"当你在…
前言 Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言. C++和Java都是混合/杂合型语言.杂合型语言允许多种编程风格. 用引用操纵对象 每种编程语言都有自己操纵内存中元素的方式. 直接操纵元素 用某种基于特殊语法的间接表示(C和C++里的指针) 用引用操纵对象(Java) 在Java中,一切都被视为对象.操纵的标识符实际上是对象的一个引用. 类比为遥控器(引用)来操纵电视机(对象) 只要把握这个遥控器,就能保持与电视机的连接 改变频道或减小音量,实际操纵的是遥控器(引…
十一.持有对象  通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List.Set.Queue和Map. 1.泛型和类型安全的容器  通过使用泛型,就可以在编译器防止将错误类型的对象放置到容器中. 2.基本概念 Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: 1)Collection.一个独立元素的序列,这些元素都服从一条或多条规则.Li…
五.初始化与清理 1.用构造器确保初始化  在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行.构造器的名称与类的名称相同.(“每个方法首字母小写”的编码风格并不适用于构造器) 构造器有助于减少错误,并使代码更易于阅读.从概念上讲,“初始化”与“创建”是彼此和独立的.在Java中,“初始化”和“创建”捆绑在一起,两者不能分离. 构造器是一种特殊类型的方法,因为它没有…
前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定我们在编译时已经知道了所有的类型. (2)另一种是反射机制,它允许我们在运行时发现和使用类的信息. 为什么需要RTTI 以使用了多态的类层次结构的例子举例: 如上图,泛型是基类Shape,而派生出来的具体类有Circle,Square和Triangle. 这是一个类层次结构图,基类位于顶部,而派生类…
前言 Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言. C++和Java都是混合/杂合型语言.杂合型语言允许多种编程风格. 用引用操纵对象 每种编程语言都有自己操纵内存中元素的方式. 直接操纵元素 用某种基于特殊语法的间接表示(C和C++里的指针) 用引用操纵对象(Java) 在Java中,一切都被视为对象.操纵的标识符实际上是对象的一个引用. 类比为遥控器(引用)来操纵电视机(对象) 只要把握这个遥控器,就能保持与电视机的连接 改变频道或减小音量,实际操纵的是遥控器(引…
线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是真正的并行运行,而是通过时间片切换来执行,由于时间片切换频繁,使用者感觉程序是在并行运行.单核心CPU中通过时间片切换执行多线程任务时,虽然需要保存线程上下文,但是由于不会被阻塞的线程所阻塞,因此相比单任务还是大大提高了程序运行效率. 1.线程的状态和切换: 线程的7种状态及其切换图如下: 2.多线…
1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods. 泛型能在定义类,接口和方法时将类型(类和接口)作为参数.和方法声明时的形式参数很类似,都是为了在不同的输入时重用相同的代码.不同的是形式参数输入的是值而泛型是类型. 2.为什么使用泛型 1.编译时更加强的(Stronger)类型检测java编译器对泛型代码进行强类型检…
java的异常处理机制可以使程序有极好的容错性,让程序更加的健壮.所谓的异常,就是指的阻止当前方法或作用域继续执行的问题,,当程序运行时出现异常时,系统就会自动生成一个Exception对象来通知程序.这样就极大的简化了我们的工作. 当然java的异常对象有很多种,下面这幅图显示了java异常类的继承体系.  从图片中可以看到java将所有的非正常情况分成了两种: 异常(Exception)和错误(Error),他们都继承Throwable父类.Error错误一般是指与虚拟机相关的问题,如系统崩…
1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽象类直接创建对象是不安全的,因为这个抽象类是不完整的.编译器通过这种方式保证了抽象类的纯粹性. public abstract class Person { public abstract void eat(); public abstract void pee(); public abstract…
一.从任务中产生返回值,Callable接口的使用 Callable是一种具有泛型类型参数的泛型,它的类型参数表示的是从方法call返回的值,而且必须使Executor.submit来去调用它.submit方法将会返回Future对象,它用Callable返回结果的特定类型进行了参数化,可以通过isDone方法来检测Future是否已经完成.当任务完成的时候,它具有一个结果,可以调用get方法来获取结果,get方法将阻塞,直到结果准备就绪.下面是示例: import java.util.conc…
1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里获得直接支持.堆栈指针向下移动,分配新的内存,向上移动,则释放那些内存.Java系统必须知道存储在堆栈内的所有项目的确切的生命周期. 3)堆.编译器不需要知道存储的数据在堆里活多长时间. 4)常量存储.通常直接放在代码内部. 5)非RAM存储,如果数据完全存活与程序之外,那么它可以不受程序的任何控制…