Java,
Java,
Java
sf2gis@163.com
2015年5月25日
1 目标:封装C++,提供跨平台、更加简单的语言。
2 方法:JVM,java virtual machine。
源代码编译为JVM字节码(.class)。由JVM与不同的平台适配,解释为平台相关的字节码。
2.1 配置:设置java的PATH目录
目标:将java的编译器等程序目录,设置到PATH下,方便每次直接在命令行中使用程序。
方法:可以设置用户(推荐)或系统的PATH路径。
2.2 编译器:javac
目标:将源代码编译为jvm字节码。
方法:java -d destDir srcFile
将srcFile中的类生成.class字节码文件,放在destDir目录下。
-d destDir 可以省略,默认输出到当前目录。
2.3 虚拟机:java
目标:启动虚拟机,解释.class字节码文件。
方法:java 类名(区分大小写)
入口函数:main()函数是入口函数,且必须是类中的public static 类型的main函数。有且只能有一个。
垃圾回收信息:-verbose:gc
示例:
public classHelloWorld
{
public static void main(String[] args)
{
System.out.println("HelloWorld!");
}
}
堆内存设置:java -XmsNNNm -XmxNNNm …
-Xms:堆内存起始大小。
-Xmx:堆内存最大值。
3 方法:OO程序思想
OO较结构化程序思想,直观,扩展性强。
3.1 OOA:拟人抽象
3.2 OOD:UML
3.3 OOP:类
4 方法:语法
4.1 注释://单行注释,/*多行注释*/,/**文档注释*/
4.1.1文档注释
目标:自动提取后形成说明文档。
方法:
文档注释:@author,@version,@deprecated,@param,@return,@see,@exception,@throws
文档生成:javadoc -d desDir -windowTitle 页面标题 -header 右上角页眉 -docTitle 概述页标题 -version -author
包注释使用package.html
4.2 标识符:使用Unicode,起始字符只能是字母,下划线,$。
4.3 数据类型:基本类型和引用类型
4.3.18种基本类型
boolean(1bit),byte(1),short(2),int(4),long(8),float(4),double(8)(默认浮点型),char(2)
数值类型可以使用_自由分割,方便辨认。
基本类型都有相应的Java包装类,进行相关操作。
4.3.2引用类型:指针和回收
引用就是一个指针变量,声明后需要new才能产生数据。jvm维护一个引用计数。当引用离开作用域之后,计数减少。当没有引用指向此数据时,标记为垃圾,等待回收。
空引用类型=null tyle,空引用=null。
参考:http://www.codeceo.com/article/java-memory-work.html
强制回收:System.gc(),Runtime.getRunTime().gc()。
引用类型:强引用,软引用(内存不足时回收),弱引用(回收,单独使用),虚引用(回收,用于测试回收,不能单独使用)。
引用计数:java.lang.ref.ReferenceQueue。
4.3.3类型说明符
后缀:long数字L/l,浮点F/f。
前缀:0八进制,0x/0X16进制,0b/0B二进制(l/L后缀,则占64位)。
特殊数字:NaN(非数字,无法比较),POSITIVE_INFINITY(正无穷大),NEGATIVE_INFINITY(负无穷大)。
4.3.4类型转换
低位类型自动转换为高位类型。
任何与字符串操作的类型都将自动转换为字符串类型(引用)。
使用强制转换时,只保留最右侧低位数据。
4.3.5直接量
可以赋值直接量的只有基本类型,字符串和null。
4.3.6数组:引用类型
类型[] 数组名。不能指定数组长度。
声明后需要初始化才能使用。可以静态或动态初始化。
长度使用length()成员函数。
包装类是Arrays。
4.4 运算符
%取余:可以使用浮点。
&位或长逻辑:如果两边是整数,则为位运算符;如果是boolean,则为长逻辑运算,两边全部计算完成后再比较。
一般从左向右。单目、赋值、三目从右向左。
参考:http://baike.baidu.com/view/2075413.htm
4.5 流程控制
switch byte/short/int/char/enum。
break或continue:使用goto类似的标签进行跳转。
foreach(类型 变量:容器){}
4.6 类
访问权限:private,default(包权限),protected,public。final(只可初始化,不可改变,重写和派生)。abstract(抽象类,抽象方式)。
如果源文件中包含(只能包含一个)public类,则文件名必须是此类名。
继承使用extends。
所有的类都隐式的继承java.lang.Object。包含toString(),==(地址相等),equal(自定义,默认是==,一般是值)。
基类使用super引用。
初始化块,创建时最先执行,可以使用static修饰。
枚举类:enum关键字代替class,第一行为实例列表。继承自java.lang.Enum类。默认是public static final。
finalize():回收时调用。
4.7 接口:interface
纯虚基类。
使用implement来继承,直接多继承。
4.8 包:package
命名空间,使用.进行分割。使用package声明(只能在第一行),使用import 导入(可以使用*导入所有类)(import static 静态导入,只导入静态的成员)。必须使用文件夹体现层次。
常用包:
java.lang:语言核心。
java.util:语言扩展工具类。
java.text:格式化。
java.io:IO。
java.net:网络相关。
java.sql:JDBC。
java.awt:Abstract Windows Toolkits,GUI。
java.swing:平台无关的GUI。
4.9 JAR:Java ARchive file,java档案文件
目的:将java文件打包安装。
方法:jar cfe destJAR 入口类 源目录
运行:java -jar xx.jar
5 方法:标准包
5.1 输入输出-IO
用户输入:Scanner(替代BufferReader)。
5.2 调用CPP-JNI
JNI调用CPP库:生成native方向,编译后生成cpp文件,编写并编译此cpp为dll,使用System或Runtime调用LoadLibrary()加载库文件。
native将导致java不能跨平台。
5.3 系统信息-System
目标:提供与平台信息与相关操作。
方法:
获取环境变量:getenv()。
系统属性:getProperties(),getProperty()。
标准输入输出:in(),out(),err()。
当前时间:currentTimeMillis(),nanoTime()。
对象id:identifyHashCode()。
垃圾回收:gc(),runFinalization()。
加载文件、库:load(),loadLibrary()。
5.4 JVM-Runtime
JVM信息:处理器信息(availableProcessors()),总内存(totalMemory()),可用最大内存(maxMemory())。
开启进程:exec()。
垃圾回收:gc(),runFinalization()。
加载文件、库:load(),loadLibrary()。
5.5 主基类-Object
目标:所有类的基类,具有一些通用方法及控制线程的方法。
方法:
clone():复制,默认是浅复制。可以自定义深复制。复制方法:实现Clonable接口,实现Clone()函数,在clone()函数中要调用基类的clone()函数。
主基类的包装类:Objects。提供更加友好的操作和扩展。
5.6 字符串-String,StringBuffer,StringBuilder
静态字符串:String。
动态字符串:StringBuffer(线程安全,效率低。),StringBuilder(线程不安全,高效)。length表示当前字符串的长度,capacity()表示当前字符串的最大容量,此值一般不用考虑。
5.7 数学-Math,Random
5.7.1数据运算-Math
5.7.2伪随机数:Random,ThreadLocalRandom(多线程增强版)。
5.7.3精确浮点:BigDecimal。
5.8 日期时间-Date(旧日期),Calendar(推荐),TimeZone
Date功能逐步被Calendar替代。
5.9 正则表达式-Pattern,Matcher
汉字:【\\u0041-\\u0056】
模式:Pattern
匹配器:Matcher
5.10 国际化
目标:使用不同的配置文件,加载不同的国际化属性。
方法:
资源文件:baseName[_Language[_country]].properties文件,加载文件类java.util.ResourceBundle(需要指定locale)。此文件只能使用ascii字符,其它字符使用native2ascii转换为ascii字符。
key标签:使用ResourceBundle对象获取指定key的value。
地区类:java.util.Locale。用于ResourceBundle查找资源文件。
支持列表:getAvaliableLocales()。
类资源文件:可以使用类代替资源文件,但要使用资源文件的命名方式。使用方法与资源文件完全一样。定义时要继承ListResourceBundle,其重写getContents()。
数字格式:NumberFormat。
日期时间格式:DateFormat,SimpleDateFormat。
5.11 集合:set,list,map
集合(无序不重复)set:Set,HashSet(增删快,遍历快),LinkedHashSet(遍历快),TreeSet(有序),EnumSet。
列表(有序可重复)list:list,ArrayList(常用,性能高,线程不安全),Vector(历史,线程安全,性能差),Stack(Vector的派生类),LinkedList(Stack的替代)。Arrays.asList()可以变为List(只读)。
队列Queue:Queue,Deque,ArrayDeque。
映射Map:HashMap(无序),Hashtable(历史),LinkedHashMap(有序)。Properties是Hashtable的子类,用于与文件交互(ini或xml)。SortedMap(有序)。WeakHashMap(key弱引用的HashMap)。IdentityHashMap(==相等的key才相等)。EnumMap(枚举key)。
算法工具:Collections。
5.12 泛型:模板
通配符?表示父类,只用于声明。
可以设定上限T/? extends Base。
可以设定下限T/? super Derived。
5.13 异常:try…catch…finally
5.14 GUI:AWT,SWing
5.14.1AWT:abastract windows tookit
Java的GUI基础,是Swing的基础(事件机制,组件替代),比Swing快一点。
5.14.2Swing:AWT的重新实现,具有统一的表现
5.15 JDBC:Java DataBase Connectivity,java数据库连接
连接池:C3P0(推荐),DBCP。
5.16 注释(装饰器):Annotation
5.17 多线程:Thread,Runnable,Callable
线程实例:Thread。
线程接口:Runnable(无返回值),Callable(有返回值)。
同步方法:Synchronized代码块或方法。锁。
线程通信:监视器的wait()/notify()异步修改。lock的Condition对象。
线程组:ThreadGroup。
线程池:Executor线程池工厂。
线程局部变量:ThreadLocal。
5.18 网络:java.net
IP地址:InetAddress
编码方式:URLEncoder,URLDecoder。字符串编码方式(application/x-www-form-encoded)。
Url:Url,UrlConnection。
TCP:监听Socket:ServerSocket。
高并发无阻塞服务器:NIO、AIO。
UDP:DatagramSocket。
广播:MulticastSocket。
代理:Proxy、ProxySelector。
5.19 反射:类的运行时信息。
相关文章
- 暂无相关文章
用户点评