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 反射:类的运行时信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值