一、Java发展历程
1995年5月23日,由SUN公司在互联网上免费发布,Java语言诞生,詹姆斯.戈斯林被称为Java之父。
1996年1月,第一个JDK,JDK1.0诞生,是测试版,并不稳定。
1997年2月,JDK1.1发布,第一个正式版本。
1998年12月,SUN公司将Java改名为Java 2(第二代Java), 并发布J2SE 1.2。
1999年6月,SUN公司正式发布Java2的三个版本:标准版J2SE、企业版J2EE和微型版J2ME,这是Java发展过程中最重要的里程碑,标志着Java的应用开始普及。
2004年9月,Sun公司再次进行改名,取消其中的数字2,如Java2更名为Java,J2EE、J2SE和J2ME更名为JavaME、JavaEE和JavaME,并发布Java SE 5.0(就是1.5.0)。
2009年4月,甲骨文74亿美元收购Sun,取得Java的版权。
2011年7月,甲骨文发布java7.0(就是JDK1.7、Java SE 7.0)的正式版。
版本 | 名称 | 发行日期 |
JDK 1.0 | 未知 | 1996年1月 |
JDK 1.1.0 | 未知 | 1997年2月 |
J2SE 1.2 | Playground(运动场) | 1998年12月 |
Java SE 5.0 (1.5.0) | Tiger(老虎) | 2004年9月 |
Java SE 7.0 (1.7.0) | Dolphin(海豚) | 2011年7月 |
Java SE 8.0 (1.8.0) | 未知 | 2014年3月 |
备注1:期间有些主版本及其子版本就不一一列举了 备注2:J2SE、Java、Java SE和JDK其实都是一个东西 |
二、JAVA的三个版本
1、JAVA Standard Edition
简称JAVA SE,就是JDK,比如通常说的Java7.0或者JDK 1.7,其实都是一个东西,这是由Sun公司提供的一个免费的Java SDK,编程人员和最终用户可以利用这个工具来编译、运行Java程序,版本就是上面那个表。JDK主要包括以下三项:
主要部分 | 细分 | 所在路径 |
编译器 | 无 | {JAVA_HOME}\bin\javac.exe |
解释器 | 无 | {JAVA_HOME}\bin\java.exe |
JRE(内部的) | JVM | {JAVA_HOME}\jre\bin\server或client\jvm.dll或libjvm.so |
类库 | {JAVA_HOME}\jre\lib\里的一批jar文件,如rt.jar | |
其他 | …… | |
其他 | …… | …… |
备注:开发一个Java程序的最小环境是JDK,运行一个Java程序所需要的最小环境是JRE |
2、JAVA Enterprise Edition
简称JAVA EE,运行在JAVS SE的基础上,包括许多组件,如Java Web开发中的JSP、Servlet等,JavaBean和JDBC技术,Java框架也属于JAVA EE。主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
3、JAVA Micro Edition
简称JAVA ME,主要应用于嵌入式系统开发,如手机和PAD的编程,但目前已被Android和iOS取代。
三、JAVA编译运行过程:运行入口main
第一步、安装编译运行环境
安装JDK,安装时要选择所有组件,不可有禁用。安装完成后,配置JAVA_HOME和PATH环境变量。
第二步、编写JAVA源代码
一个Java文件中可以有多个类且每个类中都可以有main函数。可以没有public类仅有多个默认类,此时文件名可以和每个类名都不同;如果有public类就只能有一个,文件名必须和public类名相同,否则编译报错,如下HelloWorld.java。
第三步、编译源程序—针对类非源文件
使用JDK中的编辑器把单个java源文件编译成class字节码文件,编译时有多少个类就会产生多少个和类名相同的class文件,所以一个class文件里只有一个类。
第四步、解释并运行字节码文件—针对类非源文件
使用JDK中的解释器,以每个类为操作对象而不是Java源文件,某个类被单独解释执行时,必须要有main函数,否则解释此类时会报“找不到main方法”。
这一步的具体过程:解释器启动JVM,由JVM先加载.class文件,解释成二进制代码,然后在操作系统中运行此二进制代码。因为较C/C++多了个JVM,JAVA实现了跨平台的效果但也因为降低了运行效率。
5、使用IDE完成JAVA开发全过程
使用IDE如Eclipse或者Eclipse能够更加方便的进行编写、编辑、解释并运行。第一、这些IDE都自带JDK,所以当使用IED时不用单独安装和配置JDK。第二、使用IDE在编写JAVA源代码后,保存此文件时就已经完成编译,在{工程}/bin/包/目录下产生class文件(所以一个包中不能有名称相同的类),然后可以通过一个按钮运行某个类。使用IDE只是操作更方便了,但其实仍然遵循以上四步骤。
一个JAVA源文件可以有多个类且每个类中都可以有main函数。但一个多文件的Java Project必须且仅有一个main方法,且必须是在某个JAVA源文件的public类中,整个project的启动运行就是通过对这个JAVA文件—>public类Run As Java Application启动的,具体入口就是类中的main函数;然后从main函数里调用其他同一文件或其他文件里的类。
四、package和import
1、包package
一个庞大的JAVA工程会有数量庞大的类,而且某些大的模块还会有相同功能的类,如果一个类只有类名就会出现命名冲突的问题,这会给组件复用以及团队间的合作造成很大的麻烦。在Java语言中,用包(package)的概念解决命名冲突的问题。先创建一个包,创建后对应src和bin下的一个文件夹,具有层次结构;然后在这个文件夹下新建JAVA源文件,该文件的最开始用package关键字把此包的路径定义为包名。如此,这个JAVA源文件里的所有类就都属于这个包了。
一个包下的类不能重名,否则编译不过,因为编译是针对每个类生成类名.class文件的。
2、导入import
当一个JAVA源文件访问其他包下的类时,需要使用该类的全称:包名路径+类名,但这样的书写方式过于繁琐。可以通过import关键字引入其他包下的类,但也需要需要满足权限,然后在源文件中就可以仅使用类名访问该类了。
但如果是同一包下的其他类,就不需要import便可以直接用类名使用了,无论这个其他类时public的还是默认的。这种方式也要避免类的重名。
五、变量
1、两种变量
2、变量的生命周期和作用域
第一种变量存在于某个具体的对象中,JAVA对象其实就是第二种变量,所以没有作用域和生命周期的概念。
第二种变量的生命周期和作用域就是该变量所在的{.....},当程序运行在{......}以外时,该变量就被销毁了。
六、Java输入输出
七、数据类型:两种
1、基本数据类型
1.1、boolean类型
1.2、char类型
1.3、byte类型
1.4、short类型
1.5、int类型
1.6、long类型
1.7、浮点类型
2、引用类型
是JDK里自带的Java类或程序员自己创建的类,如
java.lang.String类 、java.lang.System类或java.uitl.Scanner类......
3、基本数据类型之间的类型转换
3.1、直接量
3.2、自动/隐式类型转换
3.3、强制类型转换
八、运算符和表达式
1、算术运算符
普通运算符: +加 -减 *剩 /除 %取余 ++自加 --自减
位运算符: &与运算 |或运算 ^异或运算 ~取补运算 <<左移位 >>右移位
2、赋值运算符
基本赋值运算符:=
与算术运算符组合型:+= -= *= /= &= |= ^=
3、关系运算符
== 、 != 、> 、>=、<、<=
4、逻辑运算符
&&逻辑与、 ||逻辑或、 !逻辑非
5、条件运算符
条件表达式?表达式1:表达式2
6、表达式
表达式,是由字面数据、变量、运算符和分组符号(括号)等以能求得数值为目所进行的组合。可以分为两种:算术表达式是是通过算术运算符来进行运算的数学公式,逻辑表达式是通过四种运算符判断真假的表达式,比如赋值运算的结果永远是True。
一个表达式中,四种运算符和分组符号的优先级别大致为:分组符号→乘/除/余→加/减→关系运算符→逻辑运算符→赋值运算符;同级的运算是按从左到右次序进行;多层括号由里向外。
九、Java引用类型
是JDK里自带的Java类或程序员自己创建的类,如java.lang.String类、java.lang.System类或java.uitl.Scanner类......Java语言中,除了package和import,变量、表达式、程序控制、数组、函数包括main函数等,一切都在类中。
十、程序控制语句
1、条件判断语句
if语句 / if-else语句 / if...else if语句 / switch...case语句
2、循环控制语句
while(){}语句 / do{}while()语句 / for(语句1;语句2;语句3){语句4}语句
3、跳转语句
跳转语句其实仅仅是属于控制循环的,但实际应用中通常是放在循环语句内部的条件判断语句中。
break: 退出该语句所处的最内层的循环
continue:终止本次循环,直接执行语句3开始下一次循环