Java基础最全笔记(一)
1.1.Java历史简述
- 1991 年Sun公司的James Gosling(詹姆斯•高斯林)等人开始开发名称为 Oak
的语言,希望专攻计算机在家电产品上的嵌入式应用(如电视机顶盒、面包烤箱、移动电话等)。 - 1995年将Oak语言更名为Java;
- 2009年,甲骨文公司宣布收购Sun公司。
1.2. Java语言的特点
- 面向对象(封装,继承,多态);
- 平台无关性( Java 虚拟机实现平台无关性,一次编译,到处运行);
- 简单易学(与C语言的面向过程相比,Java的面向对象更接近人的语言习惯);
- 安全性,可靠性(Java中没有指针,程序员无法直接操作内存,而是把操作权限交给Java虚拟机,使程序不容易出现不容易出现内存泄漏和内存溢出问题。);
- 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 java的lang包提供一个Thread类本身就支持多线程);
- 编译与解释并存(Java编译生成字节码文件,交给Java虚拟机解释);
1.3. 面向对象与面向过程对比。
我们都知道Java的核心思想是面向对象,Java中万事万物皆对象,那么面向对象与面向过程有什么不同呢?
(1).面向过程
优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点: 没有面向对象易维护、易复用、易扩展。
(2).面向对象
优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点: 性能比面向过程低。
1.4. Java平台的三个版本J2EE、J2SE、J2ME。
JavaSE:即Java标准版,主要用于开发和部署桌面、例如,Java应用程序开发平台Eclipse(常说的C\S架构)。
JavaEE:即Java企业版,主要针对企业应用的开发。例如,电商网站(常说的B\S架构)。
JavaME:即Java微型版,主要针对移动设备和嵌入式设备。例如,手机、PDA、电视机顶盒等等。
注:从JDK 5.0开始 J2EE 改名为 java EE,J2SE 改名为 java SE,J2ME 改名成 java ME。
1.5. JDK、JRE、JVM之间的区别于关系。
LZ身边很多Java程序员,虽然写了很久的代码,但问他们jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人都讲的不是特别清楚,作为一个合格的Java程序员了解这方面的基础理论知识是很必要的。
(1).三者之间的区别:
JDK:(Java Development Kit)即java的开发与运行环境,他除了包含完整的JRE之外,还包含了供开发者使用的工具包。
JRE:(Java Runtime Environment)即Java运行环境,非开发者只需要安装 JRE来运行程序, 它包含java运行的所需的类库+JVM(java虚拟机)。
JVM: (Java Virtual Machine) 即Java虚拟机, 当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是 java 程序可以一次编写多处执行的原因。
(2).三者之间的关系
- 作为程序员,就必须安装JDK,因为其中包含Java开发工具包,同时也包含了JRE。
- 作为使用者,运行已经开发好的Java程序,只需要安装JRE。
- JVM和JRE的关系:JRE包含了JVM,JVM是运行Java程序的核心虚拟机,同时也包含了Java程序所需的环境支持
- 总结:JDK>JRE>JVM
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f08Pd1lS-1608169557584)(https://www.pianshen.com/images/372/137eb9b06bf0d35928330724a5d60f9c.png)]
1.6. 什么是Java环境变量?
- 环境变量的意义
让java bin目录下的工具,可以在任意目录下运行,原理是将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 - JAVA_HOME
- 它指向jdk的安装目录,引用%JAVA_HOME%即可,避免每次引用都输入很长的路径串,方便第三方软件引用约定好的JAVA_HOME变量,保证程序正常运行。
- Path环境变量
设置Path环境变量之后就可以在任何目录下执行javac/java等工具命令了。 系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 - ClassPath
如果指定了classpath,那么会在指定的目录下查找要运行的类文件(JDK1.5后不需要配置)
1.7. javac命令和java命令做什么事情呢?
java运行分两部分:一个是编译,一个是运行。
javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。编译后生成class文件。
java:负责运行的部分.会启动jvm虚拟机,加载运行时所需的类库,并对class文件进行执行.
一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.
1.8. 什么是字节码,采用字节码的好处是什么。
首先我们来谈谈Java文件类型,一共有两种:
-
扩展名为Java,Java的源文件,编译之前的纯文本文件,用来储存Java源代码。
-
扩展名为class,Java 的类文件,编译之后的二进制文件,存储的是字节码。
也就是说编译后的.class文件存储就是字节码*。
采用字节码的最大好处: 可以实现一次编译到处运行,也就是java的与平台无关性,它依靠不同平台的Java虚拟机将编译后的字节码解释成具体平台上的机器指令执行。
1.9. import java和javax有什么区别
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来说使用。然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准API的一部分。
所以,实际上java和javax没有区别。这都是一个名字。
1.10. Java和C++的区别
都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存
1.11.Java数据类型
- 基本数据类型
- 引用类型
类、接口类型、数组类型、枚举类型、注解类型。 - 区别
基本数据类型 在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上。
引用数据类型 在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
1.12.Java访问修饰符
1.13. 字符型常量和字符串常量的区别
- 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符。
- 含义上: 字符常量相当于一个整形值( ASCII含义上: 字符常量相当于一个整形值( ASCII 值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)。
- 占内存大小 字符常量只占2个字节 字符串常量占若干个字节(至少一个字符结束标志) (注意: char在Java中占两个字节)
相当于一个整形值( ASCII 值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)。 - 占内存大小 字符常量只占2个字节 字符串常量占若干个字节(至少一个字符结束标志) (注意: char在Java中占两个字节)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-71uMS7nC-1608169557590)(https://www.pianshen.com/images/549/fffc86a6796ef6a1eac75536078db945.png)]