Java编程思想
文章平均质量分 74
MaxGwang
这个作者很懒,什么都没留下…
展开
-
Day15-49.Member initialization
成员初始化Java尽力保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证。所以写成:void f(){ int i; i++;//Error - -i not initialized}就会得到一条出错消息,告诉你i可能尚未初始化。当然,编译器也可以为i赋一个默认值,但是未初始化的翻译 2017-09-01 17:34:40 · 346 阅读 · 0 评论 -
Day7-23.Mathematical operators
算术操作符java的基本算术操作符与其他大多数程序设计语言是相同的。其中包括加号(+)、减号(-)、除号(/)、乘号(*)以及取模操作符(%,它从整数除法中产生余数)。整数除法会直接去掉结果的小数位,而不是四舍五入地圆整结果。Java也使用一种来自C和C++的简化符号同时进行运算与赋值操作。这用操作符后紧跟一个等号来表示,它对于Java中的所有操作符都适用,翻译 2017-08-15 18:36:46 · 239 阅读 · 0 评论 -
Day7-22.Assignment
赋值赋值使用操作符“=”。它的意思是“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何常数、变量或者表达式(只要它能生成一个值就行)。但左值必须是一个明确的、已命名的变量。也就是说,必须有一个物理空间可以存储等号右边的值。举例来说,可将一个常熟赋给一个变量:a=4;但是不能把任何东西赋给一个常数,常数不能作为左值(比如不能说4翻译 2017-08-15 18:36:13 · 209 阅读 · 0 评论 -
Day7-21.Precedence
当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。Java对计算顺序做了特别的规定。其中,最简单的规则就是先乘除后加减。程序员经常会忘记其他优先级规则,所以应该用括号明确规定计算顺序。例如以下语句中的(1)和(2)://: operators/Precedence.javapublic class Precedence{publ翻译 2017-08-15 18:35:51 · 221 阅读 · 0 评论 -
Day7-20.Using Java operators
使用java操作符操作符接受一个或多个参数,并生成一个新值。参数的形式与普通方法调用不同,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的值,这被称为“副作用”。那些能改变其操作数的操作符,最普翻译 2017-08-15 18:35:23 · 193 阅读 · 0 评论 -
Day7-19.Coding style
编码风格在“Java编程语言编码约定”中,代码风格是这样规定的:类名的首字母要大写;如果类名由几个单词构成,那么把它们并在一起(也就是说,不要用下划线来分割名字),其中每个内部单词的首字母都采用大写形式。例如:class AllTheColorsOfTheRainbow{//…..这种风格有时称作“驼峰风格”。几乎其他所有内容—方法、字段翻译 2017-08-15 18:35:02 · 201 阅读 · 0 评论 -
Day10-34.Java has no “sizeof”
在C和C++中,sizeof操作符可以告诉你为数据项分配的字节数。在C和C++中,需要使用sizeof()的最大原因是为了“移植”。不同的数据类型在不同的机器上可能有不同的大小,所以在进行一些与存储空间有关的运算时,程序员必须获悉那些类型具体有多大。例如,一台计算机可用32位来保存整数,而另一台只用16位保存。显然,在第一台机器中,程序可保存更大的值。可以想翻译 2017-08-22 17:03:59 · 274 阅读 · 0 评论 -
Day10-33.Casting operators
类型转换操作符类型转换(cast) 的原意是“模型铸造”。在适当的时候,Java会将一种数据类型自动转换成另一种。例如,假设我们为某浮点变量赋以一个整数值,编译器会将int自动转换成float。类型转换运算允许我们显式地进行这种类型的转换,或者在不能自动进行转换的时候强制进行类型转换。要想执行类型转换,需要将希望得到的数据类型置于圆括号内,放在要进行类型翻译 2017-08-22 17:02:23 · 287 阅读 · 0 评论 -
Day10-32.Common pitfalls when using operators
使用操作符时常犯的错误使用操作符时一个常犯的错误就是,即使对表达式如何计算有点不确定,也不愿意使用括号。这个问题在Java中仍然存在。在C和C++中,一个特别常见的错误如下:while(x= y){//….}程序员很明显是想测试是否“相等”(==),而不是进行赋值操作。在C和C++中,如果y是一个非零值,name这种赋值的翻译 2017-08-22 17:01:49 · 249 阅读 · 0 评论 -
Day10-31.String operator + and +=
字符串操作符+和+=这个操作符在Java中有一项特殊用途:连接不同的字符串。这一点已经在前面的例子中展示过了。尽管与+和+=的传统使用方式不太一样,但是我们还是很自然地使用这些操作符来做这件事情。这项功能用在C++中似乎是个不错的注意,所以引入了操作符重载(operator overloading)机制,以便C++程序员可以为几乎所有操作符增加功能但翻译 2017-08-22 17:01:14 · 281 阅读 · 0 评论 -
Day12-41.break and continue
在任何迭代语句的主体部分,都可用break和continue控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句。而continue则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。下面这个程序向大家展示了break和continue在for和while循环中的例子://: control/BreakAndContinue.java//翻译 2017-08-24 17:42:29 · 284 阅读 · 0 评论 -
Day12-40.return
在Java中有多个关键词表示无条件分支,它们只是表示这个分支无需任何测试即可发生。这些关键字包括return、break、continue和一种与其他语言中的goto类似的跳转到标号语句的方式。return关键词有两方面的用途:一方面指定一个方法返回什么值(假设它没有void返回值),另一方面它会导致当前的方法退出,并返回那个值。可据此改写上面的test()方法,使翻译 2017-08-24 17:41:57 · 249 阅读 · 0 评论 -
Day13-42.The infamous “goto”
臭名昭著的goto编程语言中一开始就有goto关键词。事实上,goto起源于汇编语言的程序控制:“若条件A成立,则跳到这里;否则跳到那里”。如果阅读由编译器最终生成的汇编代码,就会发现程序控制里包含了许多跳转。(Java编译器生成它自己的“汇编代码”,但是这个代码是运行在Java虚拟机上的,而不是直接运行在CPU硬件上。)goto语句是在源码级上的跳转,这使其招致了翻译 2017-08-25 16:36:41 · 216 阅读 · 0 评论 -
Day13-43.switch
switchswitch有时也被划归为一种选择语句。根据整数表达式的值,swith语句可以从一系列代码中选出一段去执行。它的格式如下:switch(integral-selector ){ case intergral-value1:statement;break; case intergral-value2:statement;break; case intergr翻译 2017-08-25 16:45:22 · 217 阅读 · 0 评论 -
Day15-48.Cleanup/finalization and garbage collection
清理:终结处理和垃圾回收程序员都了解初始化的重要性,但常常会忘记同样也重要的清理工作。毕竟,谁需要清理一个int呢?但在使用程序库时,把一个对象用完后就“弃之不顾”的做法并非总是安全的。当然,Java有垃圾回收器负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得了一块特殊的内存区域,由于垃圾回收器只知道释放哪些经由翻译 2017-09-01 17:33:12 · 324 阅读 · 0 评论 -
Day14-47.The this keyword
this关键字如果有同一类型的两个对象,分别是a和b。你可能想知道,如何才能让这两个对象都能调用peel()方法呢://: initialization/BananaPeel.javaclass Banana { void peel(int i) { /* ... */ } }public class BananaPeel { public static void ma翻译 2017-09-01 09:57:57 · 310 阅读 · 0 评论 -
Day14-46.Default constructors
默认构造器如前所述,默认构造器又名无参构造器是没有形式参数的——它的作用是构建一个默认对象。如果你写的勒种没有构造器,则编译器会自动帮你创建一个默认构造器。例如://: initialization/DefaultConstructor.javaclass Bird {}public class DefaultConstructor { public stati翻译 2017-08-31 17:58:27 · 357 阅读 · 0 评论 -
Day14-45.Method overloading
方法重载任何程序语言都具备的一项重要特性就是对名字的运用。当创建一个对象时,也就给此对象分配到的存储空间取了一个名字。所谓方法则是给某个动作取的名字。通过使用名字,你可以引用所有的对象和方法。名字起的好可以使系统更易于理解和修改。就好比写散文—---目的是让读者易于理解。将人类语言中存在细微差别的概念“映射”到程序设计语言中时,问题随着产生。翻译 2017-08-31 17:55:55 · 389 阅读 · 0 评论 -
Day14-44.Initialization & Cleanup
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。初始化和清理(cleanup)正是涉及安全的两个问题。许多C程序的错误都源于程序员忘记初始化变量。特别是在使用程序库时,如果用户不知道如何初始化库的构件(或者是用户必须进行初始化的其他东西),更是如此。清理也是一个特殊问题,当使用完一个元素时,它对你也就不会有什么影响了,所以很容易把它忘记。翻译 2017-08-31 17:55:09 · 262 阅读 · 0 评论 -
Day17-52.Enumerated types
枚举类型在JavaSE5中添加了一个看似很小的特性,即enum关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便地处理。在此之前,你需要创建一个整型常量集,但是这些枚举值并不会必然地将其自身的取值限制在这个常量集的范围之内,因此它们显得更有风险,且更难以使用。枚举类型属于非常普遍的需求,C、C++和其他许多语言都已经拥有它了。在JavaSE5之前翻译 2017-09-08 17:45:02 · 339 阅读 · 0 评论 -
Day16-51.Array initialization
数组初始化数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。数组是通过方括号下表操作符[]来定义和使用的。要定义一个数组,只需在类型名后加上一对方括号即可:int[] a1;方括号也可以置于标识符后面:int a1[];两种格式的含义是一样的,后一种格式符合C和C++程序员 的习惯。不过,前一翻译 2017-09-05 17:59:59 · 438 阅读 · 0 评论 -
Day11-37.if-else
if-else语句是控制程序流程的最基本的形式。其中的else是可选的,所以可按下述两种形式来使用if:if(Boolean-expression)statement或if(Boolean-expression)statementelsestatement布尔表达式必须产生一个布尔结果,statement指用分号结尾的简单语句翻译 2017-08-23 18:04:46 · 233 阅读 · 0 评论 -
Day11-36.Controlling Execution
控制执行流程就像有知觉的生物一样,程序必须在执行过程中控制它的世界,并作出选择。在Java中,你要使用执行控制语句来作出选择。Java使用了C的所有流程控制语句,所以如果读者以前用过C或C++变成,那么应该非常熟悉了。大多数过程型编程语言都具有某些形式的控制语句,它们通常在各种语言间交迭的。在Java中,涉及的关键字包括if-else/while/do-wh翻译 2017-08-23 18:04:13 · 259 阅读 · 0 评论 -
Day10-35.A compendium of operators
操作符小结下面这个例子向大家展示了哪些基本数据类型能进行哪些特定的运算。基本上这是同一个不断重复的程序,只是每次使用了不同的基本类型。文件编译时不会报错,因为那些会导致编译失败的行已用//!注释掉了、//: operators/AllOps.java// Tests all the operators on all the primitive data翻译 2017-08-23 15:13:33 · 246 阅读 · 0 评论 -
Day16-50.Constructor initialization
构造器初始化可以用构造器来进行初始化。在运行时刻,可以调用方法或执行某些动作来确定初值,这为编程带来了更大的灵活性。但要牢记:无法阻止自动初始化的进行,它将在构造器被调用之前。因此,加入使用下述代码://: initialization/Counter.javapublic class Counter { int i; Counter(翻译 2017-09-04 18:13:28 · 324 阅读 · 0 评论 -
Day11-38.Iteration
迭代while、do-while和for用来控制循环,有时将它们划分为迭代语句(iteration statement)。语句会重复执行,直到起控制作用的布尔表达式(Booleanexpression)得到“假”的结果为止。while循环的格式如下:while(Boolean-expression)statement在循环刚开始时,会计算一次布尔表达翻译 2017-08-24 17:39:44 · 207 阅读 · 0 评论 -
Day12-39.Foreach syntax
foreach 语法Java SE5引入了一种新的更加简洁的for语法用于数组和容器(在第16章与第17章中将更多的讨论这种语法),即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。例如,假设有一个float数组,我们要选取该数组中的每一个元素://: control/ForEachFloat.javaimport翻译 2017-08-24 17:40:17 · 259 阅读 · 0 评论 -
Day1-2.Primitive types
在程序设计中经常用到一系列类型,它们需要特殊对待。可以把它们当成基本类型,之所以特殊对待,是因为用new创建的对象会被存储在堆里,所以如果创建的特别是一个小的,简单的变量,往往不是很高效。因此对于这些类型,java采取与c和c++相同的方法。不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中,因此更加高效。Java 要确定每种基本类翻译 2017-08-03 17:28:49 · 297 阅读 · 1 评论 -
Day2-7.Methods,arguments,and return values
Methods,arguments,and return values方法、参数和返回值Java的方法决定了一个对象能够接受什么样的消息。方法的基本组成部分包括:名称、参数、返回值和方法体。下面是它最基本的形式:ReturnType methodName(/*Argument list*/){/*Method body*/}返回类型描述的是在调用方法之后从方法返翻译 2017-08-03 17:34:50 · 278 阅读 · 0 评论 -
Day2-6.Fields and methods
Fields and methods字段和方法一旦定义了一个类(在JAVA中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象),就可以在类中设置两种类型的元素:字段(有时被称作数据成员)和方法(有时被称作成员函数)。字段可以是任何类型的对象,可以通过其引用与其进行通信;也可以是基本类型中的一种。如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个翻译 2017-08-03 17:34:02 · 268 阅读 · 0 评论 -
Day1-5.Scope of objects
Scope of objects对象的作用域Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外。所以假如你采用代码{String s=new String("a String");}//End of scope引用s在作用域终点就消失了。然而,s指向的String对象仍继续占据内存空间。在这一小段代码中,我们无法翻译 2017-08-03 17:33:25 · 236 阅读 · 0 评论 -
Day1-4.Scoping
作用域(Scoping)大多数过程型语言都有作用域(scope)的概念。作用于决定了在其内定义的变量名的可见性和生命周期。在C和C++和Java 中,作用域由花括号的位置决定。例如:{int x=12;// Only x available{int q=96;//Both q&x available}//Only x available//q is翻译 2017-08-03 17:32:24 · 232 阅读 · 0 评论 -
Day1-1.Where Storage lives
当程序运行时,对象是怎么进行放置安排的?内存是怎样分配的?五个不同的存储数据的地方:1.寄存器。Registers最快的存储区,因为它位于处理器内部。但是寄存器的数量有限,所以要按需求进行分配。程序员不能直接控制,也无法在程序中感受到寄存器存在的迹象。(另一方面,C和C++允许向编译器建议寄存器的分配方式)2.堆栈。 The stack位于通用RAM(随机访问存储器)中翻译 2017-08-03 17:22:13 · 214 阅读 · 0 评论 -
Day1-3.Arrays in Java
几乎所有的程序设计语言都支持数组。在C和C++中使用数组是很危险的,因为C和C++中的数组就是内存块。如果一个程序要访问其自身内存块之外的数组,或在数组初始化前使用内存(程序中常见的错误),都会产生难以预料的后果。Java的主要目标之一是安全性,所以许多在C和C++里困扰程序员的问题在Java里不会再出现。Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,翻译 2017-08-03 17:30:58 · 292 阅读 · 0 评论 -
Day8-27.Literals
直接常量一般来说,如果在程序里使用了“直接常量”,编译器可以准确的直到要生成什么样的类型,但有时候确实模棱两可的。如果发生这种情况,必须对编译器加以适当的“指导”,用与直接量相关的某些字符来额外增加一些信息。下面这段代码向大家展示了这些字符。//:operators/Literals.javaimport static net.mindview.util.翻译 2017-08-17 15:06:14 · 236 阅读 · 0 评论 -
Day8-26.Logical operators
逻辑操作符逻辑操作符&& 、||、! 能根据参数的逻辑关系,生成一个布尔值(true或false)//:operators/Bool.java//Relational and logical operators.import java.util.*;import static net.mindview.util.Print.*;public c翻译 2017-08-17 15:05:07 · 261 阅读 · 0 评论 -
Day8-25.Relational operators
关系操作符关系操作符生成的是一个boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,关系表达式会生成true(真);如果关系不真实,则生成false(假)。关系操作符包括,=,==以及不等于!=.等于和不等于适用于所有的基本数据类型,而其他比较符不适用于boolean类型。因为boolean值只能为true或false,“大于”和翻译 2017-08-17 15:03:27 · 338 阅读 · 0 评论 -
Day7-24.Auto increment and decrement
自动增递和递减和c类似,java提供了大量的快捷运算。这些快捷运算使编码更方便,同时也使得代码更容易阅读,但是有时可能使代码阅读起来更困难。递增和递减运算是两种相当不错的快捷运算(常称为“自动递增”和“自动递减”运算)。其中,递减操作符是”—”,意为“减少一个单位”;递增操作符是“++”,意为“增加一个单位”。举个例子来说,假设a是一个int(整数)值,则表达式++a就等价翻译 2017-08-17 15:02:37 · 254 阅读 · 0 评论 -
Day9-28.Bitwise operators
按位操作符按位操作符用来操作证基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位。Java的设计初衷是嵌入电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。但是,人们可能不会翻译 2017-08-18 17:05:46 · 230 阅读 · 0 评论 -
Day9-29.Shift operators
移位操作符移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型(基本类型的一种)。左移位操作符(“有符号”右移位操作符(>>)则按照操作符右侧制定的位数将操作符左边的操作数向右移动。“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号位负,则在高位插入1.Java中增加了一种“无符号”右移位操作符(>>>)翻译 2017-08-18 17:06:28 · 306 阅读 · 0 评论