![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
钴60
静就好
展开
-
操作符之字符串操作符+和+=
字符串操作符+和+= 这个操作符在Java中有一项特殊用途:连接不同的字符串。尽管与+和+=的传统使用方式不太一样,但我们还是很自然的使用这些操作符来做这件事请。 这想功能用在C++中似乎是个不错的主意,所以引入了操作符重载(operator overloding)机制,以便C++程序员可以为几乎所有操作符增加功能。但十分遗憾,与C++的另外一些限制结合在一起,使得操作符重载成为了一种复杂的特性,程序员在设计自己的类时,必须对此有十分周全的考虑。与C++相比,尽管操作符重载在Java中更易实现(就像原创 2020-06-29 14:05:43 · 1449 阅读 · 0 评论 -
操作符之按位操作符
按位操作符 按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。 按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位,Java的设计初衷是嵌入电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。但是,人们可能不会过多地用到位操作符。 如果两个输入位里都是1,则按位“与”操作符(&)生成一个输出位1;否则生成一个输出位0.如果两个输入位里只要有原创 2020-06-24 13:27:48 · 352 阅读 · 0 评论 -
操作符之逻辑操作符
逻辑操作符 逻辑操作符“与”(&&),“或”(||),“非”(!)能根据参数的逻辑关系,生成一个布尔值(true或false)。下面这个例子就使用了关系操作符和逻辑操作符: //:operators/Bool.java //Relational and logical operators. import java.util.*; import static net.mindview.util.Print.*; public class Bool {原创 2020-06-23 11:50:19 · 509 阅读 · 0 评论 -
操作符之关系操作符
关系操作符 关系操作符生产的是一个boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,关系表达式会生成true(真);如果关系不真实,则会生成false(假),关系操作符包括小于(<),大于(>),小于或等于(<=),大于或等于(>=),等于(======)以及不等于(!=),等于和不等于适用于所有的基本数据类型,而其他比较符不适用于boolean类型。因为boolean值只能为true或false,“大于”和“小于”没有实际意义。测试对象的等价性原创 2020-06-22 11:40:08 · 614 阅读 · 0 评论 -
操作符之自动递增和递减
自动递增和递减 和C类似,Java提供了大量的快捷运算。这些快捷运算使编码更方便,同时也使得代码更容易阅读,但是有时可能使代码阅读起来更困难。 递增和递减运算是两种相当不错的快捷运算(常称为“自动递增”和“自动递减”运算)。其中,递减操作符是“–”,意为“减少一个单位”;递增操作符是“++”,意为“增加一个单位”。举例来说,假设a是一个int(整数)值,则表达式++a就等价于(a=a+1)。递增和递减操作符不仅改变了变量,并且以变量的值作为生成的结果。 这两个操作符各有两种使用方式,通常称为“原创 2020-06-21 11:53:25 · 455 阅读 · 0 评论 -
操作符之算术操作符
算术操作符Java的基本算术操作符与其他大多数程序设计语言是相同的,其中包括加号(+),减号(—),除号(/),乘号(*)以及取模操作符(%,它从整数除法中产生余数)。整数除法会直接去掉结果的小数位,而不是四舍五入地圆整结果。Java也使用一种来自C和C++的简化符号同时进行运算与赋值操作,这用操作符后紧跟一个等号来表示,它对于Java中的所有操作符都适用,只要其有实际意义就行。例如,要将x加4,并将结果赋回给x,可以这么写:x=4。下面这个例子展示了各种算术操作符的用法: //:operato原创 2020-06-21 11:10:12 · 285 阅读 · 0 评论 -
操作符之赋值
赋值赋值使用操作符“=”。它的意思是“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何常数,变量或者是表达式(只要它能生产一个值就行)。但左值必须是一个明确的,已命名的变量。也就是说,必须有一个物理空间可以存储等号右边的值。举例来说,可将一个常数赋值给一个变量: a = 4; 但是不能把任何东西赋给一个常数,常数不能作为左值(比如不能说4=a)。对基本数据类型的赋值是很简单的。基本类型存储了实际的数值,而并非原创 2020-06-20 15:15:28 · 489 阅读 · 0 评论 -
操作符之优先级
优先级当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。Java对计算顺序做了特别的规定。其中,最简单的规则就是先乘除后加减。程序员经常会忘记其他优先级规则,所以应该用括号明确规定计算顺序。例如,以下语句中的(1)和(2): //:operators/precedence.java public class Precedence { public static void main(String[] args) { int x = 1,y = 2,z =原创 2020-06-20 10:58:25 · 498 阅读 · 0 评论 -
操作符之使用Java操作符
使用Java操作符操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不同,但效果是相同的。加号和一元的正号(+),减号和一元的负号(—),乘号(*),除号(/)以及赋值号(=)的用法与其他编程语言类似。操作符作用于操作数,生产一个新值。另外,有些操作符可能会改变操作数自身的值,这被称为“副作用”。那些能改变其操作数的操作符,最普遍的用途就是用来产生副作用;但要记住,使用此类操作符生成的值,与使用没有副作用的操作符生成的值,没有什么区别。几乎所有的操作符都只能操作“基本类型”。例外的操原创 2020-06-20 10:39:28 · 177 阅读 · 0 评论 -
一切都是对象之你的第一个Java程序
你的第一个Java程序 //HelloDate.java import java.util.* public class HelloDate { public static void mian (String[] args) { System.out.println("Hello,it's:"); System.out.println(new Date()); } } 在每个原创 2020-06-20 01:11:06 · 123 阅读 · 0 评论 -
一切都是对象之构建一个Java程序(三)static关键字
static关键字 通常来说,当创建类时,就是在描述那个类的duix的外观与行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。 用两种情形用上述方法是无法解决的,一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即使没有创建对象,也能够调用这个方法。 通过static关键字可以满足这两方面的需要原创 2020-06-06 11:03:40 · 106 阅读 · 0 评论 -
一切都是对象之构建一个Java程序(二)运用其他构件
运用其他构件 如果想在自己的程序里使用预先定义好的类,那么编译器就必须知道怎么定位它们。当然,这个类可能就在发出调用的那个源文件中;在这种情况下,就可以直接使用这个类——即使这个类在文件的后面才会被定义(Java消除了所谓的“向前引用”问题)。 如果那个类位于其他文件中,又会怎么样?你可能会认为编译器应该有足够的智慧,能够直接找到它的位置,但是事实并非如此。想像下面的情况,如果你想使用某个特定名字的类,但其定义却不止一份(假设这些定义各不相同)。更糟糕的是,假设你正在写一个程序,在构建过程中,你想讲原创 2020-06-05 15:45:06 · 144 阅读 · 0 评论 -
一切都是对象之构建一个Java程序(一)名字可见性
名字可见性 名字惯例对任何程序设计语言来说,都是一个重要问题,如果在程序的某个模块里使用了一个名字,而其他人在这个程序的另一个模块里也使用了相同的名字,那么怎样才能区分这两个名字并防止二者互相冲突呢?这个问题在C语言中尤其重要,因为程序往往包含许多难以关联的名字。C++类(Java类基于此)将函数包于其内,从而避免了与其他类中的函数名相冲突。然而,C++仍允许全局数据和全局函数的存在,所以还是有可能发生冲突。为了解决这个问题,C++通过几个关键字引入了名字空间的概念。 Java采用了一种全新的方法来原创 2020-05-25 21:20:38 · 138 阅读 · 0 评论 -
一切都是对象之方法、参数和返回值
方法、参数和返回值 许多程序设计语言(像C和C++)用函数这个术语来描述命名子程序;而在Java里却常用方法这个术语来表示“做某些事情的方式”。实际上,继续把它看做是函数也无妨。尽管这只是用词上的差别。 Java的方法决定了一个对象能够接收什么样的消息。方法的基本组成部分包括:名称、参数、返回值和方法体。下面是它最基本的形式: ReturnType methodName(/* Argument list */){ /* Method body */ }原创 2020-05-24 23:49:48 · 325 阅读 · 0 评论 -
一切都是对象之创建新的数据类型:类
创建新的数据类型:类 如果一切都是对象,那么是什么决定了某一类对象的外观与行为呢?换句话说,是什么确定了对象的类型?你可能期望有一个名为“type”的关键字,当然它必须还有相应的含义,然而,从历史发展角度来看。大多数面向对象的程序设计语言习惯用关键字class来表示“我准备告诉你一种新类型的对象看起来像什么样子”。class这个关键字之后紧跟的是新类型的名称,例如: class ATypeName {/*Class body goes here */} &nbs原创 2020-05-22 13:09:02 · 216 阅读 · 0 评论 -
一切都是对象之永远不需要销毁对象(二)对象的作用域
对象的作用域 Java对象不具备和基本类型一样地生命周期。当用new创建一个Java对象时,它可以存活于作用域之外。所以假如你采用代码 { String s = new String("a string"); }//End of scope 引用S在作用域终点就消失了。然而,s指向的String对象仍然继续占据内存空间。在这一小段代码中,我们无法在这个作用域之后访问这个对象,因为对它唯一的引用已超出了作用域的范围。原创 2020-05-21 18:30:20 · 224 阅读 · 0 评论 -
一切都是对象之永远不需要销毁对象(一)作用域
作用域 大多数过程型语言都有作用域(scope)的概念。作用域决定了在其内定义的变量名的可见性和生命周期。在C和C++以及Java中,作用域有花括号的位置决定。例如: { int x = 12; //Only x available { int q = 96; //Both x & q avaiable } //Only x available //q is "out of scope" } &原创 2020-05-19 17:05:21 · 226 阅读 · 1 评论 -
一切都是对象之必须由你创建所有对象(二)特例:基本类型
特例:基本类型 在程序设计中经常用到一系列类型,它们需要特殊对待。可以把它们想像成“基本”类型。之所以特殊对待,是因为new将对象存储在“堆”里,故用new创建一个对象——特别是小的、简单的变量,往往不是很有效。因此,对于这些类型,Java采取与C和C++相同的方法。也就是说,不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中,因此更加高效。 Java要确定每种基本类型所占存储空间的大小。它们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。这种原创 2020-05-17 11:37:51 · 330 阅读 · 0 评论 -
一切都是对象之必须由你创建所有对象(一)存储到什么地方
必须由你创建所有对象 一旦创建了一个引用,就希望它能与一个新的对象想关联。通常用new操作符来实现这一目的。new关键字的意思“给我一个新对象”。所以前面的例子可以写成: string s = new String("asdf"); 它不仅表示“给我一个新的字符串”,而且通过提供一个初始字符串,给出了怎样产生这个String的信息。 当然,除了String类型,Java提供了大量过剩的现成类型。重要的是,你可以自行创建类型。事实上,这是Ja原创 2020-05-13 13:28:46 · 165 阅读 · 0 评论 -
一切都是对象之用引用操纵对象
用引用操纵对象 每种编程语言都有自己的操纵内存中元素的方式。有时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C和C++里的指针)来操纵对象? 所有这一切在Java里都得到了简化,一切都被视为对象,因此可采用单一固定的语法。尽管一切都看作对象,但操纵的标识符实际上是对象的一个“引用”。可以将这一情形想像成用遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器(引用),在由遥控器来调控电视机(对象)。如果想在房间里四处走走,同时仍能调控电视机,那原创 2020-05-13 11:31:22 · 197 阅读 · 0 评论 -
对象导论
你知道过程型语言看起来像什么样子:数据定义和函数调用。想了解此类程序的含义,你必须忙上一阵,需要通读函数调用和底层概念,以在脑海里建立一个模型。这正是我们在设计过程式程序时,需要中间表示形式的原因,这些程序总是容易把人搞糊涂。因为他们使用的表示语更加面向计算机而不是你要解决的问题。 因为OOP在你能够在过程型语言中找到的概念的基础上,又添加了许多新概念,所以你可能会很自然地假设:由此而产生的Java程序比等价的过程型程序要复杂得多。但是,你会感到很惊喜:编写良好的Java程序通常比过程型程序要简单得多,原创 2020-05-11 00:49:42 · 101 阅读 · 0 评论 -
对象导论之Java与Internet(三)服务器端编程
服务器端编程 前面的讨论忽略了服务器端编程的话题,它是Java已经取得巨大成功的因素之一。当提出对服务器的请求后,会发生什么呢?大部分时间,请求指示要求“给我发送一个文件”,之后浏览器会以某种适当的形式解释这个文件,例如将其作为HTML页面、图片、Java applet或脚本程序等来解释。 更复杂的对服务器的请求通常涉及数据库事务。常见的情形是复杂的数据库搜索请求,然后服务器将结果进行编排,使其成为一个HTML页面发回给客户端。(当然,如果客户端通过Java或脚本程序具备了更多的智能,那么服务器可以原创 2020-05-11 00:37:10 · 98 阅读 · 0 评论 -
对象导论之Java与Internet(二)客户端编程
客户端编程 Web最初的“服务器——浏览器”设计是为了能够提供交互性的内容,但是其交互性完全由服务器提供。服务器产生静态页面,提供给只能解释并显示他们的客户端浏览器。基本的HTML(HyperText Markup Language,超文本标记语言)包含有简单的数据收集机制:文本输入框、复选框、单选框、列表和下拉式列表以及按钮——它只能被编辑来实现复位表单上的数据或提交表单上的数据给服务器。这种提交动作通过所有的Web服务器都提供的通用网关接口(common gateway interface,原创 2020-05-10 00:13:58 · 244 阅读 · 0 评论 -
对象导论之Java与Internet(一)Web是什么
Java与Internet 如果Java仅仅只是众多的程序设计语言中的一种,你可能就会问:为什么他如此重要?为什么他促使计算机编程语言向前迈进了革命性的一步?如果从传统的程序设计观点看,问题的答案似乎不太明显。尽管Java对于解决传统的单机程序设计问题非常有用,但同样重要的是,它解决了在万维网(WWW)上的程序设计问题。 Web是什么 Web一词乍一看有点神秘,就像“网上冲浪”、“表现...原创 2020-05-07 14:15:26 · 166 阅读 · 0 评论 -
对象导论之并发编程
并发编程 在计算机编程中有一个基本概念,就是在同一时刻处理多个任务的思想。许多程序设计问题都要求,程序能够停下正在做的工作,转而处理某个其他问题,然后在返回主程序。有许多方法可以实现这个目的。最初,程序员们用所掌握的有关机器底层的知识来编写中断服务程序,主进程的挂起是通过硬件中断来触发的。尽管这么做可以解决问题,但是其难度太大,而且不能移植,所以使得将程序移植到新型号的机器上时,既费时又费力。...原创 2020-05-07 13:18:39 · 123 阅读 · 0 评论 -
对象导论之异常处理:处理错误
异常处理:处理错误 自从编程语言问世以来,错误处理就始终是最困难的问题之一。因为设计一个良好的错误处理机制非常困难,所以许多语言直接略去这个问题,将其交给程序库设计者处理,而这些设计者也只是提出了一些不彻底的方法,这些方法可用于许多很容易就可以绕过此问题的场合,而且其解决方式通常也只是忽略此问题。大多数错误处理机制的主要问题在于,它们都依赖于程序员自身的警惕性,这种警惕性来源于一种共同的约定,...原创 2020-05-05 20:50:10 · 155 阅读 · 0 评论 -
对象导论之对象的创建和生命周期
对象的创建和生命周期 在使用对象时,最关键的问题之一便是它们的生成和销毁方式,每个对为了生存都需要资源,尤其是内存。当我们不再需要一个对象时,它必须被清理掉,使其占有的资源可以被释放和重用。在相对简单的编程情况下,怎样清理对象看起来似乎不是什么挑战:你创建了对象,根据需要使用它,然后它应该被销毁。然而,你很可能会遇到相对复杂的情况。 例如,假设你正在为某个机场设计空中交通管理系统(同样的模...原创 2020-05-05 15:11:25 · 154 阅读 · 0 评论 -
对象导论之容器(二)参数化类型
参数化类型 在Java SE5出现之前,容器存储的对象都是只具有Java中的通用类型:Object。单根继承结构意味着所有东西都是Object类型,所以可以存储Object的容器可以存储任何东西。这使得容器很容易被复用。 要使用这样的容器,只需在其中置入对象引用,稍后还可以将它们取回。但是由于容器只存储Object,所以当将对象引用置入容器时...原创 2020-04-25 00:43:27 · 159 阅读 · 0 评论 -
对象导论之容器(一)
容器 通常说来,如果不知道在解决某个特定问题时需要多少个对象,或者它们将存活多久,那么就不可能知道如何存储这些对象。如何才能知道需要多少空间来创建这些对象呢?答案是你不可能知道,因为这类信息只有运行时才能获得。 对于面向对象设计中的大多数问题而言,这个问题的解决法案似乎过于轻率:创建另一种对象类型。这种新的对象类型持有对其他对象的引用。当然,你可以用在大多数语言中都有的数字类型来实现相同的...原创 2020-04-20 22:25:10 · 134 阅读 · 0 评论 -
对象导论之单根继承结构
单根继承结构 在OOP中,自C++面世以来就已变得非常瞩目的一个问题就是,是否所有的类最终都继承自单一的基类。在Java中(事实上还包括除C++以外的所有OOP语言),答案是yes,这个终极基类的名字就是Object。事实证明,单根继承结构带来了很多好处。 在单根继承结构中的所有对象都具有一个共用接口,所以它们归根到底都是相同的基本类型。另一种(C++所提供的)结构是无法确保所有对象都属于...原创 2020-04-16 15:31:27 · 143 阅读 · 0 评论 -
对象导论之伴随多态的可互换对象
伴随多态的可互换对象 在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是将其当作其基类的对象来对待。这使得人们可以编写出不依赖于特定类型的代码。在“几何形”的例子中,方法操作的都是泛化(generic)的形状,而不关心它们是圆形、正方形、三角形还是其他什么尚未定义的形状。所有的几何形状都可以被绘制、擦除和移动,所以这些方法都是直接对一个几何对象发送消息;它们不用担心对象...原创 2020-04-16 15:12:00 · 185 阅读 · 0 评论 -
对象导论之继承(二)
“是一个”与“像是一个”关系 对于继承可能会引发某种争论:继承应该只覆盖基类的方法(而并不添加在基类中没有的新方法)吗?如果这样做,就意味着导出类和基类是完全相同的类型,因为它们具有完全相同的接口。结果可以用一个导出类对象类完全代替一个基类对象。这可以被视为纯粹替代,通常称之为替代原则。在某种意义上,这是一种处理继承的理想方式。我们经常将这种情况下的基类与导出类之间的关系称之为is-a(是一个...原创 2020-04-08 15:01:40 · 89 阅读 · 0 评论 -
对象导论之继承(一)
继承(一) 对象这种观念,本身就是十分方便的工具,使得你可以通过概念将数据和功能封装到一起,因此可以对问题空间的观念给出恰当的表示,而不是受制于必须使用底层机器语言。这些概念用关键字class来表示,它们形成了编程语言中的基本单位。 遗憾的是,这样做还是有很多麻烦:在创建了一个类之后,及时另一个新类与其具有相似的功能,你还是得重新创建一个新类。如果我们能够以现有的类为基础,复制它,然后通过...原创 2020-04-07 22:11:13 · 115 阅读 · 0 评论 -
复用具体实现
复用具体实现 一旦类被创建并被测试完,那么它就应该(在理想情况下)代表一个有用的代码单元。事实证明,这种复用性并不容易达到我们所希望的那种程度,产生一个可复用的对象设计需要丰富的经验和敏锐的洞察力。但是一旦你有了这样的设计,它就可供复用。...原创 2020-04-07 20:57:55 · 195 阅读 · 0 评论 -
对象导论之每个对象都提供服务
每个对象都提供服务 当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想像为“服务提供者”。程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或者最好是在现有代码库中寻找)能够提供理想的服务来解决问题的一系列对象。 着手从事这件事的一种方式就是问一下自己:“如果我可以将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题呢?”例如,...原创 2020-04-06 23:03:10 · 192 阅读 · 0 评论 -
对象导论之每个对象都有一个接口
每个对象都有一个接口 亚里士多德大概是第一个深入研究类型(type)的哲学家,他曾提出多鱼类和鸟类这样的概念。所有的对象都是唯一的,但同时也是具有相同的特性和行为的对象所归属的类的一部分。这种思想被直接应用于第一个面向对象怨言Simula-67,它在程序中使用基本关键字class来引入新的类型。 Simula,就像其名字一样,是为了开发诸如经典的“银行出纳员问题”(bank teller ...原创 2020-04-05 20:57:03 · 288 阅读 · 0 评论 -
对象导论之抽象过程
抽象过程 所有编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。所谓的“类型”是指“所抽象的是什么?”汇编语言是对底层机器的轻微抽象。接着出现的许多所谓“命令式”语言(如FORTRAN,BASIC,C等)都是对汇编语言的抽象。这些语言在汇编语言的基础上有了大幅的改进,但是它们所做的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决的问题的结...原创 2020-04-04 21:23:11 · 211 阅读 · 0 评论 -
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而non-persistent方式的消息将被丢弃。...原创 2019-11-15 20:53:01 · 308 阅读 · 0 评论 -
Java JDK中的常见软件包
Java JDK中的常见软件包JDK所提供的所有标准Java类都存放在Java包中,如java.lang包中就提供了利用Java编程语言进行程序设计的基础类。由于系统会自动将java.lang引入,所有不需要在源文件中用import语句来显示地引入这个包。在JDK1,5中常用的包有下面这些:java.lang:语言包java.util:使用包java.awt:抽象窗口工具包javax....原创 2019-10-26 16:09:08 · 1154 阅读 · 0 评论 -
线程的5种状态
线程的5种状态每个Java程序都有一个默认的主线程,对于Java应用程序,主线程是main()方法执行的线索。要想实现多线程,必须在主线程中创建新的线程对象。一个线程从创建到死亡,都处于创建,就绪,运行,阻塞,终止这5种状态的某个状态。 1,创建状态 在程序中用new运算符创建了一个Thread类或子类的实例化对象后,新的线性对象便处于创建状态,此时,它已经有了相应的内存空间,但还未对线...原创 2019-10-25 23:21:12 · 134 阅读 · 0 评论