摘要: scala中用var和val定义变量都是可以的。 用val定义的变量是不可变的,被初始化后值就固定下来,不可以再被修改(这类似于java中的final关键字);用var定义的变量是可变的,可以任意修改。 仍然要注意这里说的不可变是针对变量本身而言,而非变量所指向的实例。比如说如果定义了一个StringBuffer的val变量如val buffer = new StringBuffer(),那么变量... 阅读全文
posted @ 2016-06-01 21:49 robin·张 阅读(1470) 评论(0) 推荐(0) 编辑
摘要: 先来看一段Java中的循环: for (int i = 1; i print(i + ",")) foreach是Range类的一个方法,这方法以一个函数值作为参数。所以要在括号里提供一段函数代码接受一个实参。在这个例子里,实参就是i。箭头“=>”的作用是将左边的参数列表和右侧函数实现分割开来。 阅读全文
posted @ 2016-05-31 22:48 robin·张 阅读(1069) 评论(0) 推荐(0) 编辑
摘要: 又重新开始了scala的学习,因为中断了太长时间,所以这次还得从零开始。学习的过程就记录在这个博客上了。 这次学习的教程是《scala程序设计 java虚拟机多核编程实战》,我在多看上买了电子书。 安装好了scala运行环境以后,先在命令行窗口来一次初体验。在命令行窗口输入如下命令: val number = 7 执行结果如下图: 我们在命令中并没有指明变量number的类型,但是并令执行后... 阅读全文
posted @ 2016-05-30 22:48 robin·张 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 被标题吸引进来的不要骂我。 只是一个简单的实现,随手写了来下载一部喜欢的小说的。示例中的小说只是示例,不是我的菜。 使用了jsoup。挺好用的一个工具。 有需要的话,参考下自己改吧。挺简单的,是吧。 代码如下: package com.zhyea.doggie; import java.io.File; import java.io.FileWriter; import java.io.IOEx... 阅读全文
posted @ 2015-01-31 20:26 robin·张 阅读(1381) 评论(0) 推荐(0) 编辑
摘要: 先不多说,看两个题。 第一题,如下代码执行结果: package com.zhyea.test; public class Test { public static void main(String[] args) { String str = "123"; changeString(str); System.out.print... 阅读全文
posted @ 2014-12-25 09:31 robin·张 阅读(472) 评论(0) 推荐(0) 编辑
摘要: java程序中的对象在运行时会出现两种类型:编译时类型和运行时类型。例如List list = new ArrayList()。其中变量list的编译时类型是List,运行时类型是ArrayList。还有更极端的类型,如通过网络通信传递过来一个对象,则这个对象的编译时类型是Object,但程序运行时又需要调用该对象运行时类型的方法。为了解决这种问题,程序需要在运行时发现对象和类的真实信息,为了解... 阅读全文
posted @ 2014-12-24 22:02 robin·张 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 内容就是标题了。是要重构下上一节的代码,大体上按如下的思路: 功能拆分; 创建必要的工具类; 两个工具类StringUtils和TxtUtils。 StringUtils,主要是获取当前系统的换行符: package com.zhyea.util; public class StringUtils { public static final String... 阅读全文
posted @ 2014-12-22 16:52 robin·张 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 前段时间,在学习lucene的时候,遇到了读取txt文档遇到编码错误的问题。学了几个解决方案,大部分是将文件转十六进制(可以使用UE的Ctrl+H来查看),读取开头的四个标志位来判断。可是总有些文本文件无法识别(我遇到的是部分使用UTF-8编码的文件),后来发现了JCharDet。JCharDet是mozilla(就是firefox那家)的编码识别算法的Java实现,算了,这里是官网,自己看吧。 ... 阅读全文
posted @ 2014-12-22 16:27 robin·张 阅读(2944) 评论(0) 推荐(0) 编辑
摘要: 类加载器说明 类加载器负责将.class文件加载到内存中,并为类生成一个java.lang.Class实例。 一旦一个类被加载入JVM中,同一个类就不会被再次加入了。在JVM中用来判断类的唯一性标识是:类名、类所在的包名和类加载器。 当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构: BootStrap ClassLoader:根类加载器; Extension ClassLoad... 阅读全文
posted @ 2014-12-21 15:42 robin·张 阅读(1474) 评论(1) 推荐(0) 编辑
摘要: 接下来我会写一个lucene的实例。实际上在搜索引擎上随便搜索下都能找到这样的东西。不过还是写一下吧,这也是我学习的经历。 package com.zhyea.doggie; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; ... 阅读全文
posted @ 2014-12-19 17:52 robin·张 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 需要准备的内容: jdk 1.7 eclipse Kepler lucene 4.10.2 luke 4.10.2 以及一些txt文档 其他的不需多说,只简要介绍下luke。 以下内容来自百度百科: Luke是一个用于Lucene搜索引擎的,方便开发和诊断的第三方工具,它可以访问现有Lucene的索引,并允许您显示和修改。 Luke的版本... 阅读全文
posted @ 2014-12-19 14:54 robin·张 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输。实现的机制是允许将对象转为与平台无关的二进制流。 java中对象的序列化机制是将允许对象转为字节序列。这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输。 对象的序列化是将一个Java对象写入IO流;与此对应的,反序列化则是从IO流中恢复一个Java对象。 实现序列化 如果要将一个java对象序列化... 阅读全文
posted @ 2014-12-18 15:10 robin·张 阅读(11322) 评论(1) 推荐(0) 编辑
摘要: JVM和类 调用Java命令运行Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序启动了多少条线程,创建了多少个变量,它们都处于该Java虚拟机进程里,共享该JVM进程的内存区。当系统出现以下几种情况时,JVM进程将被终止: 程序运行到最后正常结束; 程序运行到使用System.exit()或Runtime.getRuntime.exit()代码结束程序; 程序运行过程中遇... 阅读全文
posted @ 2014-12-17 22:42 robin·张 阅读(1252) 评论(0) 推荐(1) 编辑
摘要: 原文见于:http://dbear.iteye.com/blog/6417091、如果父类拥有自定义构造器,但并没有定义不带参构造器,那么子类也一定要自定义构造器,否则无法通过编译。View Code 1 class ClassB{ 2 ClassB(int i){ 3 i... 阅读全文
posted @ 2014-12-17 17:18 robin·张 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 为什么使用代理服务器不需要多说了。 使用Proxy Java提供了Proxy类实现使用代理进行通信。 Proxy类的构造器Proxy(Proxy.Type type, SocketAddress sa)。其中type表示代理类型,代理类型有三种:DIRECT(表示不使用代理)、HTTP(表示使用高级协议代理比如http或FTP)、SOCKETS(表示使用sockets代理)。sa表示代理地址... 阅读全文
posted @ 2014-12-17 17:17 robin·张 阅读(8428) 评论(0) 推荐(1) 编辑
摘要: 传统的IO Java中的InputStream、OutputStream、Reader、Writer这样的面向流的输入输出系统被视为传统的IO。传统的IO是阻塞式的输入输出,并且是通过字节的移动来处理的,即传统的IO一次只能处理一个字节,效率不高。 新IO 新IO和传统的IO有相同的目的,都是用于进行输入输出功能。但是新IO采用内存映射文件的方式来处理输入输出,新IO将文件或文件的一段区域映射到内... 阅读全文
posted @ 2014-12-11 22:57 robin·张 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 通常,使用关闭输出流来表示输出已经结束。但在进行网络通信时则不能这样做。因为我们关闭输出流时,该输出流对应的Socket也将随之关闭,这样程序将无法再从该socket中读取数据。 为了应付这种情况,socket提供了两个半关闭的方法用来只关闭socket的输入流或者输出流,用以表示输出数据已经发送完成。方法详情: shutdownInput():关闭该socket的输入流,程序还可以通过该sock... 阅读全文
posted @ 2014-12-08 22:30 robin·张 阅读(1521) 评论(0) 推荐(0) 编辑
摘要: 系统启动一个新线程成本比较高,当程序中需要创建大量生存期很短暂的线程时,使用线程池可以很好的提高性能。 与数据库连接池类似的是,线程池在系统启动时及创建大量空闲的线程。程序将一个Runnable对象传递给线程池,线程就会启动一条线程来执行该对象的run方法。当run方法执行结束后,该线程并不会死亡,而是返回线程池成为空闲状态,等待执行下一个Runnable对象的run方法。 创建线程池 Java提... 阅读全文
posted @ 2014-12-03 22:23 robin·张 阅读(355) 评论(0) 推荐(0) 编辑
摘要: Person类:package com.zhyea.olproxy.socket;import java.io.Serializable;public class Person implements Serializable { private static final long se... 阅读全文
posted @ 2014-12-03 09:51 robin·张 阅读(1068) 评论(0) 推荐(0) 编辑
摘要: 已知的创建多线程的方法有继承Tread类和实现Runnable方法。此外Java还提供了Callable接口,Callable接口也提供了一个call()方法来做为线程执行体。但是call()方法与run()方法有些不同: call()方法可以有返回值 call()方法可以抛出异常 不过Java不允许Callable对象直接作为Thread的target。而且call()方法还有一个返回值——... 阅读全文
posted @ 2014-12-02 23:08 robin·张 阅读(737) 评论(0) 推荐(0) 编辑
摘要: Java使用ThreadGroup来表示线程组,用以对一批线程进行分类管理。 Java允许程序对线程组直接进行控制,对线程组的控制相当于同时控制这批线程; 用户创建的所有线程都属于指定线程组,如果程序没有显式指定线程属于哪个线程组,则该线程属于默认线程组; 默认情况下,子线程和创建它的父线程处于同一个线程组内; 一旦某个线程加入指定线程组后,该线程将一直属于该线程组,直到该线程死亡,线程不能中途... 阅读全文
posted @ 2014-12-02 22:23 robin·张 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 第二步:实现文件传递。 上一步只是从服务端传递了一个字符串到客户端,这次需要对代码进行调整,实现从服务端获取文件,在客户端将文件存入目标地址。 调整后的代码: 服务端: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInp... 阅读全文
posted @ 2014-12-02 17:30 robin·张 阅读(754) 评论(0) 推荐(0) 编辑
摘要: 当线程在系统内运行时,程序通常无法准确控制线程的轮换执行,但是可以通过一些机制来保证线程协调运行。 由同步监视器对象协调线程 实现这种功能可以借助于Object类提供的wait()、notify()、notifyAll()三个方法(注意,这三个方法属于Object类,不属于Thread类)。这三个方法必须由同步监视器来调用,可以分为两种情况: 对于同步方法,同步监视器默认是当前实例(this),... 阅读全文
posted @ 2014-12-01 22:19 robin·张 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 第一步: 建立服务端客户端,实现端到端通信。因为要传递文件,信号量较大,故使用TCP/IP协议。 服务端和客户端都要建立socket,而后通过socket进行通信。目前只实现服务端到客户端的单向通信。 服务端代码如下: import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; ... 阅读全文
posted @ 2014-12-01 17:37 robin·张 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 如题,使用Java模拟GET和POST请求。使用GET可以实现网页抓取,使用POST可以实现对某些网站登录的暴力破解。不过仅是练习,实际意义不大。 import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; impo... 阅读全文
posted @ 2014-11-27 16:02 robin·张 阅读(7372) 评论(0) 推荐(0) 编辑
摘要: /** * 排序方法整理 * @author zhyea * */ public class Sort { /** * 冒泡排序,从小到大。 * 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换。循环走访序列直到不需要比较。稳定排序。 * @param arr * 待排序的数组 */ pub... 阅读全文
posted @ 2014-11-20 09:46 robin·张 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 多线程操作同一个对象时,容易引发线程安全问题。为了解决线程安全问题,Java多线程引入了同步监视器。同步代码块同步代码块语法格式如下:synchronized(obj){ //此处的代码即为同步代码块}上面语法格式中synchronized后面括号的obj就是同步监视器,上面代码的含义是:线程... 阅读全文
posted @ 2014-11-19 22:28 robin·张 阅读(212) 评论(0) 推荐(0) 编辑
摘要: join线程在某个线程的执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的线程完成为止。join()方法有三种重载形式:join():等待被join的线程执行完成;join(long millis):等待被join线程执行时间最长为millis毫秒。如在mill... 阅读全文
posted @ 2014-11-17 22:56 robin·张 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 计算机网络分层模型OSI分层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;TCP/IP分层模型:物理+数据链路层、网络层、传输层、应用层;IP地址IP地址是一个32位的整数。通常为了便于表示,会将之分为四个8位的二进制整数,每个8位的二进制整数又可表示为一个0~255的十进制数字... 阅读全文
posted @ 2014-11-16 22:28 robin·张 阅读(813) 评论(0) 推荐(0) 编辑
摘要: 线程的生命周期分为:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)五个阶段。线程启动后,随着CPU的调度,线程会在运行和阻塞两种状态间切换。新建:使用new关键字创建一个线程后,线程就处于新建状态;就绪:线程对象调用start方法后,线程处... 阅读全文
posted @ 2014-11-15 22:35 robin·张 阅读(392) 评论(0) 推荐(0) 编辑
摘要: 需求说明:使用Java抓取网页信息,并以字符串的形式返回。 使用Java代码实现: package net.ibuluo.spider.util; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import ... 阅读全文
posted @ 2014-11-07 22:28 robin·张 阅读(627) 评论(0) 推荐(0) 编辑
摘要: 12345678public class Shifty {public static void main(String[] args) {int i = 0;while (-1 << i != 0)i++;System.out.println(i);}}前提:已安装jdk、maven及m2e.这里只说明mave... 阅读全文
posted @ 2014-09-05 08:41 robin·张 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题目如下:interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta extends Beta{ public sta... 阅读全文
posted @ 2014-08-31 22:38 robin·张 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题目为如下代码的执行结果:class Building{}public class Barn extends Building{ public static void main(String[] args){ Building build1 = new Bui... 阅读全文
posted @ 2014-08-31 19:16 robin·张 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 题目为如下代码的执行结果:abstract class Vehicle{ public int speed(){ return 0; }}class Car extends Vehicle{ public int speed(){ return 60; ... 阅读全文
posted @ 2014-08-29 22:08 robin·张 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 题目,如下代码的执行结果:import java.util.ArrayList;class Pizza{ ArrayList toppings; public final void addTopping(String topping){ toppings.add(t... 阅读全文
posted @ 2014-08-28 22:22 robin·张 阅读(239) 评论(0) 推荐(0) 编辑
摘要: Java中有四种访问权限,从大到小依次是:public –> protected –> default(friendly) –> private。 简单说明下: public 作用域是全局; protected 作用域是类内部、同一包下、子类下; default 或称friendly,作用域是类内部、同一包下; private 作用域仅是类内部。 也可见下图: 阅读全文
posted @ 2014-08-26 21:38 robin·张 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 题目——如下代码的执行结果:class Hello{ String title; int value; public Hello(){ title += " World!"; } public Hello(int value){ ... 阅读全文
posted @ 2014-07-18 10:35 robin·张 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 学习目标 maven插件的定义; maven插件的使用。 前言 在手记2中说过maven的阶段命令是通过插件实现的。在手记1中也有简单的示范过插件的用法。但是总觉得有些泛泛了,想在这里再捋一下,以期能更好地掌握maven的插件。 maven插件的定义 还是从插件的定义及创建开始吧。 这里要理解一个词mojo,mojo即Maven Plain Old Java Object... 阅读全文
posted @ 2014-07-02 22:41 robin·张 阅读(1029) 评论(0) 推荐(0) 编辑
摘要: 题一,如下代码的执行结果:class Person{ String name = "No name"; public Person(String nm){name = nm;} } class Employee extends Person{ String empID = "... 阅读全文
posted @ 2014-06-26 16:05 robin·张 阅读(410) 评论(0) 推荐(0) 编辑