JAVA语言十五讲(转载)
文章平均质量分 86
进击的猿小白
这个作者很懒,什么都没留下…
展开
-
Java语言十五讲(总结)
讲完了。你们或许会问,难道这十几讲就涵盖了Java的主要方面了吗?当然不是,有些很重要的内容我都没有提及,比如网络编程。我们的讲座不是编写教材,并不全面,主要是通过一些主题让大家对Java有一个进阶的理解。一开头我就说了,听众是相关专业毕业并有一年左右的Java编程基础的人。要看入门教科书和语言参考书,有很多选择,我决心不再走人的老路,我想结合自己的经历,为大家展示一位自认为Java布道者的理解。我的一系列讲座,从Java语言,到Web框架探索,到设计模式和算法,再到文本分析和自然语言理解,都是按照这个思路转载 2021-02-25 19:39:14 · 340 阅读 · 0 评论 -
Java语言十五讲(第十五讲容器框架三)
我们到此已经把ArrayList, HashSet,HashMap讲过了。JDK里面还有一些实现,如Queue,Deque,TreeSet,TreeMap等等,我就不一一讲了。现在回顾一下:Collection保存单一的元素,而Map把保存键值对。用泛型技术,就可以将制定类型的对象放到容器中,不会出现类型错误的元素,取出来的时候也不需要再进行类型转换。Collection和Map都不定长,向里面添加更多元素的时候,会自动调整容量。跟数组一样,List维持位置索引和对象的关联,因此是由确定次序的容器。转载 2021-02-25 19:38:21 · 199 阅读 · 0 评论 -
Java语言十五讲(第十四讲 容器框架二)
讲完了。你们或许会问,难道这十几讲就涵盖了Java的主要方面了吗?当然不是,有些很重要的内容我都没有提及,比如网络编程。我们的讲座不是编写教材,并不全面,主要是通过一些主题让大家对Java有一个进阶的理解。一开头我就说了,听众是相关专业毕业并有一年左右的Java编程基础的人。要看入门教科书和语言参考书,有很多选择,我决心不再走人的老路,我想结合自己的经历,为大家展示一位自认为Java布道者的理解。我的一系列讲座,从Java语言,到Web框架探索,到设计模式和算法,再到文本分析和自然语言理解,都是按照这个思路转载 2021-02-25 18:01:22 · 346 阅读 · 0 评论 -
Java语言十五讲(第十三讲 容器框架一)
计算机程序的主要用途是处理各类数据,而这些数据是有结构的,不是散乱的。几十年以前软件大师N. Wirth写道:程序=算法+数据结构。我们在数据结构里面学到过,数据的组织方式,有数组,有链表,有树,有图,有字典等等。我们现在着手探究一下Java里面提供的数据容器框架。Java里面从JDK1.2起引入容器框架,主要分成List,Set,Queue和Map四类。List是有序、可重复的;Set是无序的、不可重复的;Queue代表一种队列;Map是具有映射关系的集合。 这些也叫集合类,但是可能引起重名的混乱,我转载 2021-02-25 18:00:33 · 133 阅读 · 0 评论 -
Java语言十五讲(第十二讲 Multi-Thread多线程12.2)
实例变量如balance在线程间是共享的。有的时候,我们真的需要线程级别的变量,不希望共享,也是有办法的。Java里面有ThreadLocal变量。比如,我们的线程从inventory里面拿东西,上面的程序一次4个。我现在想不同的线程个数拿的个数不同,就可以用一个线程相关的变量。我们改写一下:classInventoryWorkerimplementsRunnable{Inventoryinv;privateThreadLocal<Integer>bag...转载 2021-02-25 17:59:38 · 161 阅读 · 0 评论 -
Java语言十五讲(第十二讲 Multi-Thread多线程12.1)
现代计算机一般是多CPU和多核的,而传统的程序是单线程的,只在一个核上运行,就会浪费掉这些计算资源,于是就发明多线程来充分利用它们。甚至在单CPU单核上也还是能有效果,因为许多时候计算在等IO,空隙时间就可以再运行别的线程。现代操作系统的主要任务就是进行进程和线程的调度。我们深入到操作系统内部,一定会发现一片繁忙的景象。我们先看基本型,实现Runnable接口,写执行代码在run()中,代码如下(NewThread.java):publicclassNewThreadimplementsRu...转载 2021-02-25 17:58:40 · 115 阅读 · 0 评论 -
Java语言十五讲(第十讲 Lambda 表达式)
我们要从匿名类开始讲起,一点点引出Lambda表达式。我比较喜欢Lambda这个词,显得比较有学问似的,一笑。我讲过,技术点不是孤立的,它们之间是有关联的,按照某种层次结构关联在一起就构成一个体系。我们在学习某个技术的时候,要了解它的来龙去脉,把某个技术点放在整体中学习会更有收获。事实上,学术论文一般都要求开头一段讲学术史,这是有道理的。当然,有个别天才能在不引用任何参考文献的情况下提出划时代的理论,横空出世。最著名的就是爱因斯坦在1905年写的《论动体的电动力学》。以前提到过Inner Class内部转载 2021-02-23 19:16:06 · 155 阅读 · 0 评论 -
Java语言十五讲(第十一讲 Script)
大家好。我前两年意识到一件事情,就是Java里面有一个很好的功能许多人都没有注意到,而要做大型一点的系统或者是做扩展性好一点的系统都会用到,这就是script技术。学技术之前,还是先看场景。 我们做的应用系统里面,经常需要设置一些业务规则。比如权限控制,不管是网络层的防火墙还是应用层的数据权限,一般用户是希望设置一个规则,网络权限像IP between 192.168.2.101 and 192.168.2.149,像port=80 or port=8080 or port=21等等,数据权限像l..转载 2021-02-23 19:14:28 · 479 阅读 · 0 评论 -
Java语言十五讲(第九讲 IO和NIO)
一个完备的语言可以自成体系,并不需要与外部文件打交道,不过这种说法只是理论上的,实际上任何一个语言都需要与外部文件进行数据交换。一个不能与外部进行任何交换的系统似乎用处不大,一个封闭的单细胞怕是生存不下来,广言之,“闭关锁国”真是要不得啊。Java一生下来就有了对I/O的支持,后来在Java1.4版本中增加了一套平行的API即NIO,这些新的API都是为了提高性能而设计的。在Java7之后又有了NIO2,改进了File操作,对所有文件系统提供了统一的支持。在具体看程序之前,我们先搞清楚一下I/O的概念,转载 2021-02-23 19:13:34 · 130 阅读 · 0 评论 -
Java语言十五讲(第八讲 Regular Expression正则表达式)
A regular expression(简写成RegEx) defines a search pattern for strings. 正则表达式在文本的搜索编辑的场景中很有用处。RegEx并不是Java发明的,可以说很久很久以前就出现了。1950年代,美国数学家Stephen Cole Kleene提出,后来随着Unix普及开。它从左往右逐个字符扫描文本,找到匹配的模式,继续往下扫描,模式可以使用一次或者多次。JDK1.4版本开始支持了。我们不用编程序就在用正则了。一个例子就是在command窗口执转载 2021-02-23 19:12:45 · 319 阅读 · 0 评论 -
Java语言十五讲(第七讲 InnerClass)
同学们,这一次讲座,我们讲一下Inner Class内部类。我们平时写的程序是由一个个类构成的,这些类之间是相互独立的关系。我们说过,这种思路源自对现实世界的模拟,拉近了“问题空间”和“解决空间”。因此简化了系统的设计。而Inner class 内部类是指一个类是另一个类的内部成员,定义在某个类的内部的,对外可能可见也可能不可见。基本形式还是蛮简单的,我们看一个例子:publicclassOuterClass{privateStringouterName;publ...转载 2021-02-23 19:11:53 · 134 阅读 · 0 评论 -
Java语言十五讲(第六讲 Proxy代理)
Proxy是代理的意思。在系统搭建的时候,经常会有用到代理的地方,如一个公司访问外网的代理,比如服务器端的反向代理,远程调用代理,还有为了安全或者灵活采取的访问代理,这些都是代理。日常生活中,我们会经常遇到代理的场景。比如说旅行社,我们一般人没有那么多时间和专业能力安排好自己的行程,就只要告诉代理就可以了,它会把最终的服务提供者如航空公司,铁路,酒店什么的都屏蔽掉,我们只跟代理打交道就行。计算机系统就是借鉴了现实世界的这个场景。从程序上来讲,为了访问A对象的方法,有的时候,我们不想直接把A暴露出来,就转载 2021-02-23 19:11:04 · 168 阅读 · 0 评论 -
Java语言十五讲(第五讲 Generics泛型)
前几次讲座,我们在程序里面看到了Generics,今天我们就来专门谈一谈。先看Generics的作用:TheyweredesignedtoextendJava'stypesystemtoallow“atypeormethodtooperateonobjectsofvarioustypeswhileprovidingcompile-timetypesafety”。这里明白地指明了Generics泛型的两个用处,一是允许一个类或者方法操纵不同类型的对象,二是提...转载 2021-02-23 19:09:59 · 154 阅读 · 0 评论 -
Java语言十五讲(第四讲 Event)
今天我们来谈一谈Java里面的Event事件机制。程序的结构在不同的时代是在变化的。刚学编程序的时候,老师总会讲,程序是一个流程,线性执行,分支跳转,循环,有时候加上递归。我们总是能一步步跟踪下来,知道程序确切的运行次序。后来就会碰到事件的概念,程序先是准备好了,然后等待你做出某种反应,输入,键,鼠标,程序获取事件的消息,执行相关的动作。这种程序结构之下,不再有事先确定的运行次序了。刚开头遇到这种程序的时候,还真有点不习惯。印象最深刻的就是将近三十年前刚学到Windows编程的时候,看的第一个程序简直把转载 2021-02-23 19:08:59 · 3539 阅读 · 0 评论 -
Java语言十五讲(第三讲 Reflection)
知识点之间是有逻辑关联的,配合在一起构成一个体系。讲了前两次,大家都发觉了会用到一个共同的知识点,叫Reflection反射。那么今天我就来给大家讲讲这个Reflection,也有好几个同学提出希望进一步了解一下。这个词的中文翻译不是很好,不容易从字面体会到含义。按照英文词典的解释,Reflection的常用的一个意思是the image of something in a mirror(映照出的影像)。人拿着镜子干什么?是看自己。对,反观自身,就是Reflection的本质。它是Java语言的一个特性转载 2021-02-23 19:07:53 · 136 阅读 · 0 评论 -
Java语言十五讲(第二讲 ClassLoader 2.2)
首先要明白一个问题:为什么要写自己的Class Loader?不管那么多不是一样好好在用吗?一般情况确实是这样,不过有些时候为了一些特殊需求,我们会用到自己定制的Class Loader。比如1998年,Sun内部为完成JDK1.2忙得热火朝天,我也在里面打酱油,我们有一个小组提供一个工具,给Java生成的字节码加密,原因是字节码太规整,用一些工具很容易反编译,反编译之后的结果很容易供人看懂(比许多程序员手工编的程序还容易懂),导致知识产权保护不力。于是就想着把.class文件加密,但是一个加密之后的.cl转载 2021-02-23 09:22:33 · 86 阅读 · 0 评论 -
Java语言十五讲(第二讲 ClassLoader 2.1)
1928年,狄拉克(Dirac)写下了电子的相对论量子力学方程即狄拉克方程,算出了有负能量,预言了正电子的存在,进而认为世界有反粒子反物质。大家都觉得荒唐,为什么没有观测到反物质呢?狄拉克说,那是因为反物质无处不在,就像鱼儿在水里面意识不到水的存在,只有跳出水面才会意识到水。这就是后来大家通称的“狄拉克之海”。我们习以为常的无处不在的事物,会经常被我们所忽略,觉得它们不存在似的,比如空气,只有当雾霾发生的时候或者憋住了没有空气的时候我们才真切感受到空气也是一种真实存在的东西。以前有学生问我Class转载 2021-02-22 19:06:04 · 114 阅读 · 0 评论 -
Java语言十五讲(第一讲 Annotation)
第一讲Annotation在编Java程序的时候,我们经常会碰到annotation。比如:@Override我们在子类继承父类的时候,会经常用到这个annotation。它告诉编译器这个方法是override父类的方法的。@WebServlet("/myservlet")在进行Web开发的时候,我们用这个annotation表示这个类是一个servlet。Web容器会识别这个annotation,在运行的时候调用它。很多人说annotation是注释,初看起来有一点像,它对程序的编写...转载 2021-02-20 16:56:23 · 221 阅读 · 0 评论