Java 初级(二)

JAVA设计模式之单例模式:https://blog.csdn.net/jason0539/article/details/23297037/


Ant:ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具

ant 是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点: 
1、跨平台性:Ant是纯Java语言编写的,所以具有很好的跨平台性。 
2、操作简单:Ant是由一个内置任务和可选任务组成的,用ant任务就像是在dos中写命令行一样。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。 
3、维护简单、可读性好、集成简单:由于Ant构建文件 时XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

通过ANT生成MANIFEST.MF中的Class-Path属性:reason2003.iteye.com/blog/1627353

学习Ant编译脚本:https://blog.csdn.net/chenyz_cn/article/details/6877480

ant 使用指南:www.cnblogs.com/hoojo/archive/2013/06/14/java_ant_project_target_task_run.html

Ant打包可运行的Jar包(加入第三方jar包):www.cnblogs.com/alfredinchange/p/5372657.html

示例:

<?xml version="1.0" encoding="utf-8"?>
<project name="SqlCollect" default="package" basedir=".">

	<property name="src.dir" value="${basedir}/src/main/java">
	</property>
	<property name="src.lib" value="${basedir}/lib">
	</property>
	<property name="class.path" value="${basedir}/bin">
	</property>
	<property name="resource.dir" value="${basedir}/src/main/resources">
	</property>
	<property name="jarname" value="AppTransferToolSqlCollect.jar">
	</property>
	<property name="version" value="V1.0">
	</property>
	<property name="src.extlib" value="${basedir}/extlib">
	</property>
	<property environment="SystemVariable">
	</property>
	<property name="java_home" value="${SystemVariable.JAVA_HOME}">
	</property>

	<!--1. 初始化删除旧文件-->
	<target name="init">
		<echo>"${java_home}"</echo>
		<echo>...开始清理老的class文件...</echo>
		<echo>"${src.extlib}"</echo>
		<delete dir="${basedir}/bin">
		</delete>
		<mkdir dir="${class.path}">
		</mkdir>
		<copy file="${resource.dir}/applicationContext.xml" todir="${class.path}" overwrite="true"/>
		<copy file="${resource.dir}/SqlCollect.properties" todir="${class.path}" overwrite="true"/>
	</target>


	<pathconvert property="libs.project" pathsep=" ">
		<mapper>

			<chainedmapper>
				<!-- remove absolute path -->
				<flattenmapper />
				<!-- add lib/ prefix -->
				<globmapper from="*" to="lib/*" />
			</chainedmapper>
		</mapper>
		<path>
			<!-- lib.home contains all jar files, in several subdirectories -->
			<path id="classpath">
				<fileset dir="${src.lib}">
					<include name="*.jar" />
				</fileset>
				<fileset dir="${src.extlib}">
					<include name="*.jar" />
				</fileset>
			</path>
		</path>
	</pathconvert>

	<!--2. 编译src java-->
	<target name="compile" depends="init">
		<echo>...Compiling build...</echo>
		<javac srcdir="${src.dir}" destdir="${class.path}" classpathref="classpath" 
			debug="true" debuglevel="source,lines,vars" includeantruntime="false" encoding="UTF-8">
		</javac>
	</target>

	<!-- 3. 打包jar文件 -->
	<target name="package" depends="compile">
		<echo>...Compiling package...</echo>
		<!-- jar文件的输出路径 -->
		<jar jarfile="${basedir}/${jarname}" basedir="${class.path}">
			<!-- 向jar包中的main文件中添加内容 -->
			<manifest>
				<attribute name="Main-class" value="com.huawei.bgapp.apptransfertool.sqlcollect.Application"/>
				<attribute name="Class-Path" value="${libs.project}" />
			</manifest>
		</jar>
	</target>

</project>

利用-Xbootclasspath来显示指明引用包:http://www.zeali.net/entry/15

语法如下: (分隔符与classpath参数类似,unix使用:号,windows使用 ; 号,这里以unix为例)

java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar  


MANIFEST.MF 文件内容完全详解:https://blog.csdn.net/zhifeiyu2008/article/details/8829637


几种任务调度的 Java 实现方法与比较:https://www.ibm.com/developerworks/cn/java/j-lo-taskschedule/


Java NIO与IO:ifeve.com/java-nio-vs-io/

同步阻塞IO:在此种方式下,用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,用户进程才能运行。JAVA传统的IO模型属于此种方式!

同步非阻塞IO:在此种方式下,用户进程发起一个IO操作以后边可返回做其它事情,但是用户进程需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费。其中目前JAVA的NIO就属于同步非阻塞IO。

异步阻塞IO:此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄,从而提高系统的并发性!

异步非阻塞IO:在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。目前Java中还没有支持此种IO模型。


TimeUnit是 java.util.concurrent 包下面的类,这个包下的方法都建议学习

不给用Thread.sleep方法,可以用下面这个TimeUnit.SECONDS.sleep( 5 );


使用FileUtils简化你的文件操作:https://blog.csdn.net/lqclh502/article/details/38338327


java中从键盘输入的三种方法:https://blog.csdn.net/u012249177/article/details/49586383


JAVA中的反射机制:https://blog.csdn.net/liujiahan629629/article/details/18013523


java调用外部程序Runtime.getRuntime().exec:https://www.cnblogs.com/jianyungsun/p/6546553.html


java语法性能:

1、Map 遍历性能:http://blog.csdn.net/chenleixing/article/details/44087131
values()是返回Map的所有value的集合collection,只能遍历到值,很难遍历到key所以一般不用,除非在某种特殊场合。如果对Map讲究效率的遍历的话,还是采用entrySet()方法。

2、split、subString、StringTokenizer 性能比较:http://blog.csdn.net/sdauzyh/article/details/48137487
Split 低!因为正则实现。

3、Date.getTime 不如 System.currentTimeMillis()  ,建议看看new Date() 源码.
计算一段代码处理时间,建议用System.nanoTime() : https://blog.csdn.net/u012581453/article/details/53706573

4、装箱指的是基本类型转换为包装类型,拆箱指的是包装类型转换为基本类型。使用valueof方法效率不如使用paseXXX方法。
JAVA基本类型,不用new来创建变量,而是创建一个并非是“引用”的“自动”变量。这个变量拥有它的“值”,并置于堆栈中,因此更加高效。
Long.ValueOf(String) 最后被转换为一个Long的包装类。所以更推荐用 Long.parseLong(java.lang.String)

猜你喜欢

转载自blog.csdn.net/u010170616/article/details/80883509
今日推荐