Java剑开天门(一)

Java知识复习一


相关导航
Java剑开天门(一)
Java剑开天门(二)
Java剑开天门(三)
Java剑开天门(四)
Java剑开天门(五)



前言

本博文重在夯实Java基础的知识点,回归书本,夯实基础,学深学精

近期需要巩固项目和找实习,计划打算将Java基础从头复习一遍,夯实基础,可能对Java的一些机制不了解或者一知半解,正好借此机会深入学习,也算记录自己的一个学习总结。
Java基础参考书籍:《Java 开发实战经典 名师讲坛 第2版》与《Java核心技术 卷I》


一、Java基础框架

Java基础
基础程序设计
面向对象程序设计
应用程序设计
数据类型
控制语句
数组
方法
面向对象特性
封装
继承
多态
异常
权限
类库
IO
类集
多线程
反射
网络
JDBC
GUI
NIO

在第一章【基础程序设计】这一块,我们会先了解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程序。

2、发展历程

  • 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程序的用户使用的。
JRE
Java虚拟机 JVM
Java基础类库
  • JDK 【Java Development Kit】Java开发工具包,是程序员使用java语言编写java程序所需的开发工具包。
JDK
Java运行时环境 JRE
源码编译器 Javac
程序调试与分析工具
文档与Demo子程序
Jconsole
Jvisualvm
其它
  • SDK 【Software Development Kit】一般指软件开发包,可以包括函数库、编译程序等。
    也就说JDK可以理解为Java程序开发的SDK。
  • 总结:JDK包含JRE和其它开发工具,为Java程序开发的SDK,JDK负责开发,交个JRE运行,JVM保证java语言的跨平台性。

3.2 开发工具

现阶段采用的开发工具是IDEA

  • 界面美观,适合开发
  • 插件齐全,便于开发
  • 操作容易,便于上手

3.3 构建工具

  • 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文件进行标识
    请添加图片描述

3.4 JDK版本

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基础

  • 强调一点,我们编写的程序是.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、数据类型

数据类型
基本数据类型
引用数据类型
数值型
字符型
布尔型
整数类型 byte short int long
浮点类型 float double
类 class
接口 interface
数组

1.1 基本数据类型

基本数据类型选择经验
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^从左到右
10I从左到右
11&&从左到右
12II从左到右
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, 栈空间

2、控制语句

控制语句
顺序结构
分支结构
循环结构
顺序执行
单分支结构
双分支结构
多分支结构
嵌套使用
当型循环
直到型循环
For型循环
  • 顺序结构   程序从上到下一行一行的执行,中间没有任何判断和跳转。

  • 分支结构   根据条件不同执行不同的语句,主要有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关键字很早就在程序设计语言中出现。
尽管gotoJava一个保留字,但未在语言中正式使用,Java没有goto。
然而,在breakcontinue这两个关键字的身上,我们依然能看出一些goto的影子。
至于goto的用法,这里也不做介绍。
  • while循环和for循环使用场景

     while循环  循环次数不确定;循环结束条件确定。
     for循环   循环次数确定。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值