自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

翻译 1 JavaScript基础:值,变量和控制流

JavaScript基础:值,变量和控制流在计算机的世界内,只有数据(Data)——任何不是数据的东西都不存在。所有这些数据本质上都是bit序列,因为具有本质上的共性。bit代表具有二值性的任何事物,通常用0和1来表示。在计算机中,bit可以表现为电位的高或低,信号的强或弱,CD盘片表面的凹坑和非凹坑值(Value)尽管都是由一串bit位组成,不同的数据却有各自不同的功能。在JavaScri...

2019-11-25 16:09:52 108

翻译 1.5 关于Java的常见误解

1.5 关于Java的常见误解Java 是HTML的扩展Java是一门编程语言;HTML是网页结构的一种描述方式。它们之间唯一的联系是HTML的一种扩展形式,能将Java applet 插入网页中。我使用XML,所以无需JavaJava是一门编程语言;XML是一种描述数据的方式。你可以使用任何编程语言处理XML数据,但是Java API 包含大量处理XML的例程。而且,许多重要的XML工...

2019-10-20 22:30:59 121

翻译 10.3 窗体的放置

10.3 框架的放置JFrame类本身并没有很多方法来改变自身的外观,而是通过继承其父类、爷爷类、曾爷爷类的方式获取很多能改变窗体大小和位置的方法。下面列举最重要的一些:①设置窗体的位置:setLocation,setBounds②设置图标(告知窗口系统在标题栏、任务切换台等地方使用什么图标):setIconImage③改变标题栏文本:setTitle④是否允许用户重新设定窗体大小:se...

2019-10-20 16:04:49 244

翻译 1.4 Java简史

1.4 Java简史本部分提供Java演变的简短历史。材料基于各种出版物(最重要的材料是SunWorld在线杂志在1995年7月的期刊中对Java创始人的采访)。完整的故事要要追溯到1991年,那时的Sun公司,Patrick Naughton和James Gosling(Sun合伙人,也是计算机全才和天才)领导下的一群工程师想要设计一款小型的计算机语言,这种语言能被用于有线电视切换盒之类的消...

2019-10-15 14:56:23 233

翻译 10.2 创建窗体

10.2 创建窗体一个顶层窗口(window)(指不包含在另一个窗口中的窗口)叫做窗体(Frame)。它对应于AWT库中的类Frame。Swing版本的窗体JFrame继承自Frame。JFrame是Swing中少数几个“非绘制”的组件之一。所以,JFrame中的小部件(如按钮,标题栏,图标等)都是由用户的本地窗口系统绘制的,而非Swing所绘制。CAUTION大多数Swing组件以J开头...

2019-10-14 17:21:21 222

翻译 1.3 Java applet和Internet

1.3 Java applet和Internetapplet的思路就是:用户从Internet上下载字节码,并在自己的机器上运行这些下载下来的字节码。运行在网页上的Java程序就叫做applet。你只需要一个支持Java applet的浏览器来为你运行字节码,而无需安装任何软件。每次你访问包含这个applet的网页,都会得到最新版本的程序。最重要的是,由于虚拟机的安全性,你不必担心遭到恶意代码...

2019-10-14 09:52:31 203

翻译 10.1 Swing介绍

10 图形编程到目前为止,我们学过的程序都只是从键盘读取数据,操作数据,将结果打印到控制台。大部分用户并不想这么做。现代的程序和网页也确实不会这么干。本章开始我们将编写使用GUI(图形用户界面)的Java程序。你将学会如何编程来控制窗口在屏幕上的大小和位置,在窗口中展示不同字体的文本,展示图片等。这些有用的技能在你继续后面的章节并编写有趣的程序时会很有价值。后面的两章展示如何对按下键盘,点击鼠...

2019-10-14 00:27:56 208

翻译 1.2.9 高性能

1.2.9 高性能翻译后的字节码的运行速度通常就足够了,不过有时候需要更高的运行速度。字节码可以实时(运行时)翻译成正在运行程序的特定CPU的机器码。早期,用户并不同意“自己码的运行速度就足够了”这句话。今天,JIT编译器已经好用到爆了,这让Java代码能运行得跟传统的C编译器编译后的代码一样快,有时候甚至更快,因为它能获取关于程序的更多信息。例如,JIT编译器能够监视代码的执行频率并只是...

2019-10-13 22:00:35 79

翻译 1.2.6 结构中立

1.2.6 结构中立编译器生成的目标文件格式是结构中立的——只要存在Java运行环境,编译后的代码就能在不同的CPU上运行。因为编译器生成的字节码指令与特定的计算机结构无关。这样的设计使得字节码指令既能够在任何机器上进行解释,也能够实时编译成本地机器码。生成“虚拟机”代码并不是Java首创的。这项技术已被Lisp,SmallTalk,Pascal等使用了多年。当然,解释虚拟机指令要比全速...

2019-10-13 17:48:03 268

翻译 1.2.5 安全性

1.2.5 安全性Java的目标之一是被应用于网络/分布式环境。为了达成这个目标,Java强调安全性。使用Java能够创建抵抗病毒和篡改的系统。从一开始,Java的设计就使得某些攻击无效,如:         运行时栈溢出——蠕虫和病毒的常用手段    &n...

2019-10-13 00:35:10 73

翻译 1.2.2 面向对象

1.2.2 面向对象简单来说,面向对象设计是一种编程技艺,这种技艺更关注于对象(数据)和对象所展现的接口。拿木匠打个比方,一个“面向对象”的木匠最关心的是他正在打造的椅子,其次才是用来打椅子的工具;一个“非面向对象”的木匠首先考虑的是他的工具。Java中的面向对象的特性与C++基本相同。面向对象在Java还没出现的时候就已经很流行了。Java的面向对象特性与C++相似。主要的区别在于C++...

2019-10-12 23:39:26 76

翻译 1.2 Java的特点

1.2 Java的特点Java的作者写过一篇很有影响力的官方文档,其中介绍了他们的设计目标和取得的成果。他们还发表了一篇摘要,这篇摘要是按照下面所列的11个术语进行组织的:简单性面向对象分布式健壮性安全性体系中立性可移植性解释型高性能多线程动态性我们先看看在上述的摘要里,Java设计者关于每个术语是怎么说的,然后我会结合自己对现行Java版本的经验,对每个术语作一番...

2019-10-12 15:07:14 93

翻译 1.1 Java是一个编程平台

第1章 Java简介1996年Java横空出世,风光可谓一时无两,不仅获得计算机出版界的争相吹捧,就连主流媒体(如《纽约时报》《华盛顿邮报》《经济周刊》)也为之摇旗呐喊。Java是唯一荣登NPR(美国国家公共广播台)经典节目《10分钟故事》的编程语言。IBM等6家公司甚至投资1亿美金成立专项风投基金,用于硅谷内使用Java技术的信息产业。本章内容包含Java的历史简述,希望读者喜欢。1.1 J...

2019-10-11 13:51:34 137

翻译 9.4.6 可选操作

9.4.6 可选操作视窗(view)通常都存在一些限制——比如只能读取不能写入,比如不能改变size,比如支持删除但不支持插入(如Map的key view)。如果你试图对一个view进行不合适的操作,将会抛出UnSupportedOperationException。在collection和iterator的API文档中,很多方法被描述为“optional operations”(可选操作)。...

2019-10-11 10:06:49 164

翻译 9.5 泛型工具方法

9.5 算法泛型集合接口有一个巨大的优势——你只需要写一次算法(就可以处理很多类型)。例如,求群体中的最大值。以前的程序员通常使用循环来实现这个算法,例如求数组中的最大值:if(a.length = 0) throw new NoSuchElementException();T largest = a[0];for(int i = 1; i < a.length(); i++) i...

2019-10-10 18:42:57 120

翻译 9.5.1排序和洗牌

9.5.1排序和洗牌1静态方法Collections.sort可以对实现了List接口的集合进行排序。List<String> staff = new LinkedList<>();fill collectionCollections.sort(staff);该方法假定List的元素实现了Comparable接口。如果想用其他的顺序进行排序,可以使用List接口的...

2019-10-08 23:47:50 165

翻译 9.5.2 二分查找

9.5.2 二分查找对于已经排序的数组来说,二分查找效率要明显高于遍历查找。Collections类的binarySearch实现了二分查找算法。必须要注意,被查找的集合首先需要是有序的。该方法的参数是一个实现List接口的集合和一个被查找的元素。集合中的元素可以按照默认的CompareTo方法进行比较,也可以在方法的参数中再提供一个Comparator用于元素间的比较:i = Collec...

2019-10-08 18:20:19 126

翻译 9.5.3 简单算法

9.5.3 简单算法Collections类提供了一些简单而有用的算法。包括寻找一个集合中的最大值,从一个list复制元素到另一个list,提供一堆常量值来填充一个容器,将一个list反序。为什么连这么简单的算法都要添加到标准库中?大部分程序员都能通过简单的for循环实现这些算法。我们更喜欢用标准库的方法,因为它们产生更易读的代码。看下面for循环实现的算法:for(int i = 0; i...

2019-10-08 15:54:54 113

翻译 9.5.4批量操作

9.5.4 批量操作有几个批量复制和移动元素的操作:coll1.removeAll(coll2);从coll1中移除所有属于coll2的元素。相反:coll1.remainAll(coll2);从coll2中移除所有不属于coll2的元素。这里有一个典型应用。假设你想要求两个集合的交集。首先,创建一个新的Set来存储结果:Set<String> result = new ...

2019-10-08 14:58:04 117

翻译 9.5.5 集合和数组的相互转化

9.5.5 集合和数组的相互转化Arrays.asList可以将数组转化为集合:String[] values = ...;HashSet<String> staff = new HashSet<>(Arrays.asList(values));从集合中获得数组更难一些。你可以使用toArray方法:Object[] values = staff.toArray(...

2019-10-08 14:12:14 97

翻译 9.5.6 自己写算法

9.5.6 自己写算法当你要写一个接收一个集合类对象作为参数的方法的时候,在方法中要尽量操作接口而不是具体实现。例如,假设你想要用一系列menu item去填充一个JMenu。自然而然的想法会是这样:void fillMenu(JMenu menu, ArrayList<JMenuItem> items){ for(JMenuItem item: items) menu.ad...

2019-10-08 13:13:25 190

翻译 9.6.2 Enumeration

9.6.2 Enumeration老的collection使用Enumeration接口来遍历元素。该接口具有两个方法:hasMoreElement和nextElement。这与Iterator接口及其方法hasNext和next完全雷同。例如,Hashtable类的方法elements返回一个对象用来遍历此table中的values:Enumeration<Employee> ...

2019-10-08 11:20:37 184

翻译 9.6.1 Hashtable

9.6 遗留代码在Java发布之初,还没有集合框架之前,就存在很多老的容器类了。它们已经被整合进了集合框架之中:9.6.1 HashtableHashtable提供与HashMap相同的功能,两者方法的使用也几乎相同。唯一的区别在于Hashtable的方法是线程同步的。如果你不需要兼容老代码,则应该使用HashMap来代替Hashtable。如果你需要同步访问,就用ConcurrentHa...

2019-10-08 11:19:42 97

翻译 9.6.3 Property Map

9.6.3 Property Map属性映射(property map)是一种非常特殊的映射结构。具有三个特性:①key和value均为String②属性表可保存至文件,也可从文件读取③可使用一个二级表作为默认表。在Java中类Properties实现了抽象类型property map。property map普遍用于指定程序的配置选项。java.util.Properties (f...

2019-10-08 08:52:20 732

翻译 9.6.4 Stack

9.6.1 Stack栈(Stack)从Java 1.0开始就被加入到标准库中了。它支持著名的的push和pop操作。然而,标准库中的Stack类继承自Vector,这在理论上并不是很合理,因为你可以对Stack执行从Vector继承而来的方法:如insert和remove,而这些方法并不是理论上的栈操作:它们除了在栈顶执行弹栈和压栈操作,还可以在栈的任何位置添加和删除元素。java.util...

2019-10-08 08:07:12 70

翻译 9.6.5 BitSet

9.6.5 BitSetBitSet存储一个bit序列(BitSet并不符合数学上的Set定义,BitVector或BitArray这样的名字会更合适)。在需要存储bit序列(例如flags)时,BitSet底层实现比ArrayList<Boolean>更紧凑,因此也更高效。BitSet可以方便地读取、设置和重置单个bit。而用int或long存储bit序列时需要进行繁琐的mask...

2019-10-08 00:47:50 74

翻译 8.6.1类型参数不能被替换为基本数据类型

8.6 泛型的局限性你在使用泛型时需要考虑到它的局限性,泛型的大部分的局限来自于类型擦除。8.6.1 类型参数不能被替换为基本数据类型因为类型擦除后的类型参数被替换成的最大边界也就是Object了,而Object也不能保存基本数据类型。这也没啥大惊小怪的,基本数据类型一直是享受特殊待遇的。好在基本数据类型只有8个,如果用Wrapper类不合适,就写单独的类和方法来处理它们。...

2019-10-02 22:21:45 208

翻译 8.5.4泛型与遗留代码

8.5.4泛型与遗留代码Java泛型在设计时就考虑到与遗留代码的兼容。例如API中JSlider类的方法:void setLabelTable(Dictionary table)参数Dictionary是原始类型的(因为该方法先于泛型存在)。但是在Java 5.0以后,你用到Dictionary时,就应该使用泛型(当然是因为泛型的好处):Dictionary<Integer,Comp...

2019-10-02 22:04:00 351 2

翻译 8.5.3 泛型方法的编译

8.5.3 泛型方法的编译泛型方法跟泛型类一样,也会被擦除。如下面的泛型方法:public static <T extends Comparable> T min(T[] a)擦除之后会变成:public static Comparable min(Comparable[] a)考虑下面的例子:class DateInterval extends Pair<Local...

2019-10-02 09:27:45 285

翻译 8.5.2 对泛型表达式的编译

对泛型表达式的翻译编译器会对泛型方法调用的返回值施加cast编译器对泛型字段的访问施加cast

2019-10-02 07:47:44 82

翻译 8.5.1类型擦除

8.5泛型代码和虚拟机虚拟机中并不存在泛型类型的对象——虚拟机中所有的对象都是普通类类型的。下面讲解编译器是如何“擦除”类型参数的,类型擦除又对我们程序员有什么影响。8.5.1 类型擦除当你定义一个泛型类型的时候,一个对应的原始类型(raw type)会自动生成。这个原始类型跟对应的泛型类型①名称相同,②删除了类型参数,③类型变量被替换成它的边界列表中的第一个边界(无边界的类型变量被替换为O...

2019-10-01 20:56:46 131

翻译 8.4 类型变量的边界

8.4 类型变量的边界有时需要对类或方法中的参数变量施加限定。典型的例子如获取数组中的最小值:class ArrayAlg{ public static <T> T min(T[] a){ \\貌似正确 if(a==null || a.length==0) return null; T smallest = a[0]; for(int i = 1; i < ...

2019-10-01 15:51:01 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除