java平台 啊手动阀就 asdfkasdjfasd adsfa adsf adf asdfadfa adsf asdf asdf adf dfa ad adf adf adsf adf adfs 卡拉决定是否 案件多发哈

第一章:java程序设计概述

白皮书术语

简单性:摒弃了c++难以理解的一些特性,可以说是c++的“纯净版”,另外一个方面的简单是小,解释器加上一些基础的类库,和对多线程的支持,大概需要175kb,这在当时来说已经是很大的成就了。面向对象:面向对象他是一种程序设计的技术,很显然java已经非常成熟的运用了这门技术,重点是对象,和对象的接口。制造一辆汽车,关心的是零件,而不是零件怎么制作的,java将c++的多继承转换为接口的方式更加容易让人理解,还有丰富的运行时自省的功能。分布式:java有丰富的例程库,用于处理http这样的协议,能够通过url访问打开网络上的对象,就像在本地打开一样健壮性:java采用的指针模型可以消除重写内存和数据损坏的可能,java编译器能够检测出其他语言在运行时才能检测的错误。安全性:一开始,java就设计成能够防范各种攻击,例如,运行时,堆栈溢出(蠕虫和病毒常用的手段),破坏自己进程之外的内存,未经授权读写文件。体系结构中立:生成与平台无关的字节码文件(经过编译的文件格式),可以通过特定的jvm在不同的平台生成不同的机器码,但是这种通过“虚拟机”生成代码的思路并不是新的,在之前的pascal,lisp,smalltalk早已采用这种技术,jvm有一个选项,就是将执行最为频繁的字节码序列翻译成机器码,这一过程叫做即时编译。可移植性:相对于c++或者c来说,其数据类型占用字节数是确定的,例如c的int可能是16位也可能是32位,但是java所有的平台都是32位高性能:java字节码可以(运行时)动态的翻译成运行这个应用的的特定cpu的机器码,java的即时编译技术已经非常成熟,甚至有时候超过了传统的编译器,还可以监控经常执行哪些代码并对他们加以优化,更为复杂的优化是使用内联(消除函数调用),即时编译知道哪些类已经被加载,基于已加载的类集,如果特定的函数不会被覆盖,就可以使用内联,必要时,还可以撤销优化。多线程:java是第一个支持并发编程的主流语言,而且在并发编程方面十分的出色
10.动态性:将一些代码添加到正在运行中的程序中,动态性是十分重要的,如在网上下载一段代码,然后再浏览器中打开这段代码,如果使用c或者c++是很难实现的

java applet

对于在internet上下载java字节码文件,并在本地运行(在网页中运行的java程序)称为applet,每次访问都能得到最新的applet,刚开始诞生的时候感觉会很流行,但是网景公司的浏览器和微软的ie浏览器因为使用的java版本不同,有些版本已经过时,难以将最新的Java版本开发的applet应用,随着后来adobe的falsh出场,和java的安全问题(就是访问一个applet,浏览器和java浏览器插件的限制变得越来越多),所以现在要想在浏览器中使用applet不仅要一定的水平而且要付出很大的努力,applet逐渐淘汰

java发展史

这张图片是不同的jdk版本出现的功能。

第二章:java环境

Java程序
Java图形程序
Javaapplet程序

第三章:java基本程序结构

一个简单的java程序

java从1.4开始,就强制要求主函数修饰符是publicjava没有为操作系统返回“退出代码”,如果main正常运行,程序的退出代码为0,如果想返回其他的代码需要调用Sytem.exit()方法

java注释

Java提供三种注释://,/* */这两种是单行和多行注释还有一种是/** */文档注释,可以用来自动生成文档,不能进行注释嵌套,一位只会和末尾的第一个 */进行匹配

数据类型

java提供了固定得数据范围,不像c++那样为了在特定平台得到更好得性能而采用不同范围,这样就会在移植平台的时候可能出现溢出的情况,而java提供的固定范围,可以很好的实现跨平台
java提供了八种基本数据类型
四种整数类型(int,short,long,byte):长整型后面可以添加一个L或者l,十六进制有一个前缀0x或者0X,八进制有0,二进制0b或者0B(从java7开始,可以用_下划线分割,这样更易读,编译器会将下划线去掉)
两种浮点型(float,double):
float有一个F或者f的后缀,double有D或者d的后缀,因为float精度很小,大多数情况都是double,所以一个小数不加任何后缀的情况下是double类型的。(double还有十六进制的表示方式例如0.125=2^-3,就可以表示为0x1.0p-3,这里的1.0是十六进制数,-3是十进制但是基数是2,所以表示就是1* 2的-3次方,还有常规的aeb表示形式)
浮点型数据不适合表示四舍五入的情况,因为java采用二进制系统保存,不能精确的还原二进制数,所以会和预想的结果可能不太一样,最好使用BigDecimal类。
一种表示unicode编码的char:
可以表示为十六进制值,范围从\u0000到\uffff,\u这个转义字符还可以出现在引号之外,其他的转义字符则只能在引号中间
unicode和char
char描述的是一个utf-16的代码单元(16位)
一种表示真值的Boolean
注意:java没有提供unsigned的修饰的类型
所有数值都遵守IEEE 754规范,Double.positive_infinity正无穷大,Double.negative_infinity负无穷大,Double.NaN不是数字

变量

java变量可以用字母和数字定义,但是必须由字母开头,java的数字和字母范围更加大,字母包括原来的字母还有_,$ ,以及本地语言的字母,在项目开发中因该避开使用$ ,因为这是留给一些工具产生的,或者编译器产生的
变量初始化
使用未初始化变量,编译器就会报错
常量
在java中,使用final代表常量
final修饰的常量只能被赋值一次,	而且不能修改,不然就会报错,习惯上把常量大写

运算符

除法运算/,当两边都是整数时,结果也会是整数,否则就会是浮点型(double)类型,整数除以0会报异常,浮点型除以0则会是正无穷大,或者是NaN
对于实现跨平台,想要实现浮点型的结果一致是有难度的,double是64位的存储一个数值,而 有些处理器是使用80位的寄存器,这些寄存器会进行中间结果的计算精度,这个结果会和64位的结果可能会不一样,所以java一开始是始终进行截断操作的,但是后来受到了反对,所以修改了,默认的话是不进行截断的,只有加了strictfp关键字的方法才会进行截断操作
数学函数和运算符
double Math.sqrt(double a)计算a的平方根
double Math.pow(double a,double b)计算a的b次方
Math.floorMod(int a,int b)
三角函数:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
Math.log
Math.log10
Math.exp
Math.round(float) 四舍五入
常量π和E
Math.PI Math.E
为确保在所有平台上都有相同的数值,可以使用StrictMath类
数值类型之间的转换
如果一种位数多的类型向位数少的类型转换就会造成精度的丢失,有大类型的都会向大类型的转换,如int+double,double大一些,就会向double转换
虚线表示精度会有丢失,实线表示不会造成精度丢失
当超过转换的目标的范围,就会高位截断,例如(byte)300会转换成44(低八位)
强制类型转换
除了上面的自动类型转换,还有强制的,有些时候需要将大类型转换为小类型就需要在类型前面(目标类型),就可以强制类型转换
结合赋值和运算符
相当于两个赋值操作,如果最终赋值类型不等于左边的就会进行强制类型转换,例如,int x; x+=1.4;等价于x = (int)(x+1.4)
自增自减运算符
跟C语言一样,提供自增自减的运算符,有前缀和后缀的区别
注意:在表达式中尽量不要使用++运算符,可读性不高
关系运算符和Boolean运算符
用于检测相等或不等,值为true或者false
逻辑运算符
&& || !
前两个有短路的效果
!后面只能接boolean值
位运算符
& | ^ ~
按位与,按位或,按位异或