标签‘java’

Java方法究竟是值传递还是引用传递?

一直以来,Java地址引用概念的影响,认为Java传参分为值传递和引用传递,最近因为追究JavaScript的传递方式,遂翻出Java相关资料看了一下,发现原来这么久一直理解错了。Java中只有按值传递,没有按引用传递!

这里同样涉及到堆与栈的概念,至于区别,这里就不再赘述了,和JavaScript的说法类似,可以参考前面的《JavaScript函数究竟是值传递还是引用传递?》。

对于这个问题,网上说法各异,《Core Java》的作者,以及JAVA的创造者James Gosling都认为当一个对象或引用类型变量被当作参数传递时,也是值传递,这个值就是对象的引用,因此JAVA中只有值传递,没有引用传递。还有一种说法是引用可以看作是对象的别名,当对象被当作参数传递时,传递的是对象的引用,因此是引用传递。当然,也有《Thinking in Java》作者Bruce Eckel站在了中立的立场上。 查看更多...

Jersey2 模拟登陆网站及登陆后301重定向识别

周末群里有人希望帮他搞个程序采集某个网站数据,虽然说没什么技术难点又不缺那点钱,但是好奇心还是比较重,没事看了看,最基本的基于SESSION的认证,POST个用户名密码即可,用java写的话我通常采用HttpClient,很强大,很通用,但是最近时不时有看过Jersey2的一些东西,貌似和我之前熟知的1.x差异挺大,就刚好拿来试试(不是接单帮搞数据,单纯的玩技术,采集别人数据的事我可不做)。

实践下来,发现Jersey2的API写起来更清爽了,因为是用来采集,这里只用了Jersey-client相关功能,期间遇到一些小问题,就是登陆成功后目标网站是301重定向到新页面的,而Jersey2的API调用后还保留在原始页面,最终导致SESSION无效,不能进行下一步操作,Stackoverflow上搜了下,最终解决了,很简单,如下 查看更多...

初识Kotlin

Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。作为目前广受欢迎的 Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。

Kotlin设计目标是

1、创建一种兼容Java的语言

2、让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针

3、让它比Java更简洁,通过支持variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation等实现。

4、让它比最成熟的竞争对手Scala语言更加简单。 查看更多...

Java结合Groovy让程序支持动态算法

最近项目在做一个度量平台,项目目标是整合大量数据,结合各种度量指标的算法,以图表等形式展现数据优劣趋势等。

至于前台的实现技术、架构等内容不在我们讨论范围内,直接忽略,后台系统架构则采用纯Java的后台,结合多线程、Quartz定时器等技术实现采集、计算,但只是实现了预定义指标、算法的计算(使用系统预定义算法,即程序固定写死的算法)。说这么多,大家应该发现了,问题就在这,大多比较强大的度量系统,肯定有一套自己独有的算法规则,可以使用定义好的规则自定义算法,而我们的系统则是一成不变的固定算法,即便说可以添加,也是改Java代码实现,带来的工作量可是不小,而且系统会越来越庞大,很难维护。

废话不说,下面就大概聊一下这里要出厂的主角——Groovy,Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。看样子是很诱人,而且还可以直接使用而不必编译(这里的不用编译实质上是有点争议的,因为虽然Groovy脚本可以及时生效,但在其作为对象使用时还是使用Groovy本身提供的类库生成了JVM所认识的字节码,只不过我们看不到这个编译后的文件而已,当然,为了运行效率的提高,你依然可以将其编译成class文件,但前提是你写好的*.groovy文件放在编译目录,而且一旦编译,就不能实现我们的动态算法功能了,这里我们要讨论的就是动态算法的融入,故不再赘述)。 查看更多...

离线更新Android Studio

手动更新适合以下场景:
1. 目前版本与Gradle版本不一致。
2. 错误 IllegalStateException: Can’t deserialize target data of key ‘IdeaAndroidProject’.
Given class loaders: [PluginClassLoader[org.jetbrains.android, 10.0]]:
3. 新建工程出错,在线更新更新失败。
4. 无外网,不能在线更新。

我们采用离线更新的方法解决:

1.获取安装的Android Studio 的Build Number
如果已经安装了Android Studio,那么我们只需要增量更新即可。所以下载更新jar包即可,首先要知道自己当前的Android Studio的版本号,Help-》About。

Build #AI-135.1404660 135.1404660即为版本号 查看更多...

EhCache参数及磁盘持久化加载

EhCache是不错的Java开源缓存模块,Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。

你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处:
1、在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
2、发布时可更改Cache配置。
3、可再安装阶段就检查出配置错误信息,而避免了运行时错误。
如下是基本的ehcache.xml

<ehcache>
<diskstore path="java.io.tmpdir"></diskstore>
<defaultcache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"></defaultcache>
</ehcache>

你可以配置defaultCache,可用于所有cache,也可以针对每个cache配置不同的xml 查看更多...

使用Spring的getHibernateTemplate()进行批处理(JDBC兼容方案)

一直很抵触hibernate,原因不多说,总知是能不用就不用。最近项目有大量数据导入的需求,一直出现连续导入10w左右就内存溢出之类的情况,开启事物,分页flush session还是挺慢,换对象为SQL,拼装语句块直接执行效果也不理想。看到网上说的使用传统批处理速度要高10倍左右,于是试了试,还算可以。

由于项目其他地方有采用hibernate,甚至还用了iBATIS,不能随意更换框架或者改动接口。

网上很多采用sessionFactory.connection();获取Connection的文章,用过的朋友可能就知道,这个方法在Hibernate3.3.2版本中已被弃用。
替代方法:SessionFactoryUtils.getDataSource(sessionFactory).getConnection();
也可以直接使用:((SessionFactoryImplementor)sessionFactory).getConnectionProvider().getConnection();

获取到Connection后就好说了,做法完全是传统Jdbc的。通过这个方法单独实现一个大批量插入的接口也不是什么难事了,这里不再赘述。

Java与Flex构建桌面程序的开发框架Smartinvoke

Java程序员,如果你想快速开发出像Flex那么炫丽的桌面程序,可以考虑使用smartinvoke, 因为它是一个使用Java做后台逻辑,Flex做界面的桌面程序开放框架。
它的优势在于:
1.使用Flex做界面,界面开发效率大大提高,界面很美观,自定义程度高。
2.Java做逻辑,Flex做展示,展示部分代码与业务逻辑代码截然分开。大大提高代码的可维护性。
3.Java与Flex相互调用非常简单,提高Java代码的可重用性。

Flex程序员,如果你正在为Adobe AIR的运行缓慢,内存泄漏,后台功能简单等问题困扰,你可以考虑使用 smartinvoke,因为它很好的解决了Adobe AIR的问题。smartinvoke为Flex程序构造了一个Java运行环境,这样 Flex就可以像调用本地as代码一样直接调用Java中的对象,以实现强大的功能。 查看更多...

用Java发起HTTP请求与获取状态码(含状态码列表)

在使用Java请求Web程序比如访问WebService接口时,通常需要先判断访问URL的有效性,这里就Java发送HTTP请求的方式做简单记录,按照前辈们的说法,Java发HTTP请求,最常见的无非是两种,一种是用java.net.URLConnection,另一种则是大名鼎鼎的HttpClient。使用java.net.URLConnection比较麻烦,而HttpClient则比较简便。以发送POST请求为例

java.net.URLConnection方法如下:

private static void urlConnectionPost() {
    StringBuilder responseBuilder = null;
    BufferedReader reader = null;
    OutputStreamWriter wr = null;
    URL url;
    try {
        url = new URL("http://www.poorren.com");
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setDoOutput(true);
        conn.setConnectTimeout(1000 * 5);
        wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write("");
        wr.flush();
        // Get the response
        reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        responseBuilder = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            responseBuilder.append(line + "\n");
        }
        wr.close();
        reader.close();
        System.out.println(responseBuilder.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

查看更多...

无觅相关文章插件,快速提升流量