一、综括

Java始创公司为Sun,这是一家在《C语言专家编程》前几章出现频率颇高的公司,似乎跟C语言有一定的关系。

Sun 公司开发 Java 的想法是:在互联网的时代,提供一种和机器无关,和操作系统也无关,可以运行在任何平台上的语言。(对Java特点的高度概括

于是一款可移植性好、安全可靠、风靡全球的面向对象语言横空出世。

1.Java可移植性?与C对比?

来自 https://www.jianshu.com/p/b8ca0164767c

Java是在JVM中运行的。源程序*.java被编译成字节码文件,字节码面向JVM编写与平台无关。JVM拥有一套自己的指令系统,不同的操作平台有自己的JVM,JVM向下接口是硬件有关的,其是个中间件。只要有字节码和JVM,Java就可以在任何平台运行。

操作系统可移植性

JAVA采用了提供一套与平台无关的库函数(包括AWT、UTIL、LANG等等)的方法来解决这个问题

源码级可移植性

任意一个JAVA程序,不论它运行在何种CPU、操作系统或JAVA编译器上,都将产生同样的结果。

CPU可移植

产生与机器无关的中间代码用于执行(无须在不同CPU中多次编译),且性能安全

弊病:针对32位字长,8位机

2.开发环境

Java经过编译后生成拓展名为.class的字节码文件,再通过JVM去解释的方式运行。编译一次,处处运行。

JDK是Java的开发工具包,里面包含了Java运行软件JRE和一些开发过程中需要的一些工具程序(开发工具)。

JVM是一个字节码的解释器,一种能运行Java字节码的软件,亦或是以字节码为指令组的软CPU。Java程序唯一识别的操作系统就是JVM。

(深入理解Java可以从理解JVM(Java Virtual Machine)入手,这就是另一本书的内容了。)

关于PATH和CLASSPATH

环境变量PATH是让操作系统去寻找并执行应用程序路径的顺序。

CLASSPATH是JVM执行JAVA程序时搜索类的路径的顺序。

二、语言基础构成

1.数据类型

基本数据类型有整型、浮点型、布尔型、字符型

引用数据类型有类、数组、字符串和接口

堆内存和栈内存与数据类型的关系:

基本数据类型的变量本身存储于堆内存,一旦超过作用域则所用空间被Java自动释放。

引用数据类型首先声明出一个指向NULL的引用变量(不分配内存);再使用new操作符分配堆内存作为存储空间,同时在中定义一个存放引用变量在堆内存中的首地址,引用变量可用来访问数组或对象,可视为C语言的指针。当引用数据类型的(数组、对象)没有引用变量指向它时,会变为垃圾,仍然占据内存,直到某个不确定的时间被Java的垃圾回收器释放掉。

整型:

关键词:byte、short、int、long

表示形式:二进制(以0b开头)、十进制、八进制(以0开头)、十六进制(以0x开头)

占字节数、范围

浮点:

关键词:float、double

表示形式:标准计数法、科学计数法

占字节数、范围、精度(单双精度浮点数)

布尔型:

关键词:boolean

又称逻辑型,所有关系运算返回值都是逻辑型的值

true和false不能转数字!!

字符型:

关键词:char

字符采用Unicode字符集编码( ‘\u0000’ ~ ‘\uFFFF’ ),支持汉字。在内存占2字节,是16位无符号整数,共有65 536个。

可通过强制转换 int <--> char

数值型常量特殊值代码(浮点型大小值均为正)
如:int || 类java.lang.Integer ||最小值 Integer.MIN_VALUE ||最大值 Integer.MAX_VALUE

2.关键词和标识符、常量与变量、数据类型转换、输入、运算符与表达式

标识符命名规则

使用常量的好处:增可读性、增可维护性

自动类型转换与强制类型转换的条件和要点

字符串和数值型数据互换

两种输入方式

注意表达式及运算符的优先级和结合性

【实例】我写过的一个让人崩溃的表达式 ,滥用条件运算符 :)

重视基础——优先级和结合性!!

// else后面滥用错误!最终未能计算出需要的结果
if(i==0||j==0)  
    EditDistance[i][j]=Math.abs(i,j);
else 
    EditDistance[i][j]=Math.min(Math.min((EditDistance[i-1][j-1]+ (word1.charAt(i)==word2.charAt(j)?0:1)),EditDistance[i-1][j]+1),EditDistance[i][j-1]+1);

a+=b 和a=a+b的区别

btye a=127; 
btye b=127;
a=a+b; //error value
a+=b;    

当类型低于long时,运算发生之前会转换成int普通类型,即整型提升。

a与b经过整型提升,整型a+b被赋给字节型a,赋值错误。

+=运算a和b都转成int,运算正确。

位运算符mod问题

对于int型整数移位a>>b ,系统先将b对32取模,得到的结果才是真正移位的位数

对于long型整数移位时a>>b ,则是先将移位位数b对64取模

3.流程控制数组字符串与C语言的不同点小结

条件分支的条件表达式必须为逻辑型的值!

foreach语句三个数据遍历数组的元素

数组诞生:1.声明、2.分配空间、3.创建数组元素并赋值;
数组声明声明并初始化时不允许指定其长度;
二维(或多维)数组的每行列数可以不同(声明分配内存的new语句 分开);
数组和字符串会被越界检查;

数组类和字符串类的方法。

OKay!下一节就轮到面向对象了!


only love & learning