Java学习笔记 第一章 初识java
JAVA学习笔记第一章
1.初始JAVA
1.1计算机语言发展历史
第一代:机器语言
第二代:汇编语言
第三代:高级语言
- 面向对象
- C/PASCAL/COBOL/Fortran/ADA
- 面向对象
- C++/JAVA/Python/C#
1.2JAVA体系结构
JavaSE(Java Standard Edition):标准版本,定位在个人计算机上的应用
这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在上世纪90年代末互联网上大放异彩的Applet也属于这个版本。Applet后来为Flash取代,Flash即将被HTML5取代
JavaEE(Java Enterprise Edition):企业版,定位在服务端应用
JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如JDBC是让程序员直接在Java内使用的SQL语句来访问数据库内的数据,Servlet能够衍生服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术;
JavaME(Java Micro Edition):微型版,定位在消费电子产品的应用上
JavaME是JavaSE的内伸,包含J2SE的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对有限的电子消费产品的需求精简核心类库,并提供模块化的架构让不同类型产品能够随时增加支持的功能。
1.2.1JDK
JDK:Java Development kit --》编写Java程序的程序员使用的软件
JDK下载链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
下载后点击安装,安装之后进入终端
1.2.2JRE
JRE:Java Runtime Enviroment -->运行Java程序的用户使用的软件
1.3JAVA的特性和优势
高性能:JAVA语言发展中通过虚拟机的优化提升了几十倍的运行效率,通过JIT即是编译技术提高运行效率,将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用,某些代码甚至接近C++的心哦啊频率。
分布式:Java是为Internet的分布式环境设计的,因为能处理TCP/IP协议。事实上通过URL访问一个网络资源和访问本地文件是一样简单的,Java还支持远程方法调用(RMI, Remote Method Invocation),使程序能够通过网络调用方法。
多线程:多线程的使用带来更好的交互响应和实时行为,Java多线程的简单行是Java成为主流服务端开发语言的主要原因。
健壮性:吸收了C/C++语言的优点,但是去掉其影响程序健壮性的部分,JAVA程序不可能造成计算机崩溃,程序可能有错误,但是也不会崩溃,而是把异常抛出,在通过异常处理机制加以处理。
1.3垃圾回收机制
垃圾收集的目的在除不再使用的对象,当对象建立的时候立即收集期,就开始监控对象的动态情况,垃圾收集主要是对内存的释放。创建对象的时候申请一个空间。
- 不再使用的内存空间应回收 --》垃圾收集
- Java消除了程序员回收无用内存空间的职责;提供一种系统级线程跟踪存储空间的分配情况。在JVM空闲的时候,检查并释放可释放的存储器空间,相比C++,开发人员要负责自己回收无用内存
- 立即收集在Java程序运行的过程中自动进行,程序员无法精准控制和干预
- GC的自动回收,提高了内存空间的利用率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄露。
后续:
- 垃圾的收集器有哪些
- 垃圾收集器底层原理剖析
- 垃圾收集器算法,优化
1.4跨平台的理解
JAVA语言的跨平台
C语言的跨平台原理
源文件通过不同平台的编译器产生的可执行文件可以在对应的平台上运行
区别于Java是编译之后生成字节码文件,字节码文件和平台无关,拿着这个字节码文件到不同的平台上运行
实际还是那个我们所说的跨平台指的是:编译后的文件是否跨平台--》从这个角度来看C语言不是跨平台的
很多人说C语言是跨平台的,是因为不同平台有不同的解释器,它指的是源文件跨平台
C语言的效率更高,因为产生的可执行文件可以直接放在平台上去运行
1.5程序中常见的问题
-
注意缩进
-
要求源文件名和类名必须一致
-
写代码就当作有一个框子
public class HelloWorld{ public static void main(String[] args){ } }
-
源文件中可以有多个类,只能有一个类被public修饰,且不同类虽然写到一个源文件中,但是编译后生成的字节码文件是根据类名生成独立的字节码文件
-
classpath配置环境变量之后,能在任意的路径下去执行字节码文件。classpath的作用就是针对java执行字节码文件而产生的环境变量,只要配置类字节码文件所在的路径之后,那么以后在任意的位置都能执行对应的字节码文件。
-
JAVA_HOME配置,在tomcat执行startup.bat的时候会出现闪退。一般配置好JAVA_HOME之后,可以借助JAVA_HOME里面的内容,通过%JAVA_HOME%\bin引入到path路径中。
1.6注释
注释不会参与编译,编译产生后的字节码文件中不会有注释的内容
注释的作用:注释就起到标注解释的作用,提高代码的可读性,方便代码的调试
单行注释 //
多行注释 /* */
文档注释 /** */
一般文档注释可以配合:JDK提供的工具javadoc.exe来一起使用,通过javadoc.exe可以对文档注释进行解析,生成一套以网页文件形式体现出来 javadoc -d myHello -author -version HelloWorld.java 自定义类对应的API
1.7反编译
编译: 源代码 --> class
反编译:class --> 源代码
反编译工具:jd-gui.exe
1.8JDK、JRE、JVM关系
三者中JDK最大,是开发工具包,包含JRE和JVM
JRE是运行环境,包含JVM
JVM是Java虚拟机
JDK里面的工具几乎都是用java来编写的,同属于java应用程序,因此要使用JDK所附带的工具来开发Java,所以需要附一套JRE才能运行,这个时候JDK中java.exe先从自身目录中找,再到父级目录中寻找,都没有找到再去注册表里找。
JVM不能单独搞定class的执行,解释class的时候,JVM需要调用解释所需要的类库lib。再JDK下面的jre目录里面有两个文件夹bin和lib,在这可以认为bin里的就是jvm,lib则是jvm工作所需的类库,jvm和lib加起来称为jre。