Java导航
- Java知识复习一
- 前言
- 一、Java基础框架
- 二、发展历程
- 1、问世起源
- 2、发展历程
- 3、工具梳理
- 3.1 JDK、JRE、SDK概念
- 3.2 开发工具
- 3.3 构建工具
- 3.4 JDK版本
- 三、Java基础
- 1、数据类型
- 1.1 基本数据类型
- 1.2 引用数据类型
- 2、控制语句
前言
本博文重在夯实Java基础的知识点,回归书本,夯实基础,学深学精
近期需要巩固项目和找实习,计划打算将Java基础从头复习一遍,夯实基础,可能对Java的一些机制不了解或者一知半解,正好借此机会深入学习,也算记录自己的一个学习总结。
Java基础参考书籍:《Java 开发实战经典 名师讲坛 第2版》与《Java核心技术 卷I》
一、Java基础框架
在第一章【基础程序设计】这一块,我们会先了解Java的发展历程,便于读者对Java的历史有所了解,包块Java问世的时代背景和背后要素。
第一个分支偏向基础,第二个分支更强调面向对象的特性,第三个分支更强调面向应用编程。
众所周知,Java是企业级WEB应用开发所用的最广泛的一种语言之一。这与Java的问世背景是分不开的。可能大多数人只知道Java这门编程语言,不知道编程语言的历史。
1、问世起源- Java语言的问世源于一个由SUN公司主研发的名为Green的项目。这个项目的需求是为家用电子消费产品开发的一个分布式代码系统,用于通过网络控制加入电器。起初,SUN工程师准备采用C++进行开发,可是由于C++过于复杂且安全性较低,于是就采用基于C++开发的另一种语言Oak(Java的前身)进行开发,可是被SGI这个项目打败,就在这时,一位工程师研发的Mosaic和Netscape这两个项目,启发了Oak项目组成员,于是Java于1995年问世,进军Internet领域。
- 其突出的特性为跨平台:在每个 *** 作系统上,增加了一个抽象层,称为Java虚拟机,简称JVM。每个平台只要安装JVM,就可以运行Java程序。
-
Java的初生
-
1995年的网页简单而粗糙,缺乏互动性
-
图形界面的程序(Applet)
-
Bill Gates(比尔盖茨)说:这是迄今为止设计的最好的语言
-
Java2标准版(J2SE): 去占领桌面
-
Java2移动版(J2ME):去占领手机
-
Java2企业版(J2EE):去占领服务器
-
大量巨头的加入
在1998年,Java派出三支部队,向外扩张,分别是J2SE、J2ME、J2EE,
但是其中J2SE的用户发现,J2SE开发出来的界面非常的难看,和原生的桌面差距很大,J2ME也一样,不受待见,但是J2EE赶上了互联网的发展,让用户感到强大,简单,安全还跨平台,非常适合一些团队开发重要项目。
3、工具梳理 3.1 JDK、JRE、SDK概念
- JRE 【Java Runtime Environment】 Java运行时环境,是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
- JDK 【Java Development Kit】Java开发工具包,是程序员使用java语言编写java程序所需的开发工具包。
- SDK 【Software Development Kit】一般指软件开发包,可以包括函数库、编译程序等。
也就说JDK可以理解为Java程序开发的SDK。 - 总结:JDK包含JRE和其它开发工具,为Java程序开发的SDK,JDK负责开发,交个JRE运行,JVM保证java语言的跨平台性。
现阶段采用的开发工具是IDEA
- 界面美观,适合开发
- 插件齐全,便于开发
- *** 作容易,便于上手
- Maven 【项目管理和构建自动化工具】
是一个项目管理工具,包含了一个项目对象模型(POM : Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System )和用来运行定义在生命周期阶段中插件目标的逻辑。
Maven项目主要以pom.xml
文件进行标识。
- Gradle 【项目管理和构建自动化工具】
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy
的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
虽然Gradle是基于Groovy的,但是由于其提供了一整套DSL,所以在开发Gradle脚本时几乎脱离了Groovy的感知。我们在这里把Gradle当成一个独立的部署工具,而不去深究原理,从这个角度来看,Groovy不是学习Gradle的前提条件。
Gradle项目主要以build.gradle
文件进行标识
JDK(Java)各版本新特性
- JDK和OpenJDK区别与联系
历史上的原因是,OpenJDK是JDK的开放源码版本
,也就是在09年的时候Sun公司由于各种原因被Oracle收购,即将被收购时Sun公司将JDK开源于是就出现了OpenJDK,open就是开发开源的意思,开放JDK源代码可供让全世界IT开发者学习。 - 现在JDK归属于Oracle公司,所以每年(每年可能不太准确应该是每次)Oracle公司发布新版的JDK时会发布
两个版本
:一个是加了一些自己Oracle公司的商业技术的JDK
(就类似在一个纯净的软件上加了一些自己的插件等) ,另一个是OpenJDK(也就是一般没有加任何其他插件的纯净版的JDK)。即便是这样JDK与OpenJDK源代码差距也微乎其微,几乎也可以认为是一模一样
。 - Oracle发布OpenJDK后,全球各大公司比如IBM,FaceBook以及阿里巴巴等等,这些公司获取到OpenJDK后就可以加上自己公司的一些
商业技术插件
然后就形成了自己公司的JDK了。 - 为什么大多数开发者和公司仍然在用
Java 8(JDK 8)
?
升级版本耗时费力,最重要的是有可能影响服务的稳定性,虽然说 Java 是向后兼容的,但是谁知道是不是有坑在里面。在没有重大安全漏洞或重大性能提升的情况下,大多数公司还是以稳定性为主,既然 Java 8 已经能满足业务需求了,那就用它好了。
- 强调一点,
我们编写的程序是.java文件
,需要运行javac.exe
程序编译.java文件,将其编译出.class
文件,有时此功能可以完全交给开发工具(编译器)IDEA。 - 使用
java
命令可以执行.class
文件。 public class
定义要求文件名称与类名称保持一致,而在*.java
文件中只允许一个public class
定义。class
定义的类文件名称可以与类名称不一致,但是在编译后每一个使用class声明的类都会生成一个*.class文件,也就是说一个.java
文件可以产生多个.class
文件,分别对应.java
文件中的每一个类。- 实际开发中一个
.java
一般只会有一个class类。 - 主方法(
main()
)是一切程序的起点,所有的程序代码都从主方法开始执行。
public static void main(String[] args){
……
}
- main方法中String[] args这个参数表明main方法将接收一个
字符串数组
,也就是命令行参数
。
F:\work\src> java example -g 123 123
args数组将包含下列内容:
- agrs[0]:“-g”
- args[1]:“123“
- args[2]:“123”
System.out.println();//输出后并换行
System.out.print();//输出后不换行
- PATH和CLASSPATH的区别
PATH:是 *** 作系统的环境属性,指的是可以执行命令的程序路径
CLASSPATH:是所有*.class
文件的执行路径,Java命令执行时将利用此路径加载所需要的的.class
文件。可以使用SET CLASSPATH=
这条语句对CLASSPATH进行修改,后面接目录,如e:/mydemo
,当前目录是设置为.
。
- 文档注释
/** ………… */
- 标识符 由
大小写字母、数字、下划线和美元$
符号组成,但不能以数字开头。
不能以数字开头,是为了方便区分标识符和常量,从而便于编译器编译。
基本数据类型选择经验
1)表示整数
就用int
(如一个人的年龄),表示小数
就用double
(如一个人的工资或者成绩)
2)如果要描述日期时间数据
或者表示文件
或内存
大小,使用long
3)如果要实现内容传递【I/O *** 作
、网络编程
】或者是编码转换
时使用byte
4)实现逻辑的控制
,可以使用boolean
(布尔值类型,只有true或者false)
5)如果想要处理中文
,使用char
可以避免乱码问题
- boolean默认值为
false
- 自动类型转换 由低范围转换为高范围 字符可以自动提升为整数
- 强制类型转换 (类型)变量名 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
不能对布尔值进行转换
不能把对象类型转换为不相干的类型 - 运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ( ) [ ] | 从左到右 |
2 | ! ~ ++ – | 从右到左 |
3 | * / % | 从左到右 |
4 | + - | 从左到右 |
5 | << >> >>> | 从左到右 |
6 | < <= > >= instanceof | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | I | 从左到右 |
11 | && | 从左到右 |
12 | II | 从左到右 |
13 | ? : | 从左到右 |
14 | = += -= *= /= %= &= I= ^= ~= <<= >>= >>>= | 从右到左 |
15 | , | 从右到左 |
单算移关与,异或逻条赋
括号级别最高,逗号级别最低,单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值。
1.2 引用数据类型- 引用数据类型用来表示复杂数据类型
- Java中的引用数据类型,相当于C等语言中
指针(pointer)类型
,引用事实上就是指针,是指向一个对象的内存地址
。 - 引用数据类型变量中保持的是指向对象的内存地址。很多资料上提到Java不支持指针,事实上是不支持指针计算,而指针类型还是
保留
了下来,只是在Java中称为引用数据类型
。 基本数据类型
只有一块
存储空间(分配在stack
中), 而引用数据类型
有两块
存储空间(一块在stack中,一块在heap中
)- 引用是一种数据类型(保存在stack中),保存了
对象
在内存(heap,堆空间)中的地址
,这种类型即不是
我们平时所说的简单数据类型也不是类实例(对象)
- 不同的引用可能指向同一个对象,换句话说,
一个对象可以有多个引用
,即该类类型的变量
Java中一切都被视为对象,但 *** 纵对象的实际上是对象的一个“引用”(Reference),可以将这个情景想象成遥控器(引用), *** 纵电视(对象)。 ——《Java编程思想》
JVM内存空间
- Heap 堆空间:分配对象 new Student()
对象是在堆空间里面
- Stack 栈空间:临时变量 Student stu
- Code 代码区 :类的定义,静态资源 Student.class
Student stu = new Student(); //new 在内存的堆空间创建对象
stu.study(); //把对象的地址赋给stu引用变量
上例实现步骤:
- JVM加载Student.class 到Code区
- new Student()在堆空间分配空间并创建一个Student实例
- 将此实例的地址赋值给引用stu, 栈空间
- 顺序结构 程序
从上到下
一行一行的执行,中间没有任何判断和跳转。
- 分支结构 根据
条件
不同执行不同
的语句,主要有if……else和switch……case两种语句。
if……else语句
单分支结构
if(布尔表达式){
//布尔表达式为true时执行的语句;
}
双分支结构
if(布尔表达式){
//布尔表达式为true时执行的语句;
}
else{
//布尔表达式为false时执行的语句;
}
多分支结构
if(布尔表达式1){
//布尔表达式为true时执行的语句;
}else if(布尔表达式2){
//布尔表达式2为true时执行的语句;
}else if(布尔表达式3){
//布尔表达式3为true时执行的语句;
}else if(布尔表达式4){
//布尔表达式4为true时执行的语句;
}
嵌套使用
if(布尔表达式1){
if(布尔表达式2){
//语句;
}
}
switch……case语句
switch……case语句判断一个变量与一系列常量中某个值是否相等,每一个常量都是一个分支。
语句格式
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break;
}
- 循环结构 指的是某一段代码可以实现反复的执行。
有三种循环结构:while循环,do-while循环和for循环。
while循环(当型循环)
while(布尔表达式){
//循环内容;
}
布尔表达式的值为true时,循环就会一直执行下去。
do……while循环(直到型循环)
do{
//循环语句;
}while(布尔表达式);
相对于while语句,do-while语句无论布尔表达式的值是什么,
都会执行一次循环语句暨循环至少执行一次。
并且do-while语句会先执行循环语句在判断,while语句先判断在执行循环语句。
for循环(for型循环)
for(初始化;布尔表达式;更新){
//循环体;
}
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构。
for循环的执行次数是在执行前就确定的。
for循环扩展
for(声明类型:表达式){
//循环体;
}
该用法主要用于数组和集合。
声明类型:声明新的局部变量,该变量类型必须数组元素的类型匹配,其作用域限定在循环体内。
表达式:表达式的值是要访问的【数组名】也可以是【返回值为数组】的【方法】。
- 中断符号
break
在任何循环体中,都可以使用break控制循环的流程。
用于退出当前(退出所有循环)循环体,不执行循环体接下来的部分。在switch中也常常使用。
继续执行【循环外】的下一语句。
continue
在循环体中,终止某次循环过程。
即跳过接下来循环体的内容,执行下一次循环体判断过程。
goto
goto关键字很早就在程序设计语言中出现。
尽管goto是Java一个保留字,但未在语言中正式使用,Java没有goto。
然而,在break和continue这两个关键字的身上,我们依然能看出一些goto的影子。
至于goto的用法,这里也不做介绍。
- while循环和for循环使用场景
while循环 循环次数不确定;循环结束条件确定。
for循环 循环次数确定。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)