非静态内部类作用: 最基本的作用:名字隐藏和组织代码 用例:内部类不访问外部类的元素时可以直接new.(bad style!) 用例:通过外部类的非静态方法返回内部类的引用,这样隐含了内部类对象和其对应的外部类对象的关系(需要先创建外部类对象,然后通过外部类对象创建内部类对象). 注意:内部类访问内部类的元素时,直接new内部类编译会报错 No enclosing(外围的) instance of type xxx is accessible 链接到外部类:访问其外围类所有成员的访问权 实现机制…
1.创建内部类对象 创建内部类对象(相当于new内部类对象) 外围类对象.new 内部类( ). 创建内部类对象一种方法是 外围类有一个方法返回内部类对象. 没有外围类对象就不能创建内部类对象,因为内部类对象会暗暗连接到外围类对象上. 如果是嵌套类(静态内部类)无需外围类对象引用就可创建.Outer.Inner in  = Outer.Inner(); 2.创建内部类引用 in Outer.Inner in ,无论在什么其他类内还是在所在的外围类内. 内部类内创建外围类对象引用out : Out…
接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/details/42441895 daemon是相于user线程而言的,可以理解为一种运行在后台的服务线程,比如时钟处理线程.idle线程.垃圾回收线程等都是daemon线程. daemon线程有个特点就是"比较次要",程序中如果所有的user线程都结束了,那这个程序本身就结束了,不管daemon是否…
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObject(int i) { this.i = i; } @Override protected Object clone() { Object o = null; try { o = super.clone(); } catch (CloneNotSupportedException e) { Syst…
接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说,是保存在一个完全同名的.class文件中).在运行期,一旦我们想生成那个类的一个对象,用于执行程序的Java虚拟机(JVM)首先就会检查那个类型的Class对象是否已经载入.若尚未载入,JVM就会查找同名的.class文件,并将其载入.所以Java程序启动时并不是完全载入的,这一点与许多传统语言都不…
接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2: 为什么不能将基本数据类型置入集合里? 首先,集合的存在就是为了方便对多个对象的操作才出现的,集合是存储对象最常用的一种方式,也就是说,集合的从有到无都是因为对象,人们发现要保存多个对象很麻烦,于是便发明了集合,集合是依赖对象而生的,所以就对基本数据类型"不感兴趣",但是,现在基本数据类…
现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始说起. 一.为什么需要内部类 1.一个内部类的对象可以访问它的外围类的私有数据. 2.对于同一个包中的其他类来说,内部类能够隐藏起来. 3.使用内部类实现多重继承. 二.内部类重要提要 1.在方法内部或者方法内部的作用域的内部类 eg:方法内部的内部类 public interface InnerInterf…
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我也是这么觉得(拙见),你最好熟悉一门高级语言,这样比较容易看懂.这本书也许不如国内一些教材那样,知识点精炼.简洁,但是大神Bruce Eckel更多讲的是Java编程思想,深入浅出.曾在某文章中看到过有人把这本书看过十遍,每看一遍都有不同的收获,希望多年后我也有这样的收获. 作为母校的教材(英文版),当我再次…
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4290955.html 第二十一章并发 第一章对象导论 >>>>封装<<<< 被隐藏(也即封装)的部分通常代表对象内部脆弱的部分,它们很容易被程序员所毁坏,因…
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消息来告知彼此所要做的.  可以把消息想象为对某个特定对象方法的调用请求 3) 每个对象都有自己的由其他对象所构成的存储 4) 每个对象都拥有其类型  每个对象都是某个类的一个实例,这里的 ”类“ 就是 ”类型“ 的同义词 5) 某一特定类型的所有对象都可以接收同样的消息 注:天才计算机大师阿伦凯,他…
begin 2018年1月9日17:06:47 第二章 一切都是对象 Java语言假设我们只进行面向对象的程序设计. 2.1 用引用操纵对象 每种编程语言都有自己的操纵内存元素的方式 操纵内存元素的方式:直接操纵元素.基于特殊语法的间接表示(如C和C++里的指针)操纵元素 在Java中,一切都被视为对象,操纵对象的标识符的是引用. 可以将这一情形想像成用遥控器(引用)来操纵电视机(对象). 当有人想改变频道或者减小音量时,实际操纵的是遥控器(引用),再由遥控器来调控电视机对象(对象). 即使没有…
六:访问权限控制 1.java中的4种访问制权限: (1).public:最大访问控制权限,对所有的类都可见. (2).protect:同一包可见,不在同一个包的所有子类也可见. (3).default:包访问权限,即同一个包中的类可以可见.默认不显式指定访问控制权限时就是default包访问控制权限. (4).private:最严格俄访问控制权限,仅该类本身可见,对外一切类都不可以访问(反射机制可以访问). 七:复用类 1:用super关键字表示超类. 2:子类会在构造器中自动调用基类的构造器…
7.动态代理 代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象.这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色. 什么是代理模式? 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 代理模式有什么好处? 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及到的角色有: 抽象角色:声明真实对象和代理对象的共同接口,这样一来在任何可以使用目标对象…
一切皆对象 Java程序运行时,数据保存到哪里 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹. 堆栈中 驻留于常规 RAM(随机访问存储器)区域,但可通过它的"堆栈指针"获得处理的直接支持. 堆 一种常规用途的内存池(也在 RAM 区域),其中保存了 Java 对象. 静态存储 这儿的"静态"(St…
第1章 对象导论 1.4 被隐藏的具体实现 访问控制的原因: 让客户端程序员无法触及他们不应该触及的部分(不是用户解决特定问题所需的接口的一部分) 允许库设计者可以改变类内容的工作方式而不用担心会影响到客户端程序员 访问权限 Java用三个关键字在类的内部设定边界,这些关键字决定了紧跟其后被定义的东西可以被谁使用 public:表示紧随其后的元素对任何人都是可用的 private:表示除类型创建者和类型的内部方法之外的任何人都不能访问 protected:与private作用相当,区别在于继承的…
十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变. ●Collection保存单一的元素,而Map保存相关联的键值对.有了泛型,你就可以指定存放的对象类型,获取的时候,也不需要类型转换.各种Collection与Map都可以自动调整大小.容器不能持有基本类型.但是会自动包装. ●像数组一样,List也建立数字索引与对象的关联.因此,数组和List都是排…
一.继承与清理 如果某个类需要去清理自身的资源,那么必须用心为其创建回收垃圾的方法,而如果此类有导出的子类,那么必须在导出类中覆盖回收的方法,当覆盖被继承类的回收垃圾的方法的时候,需要注意销毁的顺序应该和初始化的顺序相反.对于字段来说,意味着与声明的顺序相反.应该先对导出类进行清理,然后才是基类.这是因为导出类的清理可能会调用基类的某些方法,所以需要使基类的构件仍起作用而不应过早的销毁他们. 如果需要去销毁被多个成员对象共享的变量的时候,这种情况会变得很复杂.这种情况下,可以使用引用计数法来跟综…
第二章 一切都是对象 No1: 程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器.这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹. (2) 堆栈.驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持.堆栈指针若向下移,会创建新的内存:若…
1.注解 注解也称元数据,是在代码中添加信息的一种方式添加的信息提供给编译器或者工具类框架使用. SE5引入,可以提供用来完整描述程序所需要的信息,往往这些信息是无法用Java来表达的. 注解可以在编译期的到检查. Java内置了三种标准注解 @Override 确保重载方法的方法签名正确性 @Deprecated 废弃此元素,如果使用会发出警告 @SuppressWarnings 关闭不当的编译警告信息 2.定义注解 定义注解和定义接口相似,注解和其他类一样会被编译成class文件. 定义一个…
1.异常的限制 当覆盖方法的时候,仅仅能抛出在基类方法的异常说明里列出的那些异常. 这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 以下的样例是在编译时施加在异常上面的限制: public class BaseBallException extends Exception {} public class Foul extends BaseBallException{} public class Strike extends BaseBallException{}…
final关键字类似const: import java.util.*; public class FinalData { static Random rand = new Random(47); final int valueOne = 9; final int i4 = rand.nextInt(20); static final int INT_5 = rand.nextInt(20); public static void main(String[] args) { FinalData…
如何创建一个包: 比如创建一个包名为com.huawei 则在一个目录下如(d:\java)创建目录com/huawei 然后在huawei目录下创建一个文件Assist.java package com.huawei; public class Assist { public void show() { System.out.println("hello from Assist"); } } 注意:包名要为com.huawei 然后d:\java要在环境变量classpath中 cl…
本章提到的关于==的部分,一个完整的实验如下: class Test { public static void main(String[] args) { Integer i = new Integer(47); Integer j = new Integer(47); Integer i1 = 47; Integer j1 = 47; int i2 = new Integer(47); int j2 = new Integer(47); int i3 = 47; int j3 = 47; Sy…
java对于将一个较大作用域的变量“隐藏”的场景会有保护:编译告警.比如: int x = 5; { int x = 6; } 但是对于类中方法的局部变量和类成员变量确是可以重名的,比如 class Test { int x = 4; String s = "hello"; void show() { int x = 5; System.out.println(this.x); System.out.println(x); System.out.println(s); } public…
抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构建复杂的体系,并将复杂性隐藏在对象之后 每个对象都是某个类的对应实例:类的特性在于可以发送什么样的消息给它 某一特定类型的对象可以接收同样的消息 访问控制:隐藏实现细节 类创建者:创建新数据类型的程序员 客户端程序员:使用各种类以实现快速应用开发 向客户端程序员隐藏实现细节 库设计者可以改变设计方式…
继承中父类的初始化方式 p144页有感 一.提出问题 假设有一些类,这些类有继承关系的时候,当初始化一个子类对象,对于该类的父类而言,发生了什么呢?是仅仅只是复制了一个引用还是也会同时new一个父类对象呢? 二.解释问题 由于涉及到子类和父类之间的关系,从外部看,似乎子类拥有与父类相同的接口,而且可包含一些额外的方法和字段.但继承并非仅仅简单地复制父类的接口了事.创建子类的一个对象时,它在其中包含了父类的一个"对 象".这个对象就象我们根据父类本身创建了它的一个对象.从外部看,父类的对…
1.基本的线程机制 定义任务 public class LiftOff implements Runnable{ protected int countDown = 10; private static int taskCount = 0; private final int id = taskCount++; public LiftOff(){} public LiftOff(int countDown){ this.countDown = countDown; } public String…
覆盖私有方法 class Father { private void f() { System.out.println("Father::f()"); } public static void main(String[] args) { Father father = new Son(); father.f(); //输出:Father::f() } } class Son extends Father { public void f() { System.out.println(&q…
四种访问权限: public private 包访问权限 protected 如果没有明确指定package,则属于默认包 package access.dessert; public class Cookie { public Cookie() { System.out.println("Cookie()"); } void bite() { System.out.println("bite"); } } class Demo { } //private clas…
Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层反编译知识. 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子…