On Java基础卷学习

源代码获取地址:https://github.com/BruceEckel/Onjava8-examples

第一章 什么是对象

1.1抽象的历程

万物皆对象,对于想解决的问题中的任何元素,都可以在程序中用对象来呈现(比如:狗、建筑、服务等);

对象具有状态、行为及标识。对象可以拥有内部数据和方法。

1.2对象具有接口

所有的对象,都能被归为一类,同一类对象会拥有一些共同的行为和特征。

类描述了一系列具有相同特征(数据元素)和行为(功能方法)的对象。像浮点型这样的类型也具有一定的元素和方法,因此类就是数据类型。

创建抽象数据类型(class)是面向对象编程的一个基本概念。java自带一些内置类型,其与抽象数据类型工作原理是一样的。可以通过创建对象实例,调用类的方法;

1.3对象可以提供服务

要把对象理解为“服务的提供者”,程序本身也是通过使用其他对象提供的服务为用户提供服务的。

在设计对象时常犯的错误是为对象添加过多的功能。一个复杂的功能,最好拆分为多个对象来实现,一个对象只实现一个通用功能。例如收银系统打印小票这个程序。将生成账单定义为一个对象,链接打印机定义为一个对象,结合调用生成小票数据和调用链接打印机程序定义为一个对象;遵循高内聚、低耦合的设计原则。

1.4隐藏的实现

创建通用工具类时,通过访问修饰符,控制暴露出的接口给其他人员调用,同时隐藏其他不必要的信息,例如数据操作逻辑或其他无需让使用者了解的逻辑细节。这样可以保证接口的稳定性,提高重写效率。

1.5复用的实现

一个类稳定后就可以进行复用。方式一:实例化对象进行使用;方式二:可以将对象放到新的类中;也可任意组合。

1.6继承

用于两个或多个功能相近的类,例如A类和B类功能相似,但B类功能相对A多。此时可以创建好A类后,B类继承A类,在A类的基础上扩展新的功能。A类被称为基类、父类、超类;B类被称为子类、派生类、继承类。

大部分时候,继承需要为子类添加新的方法,方式一:扩展(extends);方式二:重写(overwrite);

1.7多态

由子类到基类,向上转变对象的类型。

场景:定义一个方法DuoTai(BaseClass bc),通过调用基类中的一些通用函数来实现功能,参数是基类对象。此时在另一个场景下,假如同时实例化多个该基类的子类,并将其作为参数去调用DuoTai,那么程序实际是执行不同子类中的方法,这一点在设计程序中适用于业务中有通用方法,但不同子类需求不同,需重写基类方法。

1.9集合

不同的集合提供了不同类型的接口和行为;不同的集合在特定操作的执行效率方面有差异;

泛型:参数化类型机制,避免向下转型;

1.10对象的创建和生命周期

C++的宗旨是效率优先,需提前声明对象的数量、生命周期和类型,通过栈区(“局部变量”)保存对象,或将对象保存在静态存储区内。

Java只允许动态分配内存,通过关键字new创建对象的实例;底层支持垃圾收集器机制,会自动将无用对象销毁;

1.11异常处理

异常处理是将编程语言甚至是操作系统和错处理机制绑定在一起。

第二章 java安装

第三章 对象无处不在

3.1通过引用操作对象

电视(对象),遥控器(引用)。可通过遥控器对操作电视。

3.2必须创建所有对象

引用的作用是关联对象。通过new关键字来创建对象。

3.2.1数据保存在哪里

对于内存管理的5种数据存储方式:

  1. 寄存器(register),数据保存在CPU中,程序无法控制寄存器的分配;

  1. 栈(stack),数据保存在RAM中,处理器通过栈指针直接操作数据。迅速、高效仅次于寄存器;系统在创建应用程序时就必须明确栈上所有对象的生命周期;

  1. 堆(heap),数据保存在RAM中,不关心对象存储生命周期,较为灵活;需要一个对象时,可以通过new来创建,当代码被执行时,java会在堆上为该对象分配内存;分配和清理存储要比栈花费时间多,但随着java技术的进步,开发者无需过多关注此分配和清理存储;

  1. 常量存储(constant storage),通常直接保存在代码中;有些嵌入式程序会将常量存储在只读存储器ROM中

  1. 非RAM存储,如果一段数据没有保存在应用程序里,那么该数据的生命周期既不依赖于应用程序是否允许,也不受应用程序的管制;

3.2.2特殊情况:基本类型(primitive type)

无需通过new来创建基本类型变量,会自动在栈上保存他的值,运行效率更高;

java为基本类型提供了对应的包装类(wrapper class),通过包装类可将基本类型呈现为位于堆上的非原始对象;

char c = 'X';

Character ch = new Character(c);

自动装箱机制可以将基本类型自动转换为包装类对象;

Character ch = 'X';

3.3注释

支持/* XX 。*/和//两种形式

3.4无需销毁对象

  1. 作用域:花括号{}

  1. 对象的作用域:Java对象的生命周期和基本类型不一样,当通过new创建对象时,对象在作用域结束仍然存在,只不过由于作用域结束无法再获取。Java通过垃圾收集器去自动回收那些不被引用的对象;

3.5使用class关键字创建新类型

包含方法或字段

当一个类的字段是基本类型时,即使不初始化,他们也会有默认值;需区分,局部变量不会自动赋默认值;

3.7 编写Java程序

使用域名反转的方式,后面加上多个"."描述子目录的结构,避免命名冲突的问题。.net是通过命名空间的方式。 包名从JAVA2开始全部小写。

引入其他组件使用import关键字。

第四章 操作符

优先级:先乘除后加减;也可通过小括号来明确计算顺序;

基本类型的赋值a=b,后面再修改a的值,并不会影响b;引用类型赋值,例如对象间c=d,就是将c和d都指向原本只有d指向的那个对象。将对一个对象作为参数传递给一个方法时,同样时引用类型赋值;

关系操作符:Integer类型比较时,要有equls函数。因为通过==对比比较的是对象的引用。出于效率原因,Integer会通过亨元模式来缓存-128-127之间的对象,因此多次调用Integer.valueOf(127)生成的是一个对象。但假如不在上述范围,那么每次生成都会新建一个对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值