《Java编程思想个人总结 第五章-第十一章》

《Java编程思想个人总结 第五章-第十一章》
第五章 初始化与清理
1.初始化和清理是设计编程安全的两个问题,在Java中采用了"构造器"和"垃圾回收器"解决这两个问题.

2.Java中,"初始化"和"创建"是捆绑在一起两者不能分离.

3.在Java(C++)里,构造器是强制重载方法名的另一个原因.

4.基本类型能从一个"较小"的类型自动提升至一个"较大"的类型,此过程一旦涉及到重载,会造成一些混淆.
a.如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会提升.如果无法找到恰好接收char参数的方法,就会把char直接提升到int型.
b.如果传入的实际参数较大,就得通过类型转换来执行窄化转换,否则编译器将会报错.

5.在区分重载方法的时候,只能以类名和方法的形参列表作为标准,不能用方法的返回值区分.

6.this关键字只能在方法内部使用,表示对"调用方法的那个对象"的引用.

7.除构造器外,编译器禁止在其他任何方法中调用构造器.

8.static方法就是没有this的方法,Java中禁止使用全局方法,但在类中置入static方法就可以访问其他static方法和static域.

9.Java的finalize()和C++的析构函数.
a.对象可能不被垃圾回收.
b.垃圾回收不等于"析构".
c.垃圾回收只与内存有关.

10.finalize()的需求一般是运用在:通过某创建方式以外的方式为对象分配了存储空间.(非Java中的通常做法:本地方法,即是在Java中调用非Java代码的方式)

11.无论是"垃圾回收",还是"终结",都不保证一定会发生.如果虚拟机并未面临内存耗尽的情形,是不会浪费时间去执行垃圾回收.

12.Java虚拟机的工作方式:存储空间的释放会影响存储空间的分配.

13.垃圾回收一面回收空间,一面使堆中的对象紧凑排序,可以说通过垃圾回收器对象重新排列,实现一种高速的,有无限空间可供分配的堆模型.

14."即时"编译器的技术:把程序全部或部分翻译成本地机器当需要装在某个类时,编译器会先找到其.class文件,然后将该类的字节码装入内存,此时有两种方案:
a.即时编译所有代码.
b.惰性评估:让即时编译器只在必要的时候才编译代码.

15.垃圾回收技术:“停止-复制”;“标记-清扫”,以及"自适应"模式:要是没有新垃圾产生,就会转换为另一种工作方式模式.

16.为保证所有的变量在使用都能得到恰当的初始化.
a.对方法的局部变量,Java以编译时错误的形式贯彻.
b.对类的数据成员是基本类型,保证还有会有一个初始值.

17.自动初始化在构造器被调用之前发生.

18.静态初始化只有只有在必要时刻才会进行(第一次访问静态数据).

19.对象的创建过程,假设有个名为Dog的类:
a.即时没有显示地使用static关键字,构造器实际上也是静态方法,当首次创建类型为Dog的对象时(构造器可以看成是静态方法),或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Dog.class文件.
b.然后载入Dog.class,有关静态初始化的所有动作都会执行.因此静态初始化只在class对象首次加载的时候进行.
c.当用new Dog()创建对象的时候们首先将在堆上为Dod对象分配足够的存储空间.
d.这块存储空间会被清零,这就自动地将Dog对象中的所有类型数据都设置成了默认值,
e.执行所有出现于字段定义处的初始化动作.
f.执行构造器

20.数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.

21.编译器不允许指定数组的大小,拥有的是对象组的一个引用,没有给数组对象本身分配任何空间.

22可变参数(形式如:Object…args)参数格式,在可变参数列表中可以使用任何类型的参数,使用可变参数列表不宜懒于自动包装机制.

第六章权限控制
1.Java可运行程序是一组可以打包并压缩为一个Java文档文件(jar)的.class文件.

2.package和import关键字是将单一的全局名字空间分割开,避免出现名称冲突问题.

3.守护进程daemon,是指没有控制终端,运行在后台的进程,通常伴随着系统启动产生,系统关机结束.可以使用命令PS - axj查看系统的守护进程.

4.无论何时创建包都已经在给定包的名称的时候隐含地制定了目录结构,这个包必须位于其名称所指定的目录之中,而目录必须是在以CLASSPATH开始的目录中可以查询到的.

5.所有的事物都具有某种形式的访问权限控制,默认为"包访问权限".

6.取得对某成员的访问权的途径:
a.使改成员成为public.
b.通过不加访问权限修饰词并将其他类放置于同一个包内的方式给成员赋予包访问权.于是包内的其他类也可以访问该成员.
c.继承而来的类既可以访问public成员也可以访问protected成员.
d.get/set方法,以读取和改变数值/

7.访问权限的控制被称为是具体实现的隐藏.
a.访问权限控制将权限的边界划在了数据类型的内部.
b.将接口和具体实现进行分离.

8.public类
a.每个编译单元(文件)都只能有一个public类
b.public类的名称必须完全与有该编译单元的文件相匹配,包括大小写.
c.如果编译单元内完全不带public类,可以随意对文件命名

9.类既不可以是private,也不可以是protected的,只能包访问权限或者public,如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private.

第七章 复用类
1.在新的类中产生现有类的对象称为组合.
按照现有类的类型类创建新类称为集成.
将成员对象置于所要构造的类中(类似于组合),但与此同时在新类中暴露了该成员对象的所有方法(类似于集成)

2.如果Java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其类中的任何 版本.

3.组合和集成都允许在新的类中放置子对象.
组合是显式的方法,通常用于想在新类中使用现有类的功能而非它的接口这种情形.
集成是隐式的方法,通常用于想在新类中使用现有类的功能而非它的接口这种情形.

4.导出类可能比基类含有更多的方法,但必须至少具备基类中所含有的方法,所以向上转型是从一个专用类型向较通用型转换,总是安全的,

5.一个即是static又是final的域只占据一段不能改变的存储空间.

6.类中所有的private方法都隐式地指定为是final的.

7.当将某个类的整体定义为final时,类中所有的方法都隐式指定为final的.

8.所有的static对象和static代码段都会在加载时依程序中的顺序(定义类时的书写顺序)而依次初始化

9.初始化顺序
根基类的static->导出类的static->main(导出类的static方法)->根基类的构造方法->导出类的构造方法.

第八章 多态
1.多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来,创建可扩展的程序–即无论在项目最初床创建时,还是在需要添加新功能时都可以"生长"的程序.

2."封装"通过合并特征和行为来创建新的数据类型.
"实现隐藏"则通弄过将细节"私有化"接口和实现分离开来.
多态的作用则是消除类型之间的耦合关系.

3.Java中除了static方法和final方法之外,其他所有的方法都是后期绑定.
将一个方法调用同一个方法主体类关联起来称作为绑定.若在程序执行前绑定叫做前期绑定.
在执行时根据对象的类型进行绑定,称为后期绑定.

4.多态是一项"将改变事物与未变的事物分离开来的技术".

5.遇到要清理的情况,对象的销毁顺序应该和初始化顺序相反,字段则与声明的顺序相反.

第九章 接口
1.接口和内部类为我们提供一种将接口与实现分离的更加结构化的方法.

2.使用接口的核心原因:
a.为了能够向上转型为多个基类型.
b.防止客户端程序员创建该类的对象.

第十章 内部类
1.内部类把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.

2.当生成内部类的对象时,与外围对象形成联系,所以内部类访问外围对象的所有成员,而不需要任何特殊条件.(所有条件的访问权)

3.一个内部类被嵌套多少层不重要,它能透明地访问所有它所嵌入的外围类的所有成员.

4.每个内部类都能独立继承自一个(接口的)实现,所以无论外围类是否已经继承了某个实现,对内部类都没有影响.

5.内部类的特性:
a.内部类可以有多个类例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立.
b.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口或集成同一个类.
c.创建内部类对象的时刻并不依赖于外围类对象的创建.
d.内部类并没有令人迷惑的"is-a"关系,就是一个独立的实体.

6.内部类允许:
a.内部类用来表示解决问题所必需的各种action().
b.内部类能够容易地访问外围类的任意成员.

7.使用局部类而不使用匿名内部类的一个理由:需要不止一个该内部类的对象.

第十一章
1.如果一个程序只包含固定数量的且声声明周期都是已知的对象,那么这是一个非常简单的程序.

2.Java容器类
a.Collection:一个独立元素的序列,List必须按照插入的顺序保存元素,而Set不能有重复元素;Queue按照排队规则来确定对象产生的顺序;Map:一组成对的"键值对"对象,允许使用键来查找值,AaaryList允许用数字查找值.

3.List的两种类型(list是一种可修改的序列)
a. ArrayList,擅长于随机访问元素,插入和移除元素较慢.
b. LinkedList 通过代价较低的在List中间进行的插入和删除,提供了优化的顺序访问.

4.迭代器遍历并选择序列中的对象,但单向移动.
ListIterator用于各种List类的访问,可以双向移动.

5.LinkList像ArratList实现了基类的List接口,执行类似于在List中间插入和移除时比AaaryList更高效,但在随机访问却要逊色一些.

6.“栈"是通常指"后进先出”(LIFO)的容器.
LinkedList具有能够直接实现栈的所有功能方法.

7.Set不保存重复的元素,添加重复的对象实例将被阻止.

8.HashSet使用的是散列函数,速度最快;TreeSet将元素存储在红-黑树数据中;LinkedHashList使用散列保证了查询速度,使用了链表来维护元素的插入顺序.

9.TreeSet的默认排序是按字典序进行的,想要按照字母本排序可以向TreeSet的构造器传入String.CASE_INSENTIVE_ORDER.

10.collection是描述所有序列容器的共性的根接口,能表示其他若干个接口的共性.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值