一、Java语言特点
1.简单易学:Java的语法与C,C++很接近。
2.面向对象(封装,继承,多态)
3.可移植性(Java虚拟机实现平台无关性):即跨平台性,所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。(跨平台性原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序)。
4.支持多线程:多线程机制使应用程序在同一时间并行执行多项任务。
5.健壮性:Java语言的强类型机制、异常处理、垃圾的自动收集等。
6.安全性
ps:
Java和C++对比:
1.都是面向对象的语言,都支持封装、继承和多态
2.Java不提供指针来直接访问内存,程序内存更加安全
3.Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承。
4.Java有自动内存管理机制,不需要程序员手动释放无用内存
二、JDK、JRE、JVM?
jdk:Java开发工具包
其中包含了Java的开发工具,也包括了JRE。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等
jre:Java运行环境
包括Java虚拟机和Java程序所需的核心类库等。
jvm:Java虚拟机
Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
三者关系:
三、JDK目录
(1) bin文件夹:存放jdk附带的实用工具 (javac.exe,java.exe等)
bin (binary)其中文意思即是:二进制
(2) lib文件夹:类库
Java开发工具使用的归档文件,其中包含tools.jar,它包含支持JDK的工具和实用程序的非核心类。
(3) jre文件夹
Java运行时的环境,其中包含Java虚拟机。
(4) include文件夹
里边包含头文件,支持Java本地接口和Java虚拟机调试程序接口的本地代码编程。
(5) DB文件夹
一个纯Java实现、开源的数据库管理系统(DBMS)java的内嵌数据库。
(6) src压缩包
存放Java的源代码。
四、Java中常用的包
java.lang : 基础的基础-java的核心类库,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包(不需要import导入)。
java.util : 工具库,包含如处理时间的date类,集合类等
java.io:输入输入出管道
java.util.concurrent : 多线程相关
java.net : 网络通信用协议包,Socket类、ServerSocket类
java.math : 数学括展包
java.sql : 用来访问data source的包
javax.sql : SQL包
java.awt : 基本图型工具包
javax.swing : 高级图型工具包
java.nio : native io包,高效io包
java.util.regex : 正则表达式相关
五、配置环境变量
1.为什么要配置path环境变量?
在配置环境变量前,我们运行Java程序是需要在命令行窗口切换到jdk的bin目录下,使用javac 和 java 命令去编译,运行。
在 jdk\bin 目录下hello world运行成功!
在dosTest目录下hello world运行失败!
因为只有在jdk的bin目录下才有对应的工具javac.exe和Java.exe;在其他地方不能运行java程序。
而配置path环境变量后
在dosTest目录下hello world运行成功!
因为系统运行Java程序是先在当前目录下寻找需要的工具javac.exe与java.exe,如果当前目录下没有,则依次在path环境变量保存的路径中找,所以在path里配置jdk\bin之后就可以在任何地方运行java程序了;
(总之一句话,要成功运行Java程序,你要让系统知道你的jdk\bin目录在哪)
2.如何配置环境变量
此电脑—>右键—>属性—>系统高级设置—>环境变量
新建变量JAVA_HOME,值为jdk安装目录;
找到path变量,添加值%JAVA_HOME%bin
六、Java程序执行过程
Java源程序经过编译器编译后变成字节码文件(即.class文件),字节码文件由虚拟机解释器解释执行,解释器将其转换成特定平台上的机器码,然后在特定的机器上运行。
注意其中的名词:
源代码:程序员编写的.java文件
编译器:jdk中的编译工具javac.exe
字节码:Java源代码经过编译器(javac.exe)编译后产生的代码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
【采用字节码的好处】:
Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
解释器:JVM解释器解释执行class字节码文件,变成特定平台上的机器码
特定平台:可以理解为不同的操作系统,不同系统的JVM是不一定相同的,可在上面执行的机器码也不一定相同;java对于多种不同的操作系统有不同的JVM所以 Java实现了真正意义上的跨平台!
机器码:即机器、系统能够识别执行的形式,如二进制文件。
所以Java即是一门编译型语言也是一门解释型语言;
什么是DLL文件?
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
DLL文件中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积
堆,栈,常量池
我们平常定义的变量,不管是基本数据类型变量,还是引用类型变量都是在栈中;
我们创建出来的对象(即引用类型)是在堆中;
字符串、常量(数值类)都在常量池中;
如:
String s=new String(“abc”);
该过程会在栈中创建一个变量s,如果常量池中没有“abc”字符串,则在常量池中创建该对象,之后还会在堆中创建“abc”对象;
一共在内存中开辟了三块内存,栈中存放变量s,值为堆中“abc”对象的引用,也就是说,栈s变量指向堆中的“abc”对象,而堆中对象指向常量池“abc”常量;