Java开发工具Eclipse的安装与使用 正如office一样我们在开发java语言过程中同样需要依款不错的开发工具,目前市场上的IDE很多,这里只演示Eclipse的安装: 一:下载软件: 1.下载地址:http://www.eclipse.org/ 我这里是64位操作系统所以选64bit 二:安装eclipse: 解压后点击eclipse.exe即可使用 接下来就可以使用了 三:创建一个Java工程: 1.选择File下new下的Java project 2.输入工程名 这里输入test然…
前面介绍了同步与加锁两种并发处理机制,虽然加锁比起同步要灵活一些,但是加锁在某些高级场合依然力有未逮,包括但不限于下列几点:1.某块代码被加锁之后,对其它线程而言就处于繁忙状态,缺乏弹性的阈值范围:2.遇到被其它线程加锁的情况,当前线程要么一直等待,要么立即放弃,除了这两种反应之外,没有别的选择了:3.线程A加锁之后,只能由线程A解锁,要是线程A忘了解锁,那么被锁住的资源将无法释放,从而导致其它线程出现死锁的情况:有鉴于此,Java又设计了一种信号量工具Semaphore,试图从根本上解决加锁机…
前面介绍了如何使用画笔工具Graphics绘制各种图案,然而Graphics并不完美,它的遗憾之处包括但不限于:1.不能设置背景颜色:2.虽然提供了平移功能,却未提供旋转功能与缩放功能:3.只能在控件上作画,无法将整幅画保存为图片:有鉴于此,AWT提供了Graphics的升级版名叫Graphics2D,这个二维画笔不但继承了画笔的所有方法,而且拓展了好几个实用的方法,包括设置背景色的setBackground方法,旋转画布的rotate方法,缩放画布的scale方法等.尤为关键的是,Graphi…
Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override {} 又如注解@FunctionalInterface,它的源码定义与之类似: @Documented @Retentio…
上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了.比如说“// 参观朱雀台”为何能够直接跟在当前行后面?“System.out.println”又为何被点号绕了三道湾?显然这里面必定有一些规则需要遵守,好比到了一个国家就要入乡随俗,为了方便游客更好更快地适应当地的风俗,Java帝国特别设立了几个特殊官职,专门负责对内对外打交道的事情.其中有几个官吏经常露面,尤其需要初学者注意,他们是:翻译官.太史公.贸易官,接下来分别介绍如…
数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作.Arrays工具的方法说明如下: Arrays.equals(a1, a2); // 判断a1和a2两个数组是否相等,也就是每个元素是否都相等 Arrays.fill(a, val); // 往数组a全部填入指定的数值val dest = Arrays.copyOf(src, newLength)…
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是通用算法,比如牛顿迭代法.二分查找法等等,这些通用的算法代码结构固定,很多地方会用到,倘若每次都复制粘贴无疑是苦大仇深:基于此,亟需对纷繁复杂的代码段加以梳理,一方面把代码行依据功能进行划分,这样剥离出来的各段代码不会相互影响:另一方面封装通用的算法代码,做到只定义一次,就能被多次调用.这样既提高了…
前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述.一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定义的圆括号内部直接留空.以打印当前时间为例,下面的showTime方法没有输入参数也能正常实现: // 没有输入参数,则方法名称后面的圆括号内部留空. // showTime方法的用途是显示当前时间 private static void showTime() { Date date = new D…
前面介绍了方法的输入参数,与输入参数相对应的则为输出参数,输出参数也被称作方法的返回值,意思是经过方法的处理最终得到的运算数值.这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚至允许不返回任何参数.与输入参数类似,输出参数也需要定义数据类型,它的返回值类型在方法名称前面定义,具体位置参见方法的定义形式“访问权限类型 可选的static 返回值的数据类型 方法名称(参数类型 参数名称)”.这里特别要注意,即使方法不返回任何输出参数,也需定义一个名叫void的返回值类型,而不像输…
方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器.在数学的发展过程中,为了表示四则运算,人们创造了加减乘除符号,对应Java编程的“+”.“-”.“*”.“/”.但是随着运算类型的增多,新的运算符号来不及创造了,于是出现了函数形式的运算操作,譬如三角函数sin.cos等等.这种数学函数就是方法的雏形,对于三角函数来说,角度类似方法的输入参数,而函数值类似方法的输出参数.自从有了方法,大部分的算术计算…
前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true”和“false”的布尔值,并非123之类的数字,因此还需专门的包装类型Boolean来包装boolean.Boolean作为包装类型,与数值包装类型相似,它也拥有三种变量初始化方式.由于布尔包装类型的初始化代码雷同数值包装类型,这里不再赘述,具体代码示例如下: // 初始化包装变量的第一种方式:直…
早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字节大小.但是长整型也只能表达到负2的63次方~2的63次方-1,超出这个范围的巨大整数,竟连long类型也放不下.何况现在不管手机还是电脑的内存都是以GB计量,因此原先锱铢计较几个字节的数值类型便不合时宜了.为此Java又设计了一种大整数类型BigInteger,这个BigInteger能够表示任意…
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允许直接赋值给整型变量 private static void charToInt() { int a = 'A'; System.out.println("int a="+a); int tian = '田'; System.out.println("int tian="…
前面介绍了日历工具Calendar的基本用法,乍看起来Calendar与Date两个半斤八两,似乎没有多大区别,那又何苦庸人自扰鼓捣一个新玩意呢?显然这样小瞧了Calendar,其实它的作用大着呢,接下来不妨深入探讨一下Calendar的几种实际应用,主要包括:Calendar和Date类型互相转换.计算两个日历时间的天数.打印当前月份的月历等,分别说明如下. 1.Calendar和Date类型互相转换虽说Date早就应该被Calendar取代,但毕竟是前辈,而且Java也一直没有抛弃它,特别有…
前面介绍了类的多态性,来自于鸡类的实例chicken,既能用来表达公鸡实例,也能用来表达母鸡实例.可是这导致了一个问题,假如在call方法内部需要手工判断输入参数属于公鸡实例还是母鸡实例,那该如何是好?所谓“雄兔脚扑朔,雌兔眼迷离,双兔傍地走,安能辨我是雄雌”,固然编译器在运行之时能够自动判断这是哪种鸡,可是若让程序员自己辨别倒的确是件伤脑筋的事情.虽说伤脑筋,却也并非无法实现,粗略算来大致有三个办法能派上用场,接下来分别进行阐述.第一个办法,区别公鸡和母鸡,关键在于识别鸡的性别.注意到Chic…
前面介绍了Lambda表达式的用法,从实践中发现它确实极大地方便了开发者,然而不管是匿名内部类还是Lambda表达式,所举的例子都离不开各类数组的排序方法,倘使Lambda表达式仅能用于sort方法,无疑限制了它的应用范围.那么除了sort方法,还有哪些场景能够将Lambda表达式派上用场呢?既然匿名内部类与Lambda表达式都依附于某种接口,追根究底,就得好好研究一下这种接口的特别之处.关于排序方法sort的第二个输入参数,原本定义的参数类型是比较器Comparator,可是这个比较器真正有用…
通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方法给清单对象做初始化赋值,另外提供了专门的Collections工具进行排序.求最大元素.求最小元素等操作.那么涉及到更加复杂的数据处理,游荡如何有针对性地筛选和进一步加功能?依次遍历目标容器,对所有元素逐个加以分析判断,并酌情将具体数据调整至满意的状态,这种千篇一律的业务流程固然能够解决问题,可惜…
前面介绍的各色流式IO在功能方面着实强大,处理文件的时候该具备的操作应有尽有,可流式IO在性能方面不尽如人意,它的设计原理使得实际运行效率偏低,为此从Java4开始增加了NIO技术,通过全新的架构体系带来了可观的性能提升.NIO是“Non-blocking IO”的缩写,意思是非阻塞的IO,与之相对应,传统的流式IO又被称作BIO(“Blocking IO”的缩写),意即阻塞的IO.所谓阻塞与非阻塞,说起来挺拗口,令人不知所云,这都是设计师脑袋短路惹的祸,发明了这么难懂的词汇,害得初学者一脸懵逼…
JavaFX的对话框主要分为提示对话框和文件对话框两类,其中提示对话框又分作消息对话框.警告对话框.错误对话框.确认对话框四种.这四种对话框都使用Alert控件表达,并通过对话框类型加以区分,例如AlertType.INFORMATION表示消息对话框,AlertType.WARNIN表示警告对话框,AlertType.ERROR表示错误对话框,AlertType.CONFIRMATION表示确认对话框.另外,Alert工具还提供了下列方法来操作对话框:setTitle:设置对话框的标题.set…
前面介绍了基于HttpURLConnection的网络访问请求,包括GET方式调用接口.POST方式调用接口.下载网络文件.上传本地文件这四种HTTP操作.虽然通过HttpURLConnection能够实现相应的业务功能,但是它的编码过程却有些繁琐,需要时时刻刻注意有关细节,一不留神便会掉到坑里.比如下列编码细节就经常令初学者头痛不已:1.HttpURLConnection工具独自一人承担了所有的方法实现,分不清哪些方法与请求有关,哪些方法与应答有关:2.HTTP调用的步骤太多,诸如参数设置.开…
前面介绍了AWT窗口及其面板的简单用法,其中展示出来的控件只有按钮一种,还有很多好用好玩的控件有待介绍.首先是文本标签Label,该控件用于显示一段平铺文本,它不花哨也不跳动,完全就是素面朝天的文本字符.不过,即便是文本,也能拥有鲜明的个性,犹如书法那样,可以横排也可以竖排,既可写在白纸上也可写在红纸上,还能以专门的字体来书写如楷书.行书.草书.隶书等等.这些彰显个性的功能,需要调用文本标签的相应方法来实现,下面是Label的常见方法说明:setText:设置文本内容.setAlignment:…
前面介绍了文本标签Label,该控件展示的文字是不可编辑的,若要用户在界面上输入文本,就得使用专门的编辑框控件.在AWT的控件家族当中,用作编辑框的有两种控件,分别是单行输入框TextField和多行输入框TextArea.TextField主要用于输入短小精悍的单行文字,跟Label一样,它拥有setPreferredSize.setText与setFont方法,但没有setAlignment方法,因为输入框内的文字只能向左对齐.除此之外,TextField还提供了下列几个与编辑框有关的方法:…
前面介绍了两种文本输入框的用法,不过实际应用很少需要用户亲自文字,而是在界面上列出几个选项,让用户勾勾点点完成选择,这样既方便也不容易弄错.依据选择的唯一性,可将选项控件分为两类:一类是在方框中打勾的复选框,多个复选框允许同时勾选:另一类是在圆圈中点选的单选框,一组单选框最多只能选中一个.AWT实现复选功能的控件名叫Checkbox,它由两部分组成,左边部分是个支持打勾的方框,右边部分是说明文字.Checkbox类似一种特殊的按钮,只不过Button的文字在按钮内部,而Checkbox的文字在方…
前面介绍了AWT的几种基础控件,从按钮到文本标签,从输入框到选择框,无一例外都能显示文字,唯独无法显示某张图片文件.本以为AWT会提供专门的控件来显示图片,然而偏偏没有意料之中的图像控件,这可真是弱爆了,居然不能显示姹紫嫣红的图片,让程序员情何以堪呀.不过咱程序员不是吃素的,与其坐等天上掉馅饼,不如自己动手编写符合要求的图像视图.AWT自带的界面控件,大多由Component类派生而来,该类与展示有关的方法主要有下列两个:getPreferredSize:该方法可返回控件的推荐宽高.paint:…
前面介绍了如何使用画笔在控件上展示图像,可是图像来源于磁盘图片,无法即兴绘制个性化的图案.所幸画笔工具Graphics不仅能够描绘图像,还支持绘制常见的几何形状,也支持绘制文本字符串,除了绘制图像用到的drawImage方法,Graphics还有下列常见的绘图方法:setColor:设置画笔的颜色.drawLine:在指定坐标的(x1,y1)与(x2,y2)两点之间画条线段.drawRect:以坐标点(x,y)为左上角,绘制指定宽高的矩形边框.fillRect:以坐标点(x,y)为左上角,绘制指…
前面介绍了AWT界面编程的若干技术,在编码实践的时候,会发现AWT用起来甚是别扭,它的毛病包括但不限于下列几点:1.对中文的支持不好,要想在界面上正常显示汉字,还得在运行时指定额外的运行参数“-Dfile.encoding=gbk”:2.Label标签控件居然无法分行展示文本,连换行这么基本的功能都不支持,真是让人醉了:3.AWT没提供专门显示图像的控件,只能由程序员自己定义单独的图像视图,繁琐的操作立马吓跑一票人:考虑到AWT属于Java1时代的产物,种种不足之处尚且情有可原.可是AWT拿来开…
提起AWT的标签控件Label,那个使用体验可真叫糟糕,不但不支持文字换行,而且对中文很不友好,既可能把中文显示为乱码,还不支持博大精深的各种中文字体.所幸Swing的升级版标签JLabel在各方面都做了优化,使之成为一个功能强大的标签控件,那么到底JLabel拥有哪些提升之处呢?且待笔者一一道来. 首先看JLabel相较Label增加的新方法,这些方法主要有下列几个:setOpaque:设置标签的背景是否为不透明.true表示不透明,false表示透明.注意如果想让setBackground方…
前面提过,AWT没提供能够直接显示图像的控件,这无疑是个令人诟病的短板,因为一上来就得由程序员自己去定义新控件,对于初学者来讲很不友好.这个问题在Swing中也解决掉了,不过Swing并未提供单独的图像视图,而是利用标签控件JLabel来显示图像.JLabel的setText方法用来设置标签上的文本,而setIcon方法用来设置标签上的图标,根据两个方法的调用与否状况,标签所展示的内容可分为下列三种情况:1.只调用setText方法,未调用setIcon方法,此时标签只显示文本.2.只调用set…
Swing的输入框仍然分成两类:单行输入框和多行输入框,但与AWT的同类控件相比,它们在若干细节上有所调整.首先说单行输入框,AWT的单行输入框名叫TextField,平时输入什么字符它便显示什么字符,可一旦调用了setEchoChar方法设置回显字符,TextField马上变成只显示密文字符了.然而尴尬之处在于,设置回显字符之后,就没有办法取消原来的回显设置,输入框对象从此只能傻乎乎地显示密文了.如此一来,程序代码难以判断某个输入框究竟会显示明文还是密文,也无法确定输入框文字的加密与否.这不可…
前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了.倘若只是简单信息的罗列,例如商品名称列表.新闻标题列表.学生姓名列表等,尚可使用列表框JList予以展示:倘若要求罗列复杂的排列信息,例如商品订单列表.新闻分类列表.学生成绩列表等等,像这种存在多项细节的信息列表就无法通过列表框表达,而应通过Swing的表格类型JTable加以描述.JTable如其名字所言,它的面貌正是分行分列的表格,每行是一条完整的信息,而每列…