Java编程思想笔记(第二章)】的更多相关文章

第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(reference)操作对象 类似遥控器(引用)来操作电视(对象) 在Java中你可以创建一个引用,但是没有与任何对象关联,比如: String s; 这个时候如果用则会报错.安全的做法是: 创建一个引用的同时并进行初始化 String s="1111"; 必须由你创建所有对象 New关键字的意思是给我一…
Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5.某一特定类型的所有对象都可以接收同样的消息.   Booch提出一种更简洁的描述:     对象拥有状态(state) 行为(behavior) 和标识(identity) 每个对象都有一个接口 每个对象都属于定义了特性和行为的某个类(特性可以理解为属性的状态,行为可以理解为method) 在面向…
七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add 在尾部增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementExc…
这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_time 2013-12-18 * @use测试基本的两种线程的实现方式 *         测试中断 */ public class BasicThreadTest { public static void main(String[] args) { Counter c1 = new Counter()…
六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add 在尾部增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementExce…
java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自动发现对象何时不在使用. 避免暗藏的内存泄漏问题. System.gc() 强制进行终结动作. 垃圾回收器对于提高对象的创建速度有明显效果.存储空间的释放会影响存储空间的分配. 垃圾回收器不等于析构函数,也不能替代析构函数. 三,用引用操作对象 创建引用,指向对象,进而操作对象 对于基本类型,不用n…
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编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个…
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. 无符号位移:无符号位移不能保持原有正负性,与有符号位移的主要差异主要体现在右移时, 无论数字是正数还是负数,高位统一补0.(无符号左移低位依然是补0) java编程思想里面有这样一句话:当int型数据位移时,只有数值右端的低5位才有用,long型数值只会用到数值右端的低6位. 这里的数值指的是右操作…
Java程序员把内存的控制权交给了Java虚拟机.在Java虚拟机内存管理机制的帮助下,程序员不再需要为每一个new操作写对应的delete/free代码,而且不容易出现内存泄露和溢出. 虚拟机在执行Java程序过程中,会把它所管理的内存划分为若干个不同的数据区域,各个区域有各自的用途,以及创建和销毁时间. <Java虚拟机规范(第二版)>规定了Java虚拟机所管理的内存将包括以下几个运行时数据区域: 线程共享级别:方法区(Method Area).堆(Heap) 线程私有级别:虚拟机栈(VM…
五.List的功能方法 排除Collection已包含的方法外还增加了 boolean addAll(int index, Collection<? extends E> c);从索引位置插入参数中元素 default void replaceAll(UnaryOperator<E> operator) *1.8新增 将几何中元素替换成参数中的 举例: List<Integer> list = new ArrayList(); list.add(1); list.add…
这一章将学习散列机制是如何工作的,以及在使用散列容器时怎么样编写hashCode()和equals()方法. 一.容器分类 先上两张图 来概况完整的容器分类 再细说都为什么会有那些特性. 二.填充容器(省略):创建Collection和Map的生成器 用于测试,没什么知识点提炼. 三.Collection的功能方法 int size();容器大小  boolean isEmpty();容器内没有元素,返回true boolean contains(Object o);容器内含有此参数,返回tru…
2.1 线程安全性 当多个线程访问某个类时,不论这些线程如何交替执行,这个类始终都能表现出正确的行为,且主调代码中不需要任何额外的同步或协同,则称这个类是线程安全的. 类不变性条件(Invariant):约束对象的状态 后验条件(Postcondition):约束对象操作的结果 保证正确的行为是指:任何操作都不会违背类不变性条件或后验条件.在线程安全类的对象的实例上执行的任何串行或并行操作都不会使对象处于无效状态. 2.2 原子性 竞态条件 某个计算过程的正确性取决于多个线程交替执行时序. 注:…
九.散列与散列码 HashMap使用equals()判断当前的键是否与表中存在的键相同. 正确的equals()方法需满足一下条件: 1)自反性.x.equals(x) 是true; 2)对称性.x.equalse(y) 返回true y.equals(x)也得是true; 3)传递性.x.equals(y) 返回true ,y.equals(z) 返回true , x.equals(z)返回true; 4)一致性.如果对象中用于等价比较的信息没有变,那么无论多少次 x.equals(y)返回值…
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040237 "进行面向对象的设计时,一项主要的考虑是:怎样将发生变化的东西与保持不变的东西分隔开." Java 推出了"訪问指示符"的概念,同意库创建者声明哪些东西是客户程序猿能够使用的,哪些是不可使用的.这样的訪问控制的级别在"最大訪问"和"最小訪问"的范围之间,分别包含:public,"友好…
运行时类型信息使得你可以在程序运行时发现和使用类型信息.Java是如何让我们在运行时识别对象和类的信息得呢? 主要有两种方式:1.传统RTTI,他假定我们在编译期间已经知道了所有类型:2.反射,它允许我们在运行时发现和使用类的信息. 一.为什么需要RTTI 我们来看一个例子: 这是一个典型的类层次结构图,基类位于顶部,派生类向下扩展.面向对象编程中的基本目的是:让代码只操纵对基类(Shape)的引用.这样,如果添加一个新类(比如从Shape派生的Rhomboid)来扩展程序就不会影响原来代码了.…
前言 对于某些问题,如果能够并行的执行程序中的多个部分,则回变得非常方便甚至必要,这些部分要么看起来是并发执行,要么是在多处理环境下同时执行.并行编辑可以使程序执行速度得到极大提高,或者为设计某些类型的程序提供更易用的模型.当并行执行的任务彼此开始产生互相干涉时,实际的并发问题就发生了. 一.并发的多面性 并发解决的问题答题上可以分为“速度”和“设计可管理新”两种. 1.更快的执行 想要更快的执行,需要多处理器,并发是用于多处理器编程的基本工具.这是使用强有力的多处理器Web服务器的常见情况,在…
面向对象编程(oop) 1.1抽象的进步 所有编程语言的最终目的都是提供一种“抽象”方法.   难点是 在机器模型(位于“方案空间”)和实际解决问题模型(位于“问题空间”)之间,程序员必须建立起一种联系.造成程序员代码很难编写.因此造成的副作用便是一门完善的“编程方法”学科. 面向对象的程序设计在此基础上则可以利用一些工具表达问题空间中的元素.因为这种表达非常普通,所以不必受限于特定类型的问题. 将问题空间中的元素以及它们在方案空间的表示物称为“对象”(object). 编程对象的五大共同特征:…
第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法   只需将对象引用置于新类中即可. class A{} class B{ A a = new A(); }   如果想初始化这些引用,可在下列位置进行: 在定义对象的地方. 在类的构造器中. 在真正使用这些对象之前,惰性初始化. 使用实例初始化. 7.2 继承语法 当创建一个类时,总是在继承.   在继承过程中,需要先声明"新类与旧类相似&…
练习1:写一个程序,打印从1到100的值 public class Print1To100{ public static void main(String args[]){ for(int i = 1 ; i <= 100 ; i++){ System.out.println("value:" + i) ; } } } 练习2:写一个程序,产生25个int类型的随机数.对于每个随机值,使用if-else语句来将其分类为大于.小于或等于紧随它而随机生成的值. public clas…
1.1 抽象过程 1.所有编程语言都提供抽象编程机制. 2.人们所能够解决的问题的复杂性直接取决于抽象的类型(所抽象的是什么)和质量. 3."命令式"语言(basic,c等)都是对汇编语言的抽象,但是仍然要求解决问题时依赖计算机的结构,程序员必须建立起在机器模型(如计算机)和实际待解决问题(例如一项业务)之间的关联. 4.对机器建模的方式就是只针对待解问题建模.如 lisp和apl,只能解决某个特定问题. 5.面向对象方式则通过向实际待解问题提供表示问题元素的工具而更进一步.这种表示方…
· 大量笔记存放在Github Java文件中,请移步查看:https://github.com/iGuure/AndroidCodeHub/tree/master/Java%20pratice/Thinking%20in%20Java/Collection · 容器类: 1. Collection: List: 有顺序 ArrayList: 数组型 LinkedList: 链表型 -- Stack:栈 -- Queue: 队列 Set: 不能重复 HashSet: 无顺序,获取元素速度最快 T…
关键字 概述:被Java语言赋予特定含义的单词. 特点:组成关键字的字母全部为小写字母. 标识符 概述:给类,接口,包,方法,常量起名字时的字符序列 组成规则:英文大小写字母,数字,$和— 命名规则. 包名:多单词组成时所有字母都小写. 类名接口名:多单词组成时,所有单词的首字母大写 常量名函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写. 注意事项:不能以数字开头.不能是Java 中的关键字.区分大小写要见名知意,驼峰命名 常量 概述:在程序执行的过程中其值不可以发…
7.1组合语法 在一个类中引入多个对象,以提高代码的复用性与功能. 7.2继承语法 使用继承子类可以获得,导出类可以获得基类的成员(变量与方法). 注:这里注意权限控制,若基类中的成员为默认权限,只有在同一包下才能继承得到.protect修饰时,导出类可以获取.public修饰时,任何类都可以拿到.private修饰就属于基类自己的东西了. 为了解决导出类中调用父类同名方法出现递归问题,java提出了super关键字解决这个问题. 在继承体系中,初始化都是由内向外的,即由基类到导出类扩散的,即先…
相关代码例如以下: 1. <span style="font-size:18px;">/*声明与定义的差别*/ #include <iostream> using namespace std; extern int i;//声明 extern float f(float);//声明 float b;//定义+声明 float f(float a)//定义 { return a + 1.0; } int i;//定义 int h(int x)//定义+声明 { r…
这一章将学习散列机制是如何工作的,以及在使用散列容器时怎么样编写hashCode()和equals()方法. 一.容器分类 先上两张图 来概况完整的容器分类 再细说都为什么会有那些特性. 二.Collection的功能方法 int size();容器大小  boolean isEmpty();容器内没有元素,返回true boolean contains(Object o);容器内含有此参数,返回true Iterator<E> iterator(); 返回一个Iterator<E>…
普通内部类默认持有指向所属外部类的引用.如果新定义一个类来继承内部类,那“秘密”的引用该如何初始化? java提供了特殊的语法: class Egg2 { public class Yolk{ public Yolk(){ System.out.println("Egg2.Yolk"); } } } class BigEgg2 { public class Yolk extends Egg2.Yolk { public Yolk(){ } } } 上面这段代码编译无法通过,错误在10行…
打好java基础 后续会增加相应基础笔试题 目录如下 1 对象导论2 一切都是对象3 操作符4 控制执行流程5 初始化与清理6 访问控制权限7 复用类8 多态9 接口10 内部类11 持有对象12 通过异常处理错误13 字符串14 类型信息15 泛型16 数组17 容器深入研究18 Java I/O系统19 枚举类型20 注解21 并发22 图形化用户界面…
Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色.Java程序被编译为可运行于Java虚拟机中的二进制程序,并且假定Java API的class文件在运行时都是可用的.接着虚拟机运行程序,那些API则给予程序访问底层计算机资源的能力.无论Java程序被部署到何处,它只需要与Java平台交互,而不需要担心底层的硬件和操作系统.因此,…
一.标识符 java中标识符的命名规则: 以数字.字母.下划线和$符号组成:不能用数字开头:不能是java的关键字. 注意:不要用$命名标识符.习惯上,$只用在机器自动产生的源代码中. 二.关键字 1.Java所有的关键字都是小写的: 2.字面常量true.false.null都不是关键字,但他们不能用作标识符. 3.关键字goto和const是C++保留的关键字,目前在Java中不能使用.如果出现在Java程序中,虽然Java编译器能够识别它们,但是会产生错误信息. 三.数据类型 char …