Month: May 2017

JAVA: 理解Java中的类初始化

在运行 Java 代码时,很多时候需要弄清楚程序执行的流程,而面向对象的 Java 程序并非像主要为面向过程而设计的 C 语言一样去顺序执行(简单按照代码的顺序),这使得对于类文件的加载以及执行流程的理解非常重要。本文简单介绍了 Java 类的初始化部分具体过程,包括成员变量、静态代码块、构造函数等的初始化时机及执行流程。 初始化时机 根据 javase 8 的文档说明[1],一个类(本文暂不考虑接口)T 将在下列情况第一次出现前立即被初始化: T 的一个实例被创建[2]; T 的一个静态方法被调用; T 声明的一个静态变量被赋值; T 声明的一个静态变量被使用并且这个变量不是常量[3]; 暂不考虑这种情况(涉及到顶层类,断言,内部类等)… Read More

JAVA:获得平台相关的行分隔符、路径分隔符,兼容各平台

【问题】 不同系统平台下的行分隔符、路径分隔符等常常不同。如 行分隔符在windows 下是 \r\n,在Linux下面是 \n, 在Mac下是 \r 路径分隔符在windows下是 \ ,在LInux下是 / ——来自网络资料 如何在Java程序获取当前平台的分隔符,以及其他系统相关的状态呢? import java.util.Properties; public class SeparatorUtils { /* system properties to get separators */ static final Properties PROPERTIES = new Properties(System.getProperties()); /** * get… Read More

JAVA: 史上最全maven pom.xml详解

什么是pom? pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。 快速察看: xml 代码 <project> <modelVersion>4.0.0</modelVersion> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> &… Read More

JAVA: Java8流逐行读取文件

在Java8中,可以使用Files.lines读取文件的流。 c://lines.txt – 用于测试的简单文本文件 line1 line2 line3 line4 line5 核心代码: Write to file using BufferedWriter //Get the file reference Path path = Paths.get("c:/output.txt"); //Use try-with-resource to get auto-closeable writer instance try (BufferedWriter writer = Files.newBufferedWriter(path)) { writer.write("Hel… Read More

JAVA: Google Sheet API V4 入门二 :基本写入

利用 Sheets API,您可以向单元格、范围、范围集以及整个工作表写入值和公式。 本页面上的示例说明了如何使用此 API 的 spreadsheets.values 集合实现一些常用的写入操作。 请注意,也可以使用 spreadsheet.batchUpdate 方法写入单元格值,如果您希望同步更新单元格格式设置或 spreadsheets.values 集合不会影响的其他属性,此方法将非常实用。不过,对于简单的值写入操作,使用 spreadsheets.values.update 或 spreadsheets.values.batchUpdate 更简单。 在这些示例中,占位符 spreadsheetId 用于表示您需要提供… Read More

JAVA: Google Sheet API V4 入门一 :基本读取

利用 Sheets API,您可以读取单元格、范围、范围集以及整个工作表中的值。 本页面上的示例说明了如何使用此 API 的 spreadsheets.values 集合实现一些常用的读取操作。您也可以使用 spreadsheets.get 方法读取单元格值,不过在大多数情况下,使用 spreadsheets.values.get 或 spreadsheets.values.batchGet 更加简单。 在这些示例中,占位符 spreadsheetId 用于表示您需要提供电子表格 ID 的位置,可以从电子表格网址中找到此 ID。要读取的范围在请求网址中使用 A1 表示法指定。 这些示例均假设要读取的电子表格在其第一个工作表(“Sheet… Read More

JavaScript 无依赖jQuery 用法之Ajax Requests JavaScript without jQuery : You Don’t Need jQuery!

Ajax Requests Many developers who learned web development through a jQuery lens probably think that jQuery is doing something magical when you invoke the $.ajax method. That couldn’t be further from the truth. All of the heavy lifting is done by the browser via the XMLHttpRequest object. jQuery’s ajax is just a wrapper around XMLHttpRequest…

Chrome Extension: Chrome.storage 存储API简单使用 (缓存,cache)

有时候我们不满足于localStorage只能保存string的单调功能,那么试一试chrome.storage中存储多种类型的本领? *.本文中的操作实例仅仅使用storage.local,其他API都类似。 声明权限 { "permissions": ["storage"] } 保存数据 // chrome.storage.local.set函数需要两个参数,一个为存储对象,一个为回调函数 chrome.storage.local.set({ string: '可以存储字符串', array: ['或者', '数组'], object: {k: '或者', v: '对象'}, int: 111 }, function(){ console… Read More

Chrome Extension : 事件交互实例 (消息传递, sendMessage,connect,onConnect,onMessage)

alert.js alert('hello ' + document.location.href); manifest.json { "manifest_version": 2, "name": "Click to execute", "description": "Execute script after click in popup.html (chrome extension) http://stackoverflow.com/questions/20764517/execute-script-after-click-in-popup-html-chrome-extension.", "version": "1.0", "icons":… Read More

Javascript: 二维数组转一维数组(合并数组) Convert a 2D array to a 1D array

Here, I’m trying to convert arrToConvert to a 1D array. var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]]; console.log(get1DArray(arrToConvert)); //print the converted array function get1DArray(2dArr){ //concatenate each element of the input into a 1D array, and return the output //what would be the best way to implement this function? }  … Read More

JavaScript: JSON对象 (JSON格式, JSON.stringify()和JSON.parse()的用法)

JSON格式 JSON格式(JavaScript Object Notation的缩写)是一种用于数据交换的文本格式,2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式。 相比XML格式,JSON格式有两个显著的优点:书写简单,一目了然;符合JavaScript原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON迅速被接受,已经成为各大网站交换数据的标准格式,并被写入ECMAScript 5,成为标准的一部分。 简单说,每个JSON对象,就是一个值。要么是简单类型的值,要么是复合类型的值,但是只能是一个值,不能是两个或更多的值。这就是说,每个JSON文档只能… Read More

jQuery管理ajax异步-deferred对象

今天跟大家分享一个jquery中的对象-deferred。其实早在jquery1.5.0版本中就已经引入这个对象了。不过可能在实际开发过程中用到的并不多,所以没有太在意。 这里先不说deferred的概念,我们先看一个例子。 还记得初学的时候,遇到一个实例,先是要ajax请求一个接口(a.json),从返回的数据中获得一个id1值。然后再请求一个接口(b.json)获得id2,最后需要对这两个id值同时进行操作。 错误解法 那个时候初学,首先想到的方案(现在想想,很傻很天真…) var id1, id2; $.ajax({ url: 'a.js', dataType: 'json', type: 'get',… Read More

JAVA: Google Guice 学习AOP (面向切面的编程)

Guice的AOP还是很弱的,目前仅仅支持方法级别上的,另外灵活性也不是很高。看如下示例: Guice支持AOP的条件是: 类必须是public或者package (default) 类不能是final类型的 方法必须是public,package或者protected 方法不能使final类型的 实例必须通过Guice的@Inject注入或者有一个无参数的构造函数 且看示例代码 1、定义接口 package com.guice.AOP; import com.google.inject.ImplementedBy; @ImplementedBy(ServiceImpl.class) public interface Serv… Read More

JAVA: Google Guice入门教程

Google Guice 是一个轻量级的依赖注入框架,它支持Java 5或者更高版本的JDK,得利于Java 5中提供的泛型 (Generics) 和注解 (Annotations) ,它可以使得代码类型安全 (type-safe) 。那么何时使用在代码中使用 Guice 进行注入呢?一般来说,如果在你的应用代码中业务对象 (Business Objects) 之间的关系或者依赖需要手动维护的话,你就可以使用Guice 进行注入。 该文章中,首先我将通过一些例子来初步的认识一下 Guice 框架,然后我将介绍下 依赖注入框架的理论知识 以及在应用程序中使用依赖注入的好处,同样我也会和大家探讨一下 Guice 提供的用于简化代码的 API (包… Read More