1.Java基础
1.1 Java语言有哪些特点
1.==简单易学==(简化版C++)
2.==面向对象==【封装(就是可以通过权限修饰符将属性设置权限,这样只能通过get/set方法获取),继承(父类和子类之间具有继承关系,子类可以继承父类的方法和属性,并且在此基础上进行修改),多态(编译看左边,运行看右边)】
3.==平台无关性==(Java虚拟机实现平台无关性)
4.==支持多线程==(Java支持多线程)
5.==可靠性==(Java具备异常处理和自动内存管理机制)
6.==安全性==(Java提供权限修饰符,限制程序直接访问操作系统资源)
7.支持==网络编程==
8.==跨平台性==:只要操作系统安装jvm就可以运行java程序 (一次编写,随处运行)
1.2 Java三个版本的比较
==Java SE(Java Platform,Standard Edition)==: Java 平台==标准版==,Java 编程语言的基础,它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建==桌面应用程序== / ==简单的服务器应用程序==
==Java EE(Java Platform, Enterprise Edition )==:Java 平台==企业版==,建立在 Java SE 的基础上,包含了支持==企业级应用程序开发==和部署的标准和规范(比如 Servlet、JSP、EJB、JDBC、JPA、JTA、JavaMail、JMS)。 Java EE 可以用于构建分布式、可移植、健壮、可伸缩和安全的服务端 Java 应用程序,例如 Web 应用程序
==Java ME== 是 Java 的微型版本,主要用于开发==嵌入式消费电子设备的应用程序==,例如手机、PDA、机顶盒、冰箱、空调等。Java ME 无需重点关注,知道有这个东西就好了,现在已经用不上了。
简单来说,Java SE 是 Java 的基础版本,Java EE 是 Java 的高级版本。Java SE 更适合开发桌面应用程序或简单的服务器应用程序,Java EE 更适合开发复杂的企业级应用程序或 Web 应用程序
1.3 JVM & JDK & JRE 三者对比
- ==JDK==: Java程序开发工具包=jre+开发人员使用的工具(例如javac编译工具)
- ==JRE==: Java程序运行时环境=jvm+运行时需要的核心类库 [有了jre其实就可以运行代码]
==JVM==: 运行Java字节码的虚拟机,JVM针对不同系统有特定实现(使用相同的字节码.class,得出相同结果) –> 一次编译,随处可以运行
1.4 字节码(.class文件)
==字节码==:JVM可以理解的代码,不面向任何特定的处理器,只面向虚拟机JVM。
- Java程序执行过程:
引入==JIT编译器(运行时编译)==,完成第一次编译之后就会将字节码对应的机器码保存下来,下次可以直接使用。机器码效率 > java解释器,所以Java是编译和解释共存的语言
HotSpot 采用了==惰性评估(Lazy Evaluation)==的做法,根据==二八定律==,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是 JIT 所需要编译的部分。JVM 会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。
JDK、JRE、JVM、JIT 这四者的关系如下图所示
1.5 Java语言是”编译和解释并存”
这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。
因为 Java 程序要经过==先编译,后解释==两个步骤,Java 编写的程序需要先经过编译步骤,生成字节码(.class
文件),这种字节码必须由 Java 解释器来解释执行
1.6 Java和C++区别
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。
1.7 Java三种注释
- ==单行注释== 通常用于解释方法内某单行代码的作用
- ==多行注释== 通常用于解释一段代码的作用
- ==文档注释(Java特有)== 通常用于生成 Java 开发文档
注释并不会执行(编译器在编译代码之前会把代码中的所有注释抹掉,字节码(.class)中不保留注释)
代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。
若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述
1.8 Java结构和格式
- Java结构和语法格式
1 | 权限修饰符 class 类名{ |
- Java程序入口 –main方法
1 | public static void main(String[] args){ |
- Java程序输出
1 | //有两种情况 |
源文件名和类名
==一致性==:
如果一个类写了很多类,==源文件名(.java)必须和public的class类名一致==(不一致会编译报错),可以和其他类不一致(不便于代码维护)
==多样性==:
一个源文件可以有多个类,但是一个源文件只有一个public类
1.9 标识符和关键字
- ==标识符==:只要你自己要定义的都可以叫做标识符
- 区别大小写
- 长度无限制
- 只能由这四种组成:
- ①26个英文字母 (可以当做开头)
- ②数字0-9 【如果可做开头的话就不知道指代数字本身还是变量所对应的值 int 123L=12; long l=123L; 这样的话l最后是123还是12】
- ③ 下划线_ (可以当做开头)
- ④ 美元符号$ (可以当做开头)
- 可以包含关键字和保留字,但是不可以使用
- 四种情况的命名规范:
- ①包名 —所有的字母都小写 — java.lang com.at.bean
- ②类名/接口名 —所有的单词首字母大写 —ShopController
- ③变量名/方法名 —第一个单词的首字母小写,后面的单词首字母都大写 —getById()
- ④常量名 —所有的字母大写,中间用下划线连接 — MAX_SHOP_VALUES
- ==关键字==: 专门用途的字符串/单词
- 全部为小写,一共有50个(const和goto是保留字,true和false和null是字面量)
其中,default可以在程序控制,可以当做修饰符,还可以设置为访问权限
在程序控制中,当在
switch
中匹配不到任何情况时,可以使用default
来编写默认匹配的情况。在类,方法和变量修饰符中,从 JDK8 开始引入了默认方法,可以使用
default
关键字来定义一个方法的默认实现。在访问控制中,如果一个方法前没有任何修饰符,则默认会有一个修饰符
default
,但是这个修饰符加上了就会报错。