概述
Orcal把Java分为Java SE,Java EE和Java ME三部分。而为Java SE和Java EE分别提供了JDK和Java SDK两个开发包。
Java SE可以分为四个部分:JVM、JRE、JDK和Java语言。为了能够运行Java程序,必须有Java虚拟机(JVM),JVM包括在Java执行环境中。Java语言只是Java SE的一部分。JVM担任的职责之一就是翻译,将位码文档翻译成平台可以看懂的二进制序列。对于Java程序而言,只认识一种操作系统,就是JVM。
安装JDK并不需要安装所有组件:
Devepment Tools(这是JDK的核心,包括编译Java程序必须的命令工具。实际上这个选项包含JRE,这个JRE会包含在JDK目录中,无需安装公共JRE);
为什么不安装公共JRE?公共JRE是一个独立的JRE系统,会单独安装在系统的其他路径下。公共JRE会向IE浏览器和系统中注册Java运行时环境。通过这种方式,系统中任何应用程序都可以使用公共JRE。由于现在网页上执行Applet的机会越来越少,而且完全可以使用JDK目录下的JRE运行此类程序,所以没有必要安装公共JRE。
Source Code:安装这个选项将会安装Java所有核心类库的源代码。
JDK下路径:
bin:该路径存放JDK的各种工具命令,如:javac、java等命令
db:安装java DB的路径
include:一些平台特定的头文件
JRE:就是运行Java程序必须的JRE环境
lib:JDK工具命令实际执行的程序
src.zip:该压缩文件存放Java所有核心类库的源代码
Java原始码扩展名为.java,JVM执行码为.class。
Java程序是纯粹面向对象语言,Java程序必须以类的形式存在,类是Java程序的最小单位。
Java程序所有关键字都是小写的。
面向对象基础
面向对象的三个特征:继承、封装和多态。
封装就是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能;继承是面向对象实现软件服用的重要手段,当子类继承父类,将直接获得父类的属性和方法;多态是指可以将子类对象赋给父类变量,但运行时表现出子类的行为特征。
Java语言完全以对象为中心,最小程序单位是类。
除了8种基本数据类型,一切都是对象。
两种主流的开发方法:结构化开发方法和面向对象开发方法。面向对象可以提供更好的可重用性、可扩展性和可维护性。
任何简单或复杂的算法都可以由顺序结构、算法结构和循环结构这三种结构组合而成。
面向对象还提供如下功能:1、对象是面向对象中最基本的概念,它的基本特点有:标识唯一性、分类性、多态性、封装性、模块独立性好; 2、类是具有共同属性、共同方法的同一类事物。类是对象的抽象,对象是类的实例。而类是整个软件系统最小的程序单元,类的封装性将各种信息细节隐藏起来,并通过公共方法来暴露该类对外提供的功能,从而提高类的内聚性,降低对象之间的耦合性。 3、对象间的这种相互合作需要一个机制协助进行,这样的机制成为“消息”。消息是一个实例与另一个实例之间相互通信的机制。 4、在面向对象方法中,类之间共享属性和操作的机制成为继承。继承具有传递性。继承可以分为单继承和多继承,Java不支持多继承。
除了8种基本数据类型,一切都是对象。
数据类型和运算符
Java语言是一门强类型语言。强类型语言包含两个方面含义:1、所有变量必须先声明、后使用;2、制定类型的变量只能接受类型与之匹配的值。
什么是变量?变量有什么用?编程的本质就是对内存中数据的访问和修改。程序所用的所有数据都会保存在内存中,程序员需要一种机制来访问或修改内存中的数据,这种机制就是变量,每个变量代表一小块内存,而且变量是有名字的,程序对变量赋值,实际上就是把数据装入该变量所代表的内存区的过程。程序读取变量的值,就是从该变量所代表的内存区取值的过程。
Java语言支持的类型主要分为两类:基本类型和引用类型
基本类型大致可以分为两类:数值类型和布尔类型,其中数值类型包括整型、字符型和浮点型。所有数值类型之间可以进行类型转换,这种类型转换分为自动类型转换和强制类型转换。
引用类型包括类、接口和数组类型,还有一种特殊的null类型。所谓引用类型就是对一个对象的引用,对象包括实例和数组两种。
数值类型分为整数类型和浮点数类型。
整数类型默认int类型,除此之外 1、如果直接将一个较小的整数值赋给一个byte或short变量,系统会自动把这个整数值当成byte或short类型来处理; 2、如果使用一个巨大的整数值,超过int范围,Java不会自动把这个整数值当成long类型处理,需要在数值后面增加大写或小写的L作为后缀。
Java使用16位的Unicode字符集作为编码方式。
Java浮点型有两种:float和double。默认double类型。
数值中可以使用下划线分隔,整数类型或者浮点数类型都可以
public class NumberTest{ public static void main(String[] args){ int a = 10_000_000; double d = 10_000.0_324; System.out.println("a = " + a + " d = " + d); } }
基本类型的类型转换
Java所有数值型变量可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,这种方式成为自动类型转换。当把一个表数范围小的数值或变量直接赋给另一个标书范围大的变量时,系统将可以自动类型转换,否则就需要强制转换。
通常情况下字符串不能直接转换为基本类型,但可以通过基本类型对应的包装类则可以实现把字符串转换为基本类型
String s = "34";
in a = Integer.parstInt(s);
算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。最低等级类型是int。
习惯上常量名全用大写。
枚举型:变量的取值只在一个有限的集合内,可以自定义枚举型。枚举型使用关键字enum定义。
流程控制
条件语句范围应该从低到高,总是优先把范围小的条件放在前面处理。
switch语句控制语句后面的表达式只能是byte、short、char、int四种整数类型,枚举型和String字符串类型。注:StringBuffer和StringBuild类型都不兼容
public class StringBufferTest{ public static void main(String[] args){ StringBuffer sb = "adc"; //switch语句表达式不能是byte、short、char、int四种整数类型,枚举型和String字符串类型之外的任何类型 switch (sb){ case "abd": System.out.println("第一行输出"); break; case "abc": System.out.println("第二行输出"); break; } } }
switch语句格式
switch (表达式){ case 1 : //执行语句 break; …… default://不满足前面所有条件执行此语句 //执行语句 }
while语句和do...while语句:do...while语句循环体先执行,再判断条件。
public class DoWhileTest{ public static void main(String[] args){ int i = 1; do { System.out.println("循环体内i的值为:" + i); i ++; } while (i > 10); System.out.println("方法体内i的值为:" + i); } }
for循环括号内的两个分号是必须的。初始化语句,循环条件,迭代语句可以省略。如果省略了循环条件,默认true,就会陷入死循环。
break可以结束所在的循环,还可以结束所在的外层循环。
continue是忽略本次循环,开始下一次循环。
break和continue都可以跳出到指定标签。
return关键字不是专门用来结束循环体的,return的功能是结束一个方法。
数组
Java数组要求所有数组元素具有相同的数据类型。
一旦数组初始化完成,数组在内存中所占的空间被固定下来,因此数组的长度将不可改变。即使把数组元素的数据清空,它所占的空间依然被保留下来,依然属于该数组,数组的长度依然不变。
数组也是一种数据类型,它本身是一种引用类型。
数组可分为动态初始化和静态初始化,不要同时使用动态初始化和静态初始化。也就是不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。
foreach循环遍历数组元素时无需获得数组长度,也无需根据索引来访问数组元素。
//foreach语句 public class ForEachTest{ public static void main(String[] args){ int[] a = {1, 2, 3, 4, 5, 6, 7}; for (int i : a){ System.out.println(i); } } }