Java基础(一)Java语言概述及入门

news/2024/10/30 17:27:20/

1 Java语言概述

1.1Java概述

  • SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一门高级编程语言。
  • 是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet),内嵌在HTML代码中。
  • 伴随着互联网的迅猛发展,以及Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。

1.2 Java语言简史

起步阶段:
1991年,Sun公司的工程师小组想要设计一种语言,应用在电视机电话闹钟烤面包机等家用电器的控制和通信。由于这些设备的处理能力内存都很有限,并且不同的厂商会选择不同的中央处理器(CPU),因此这种语言的关键是代码短小紧凑与平台无关(即不能与任何特定的体系结构捆绑在一起)。
Gosling团队率先创造了这个语言,并命名为“Oak"(起名的原因是因为他非常喜欢自己办公室外的橡树)。后因智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。
随着20世纪90年代互联网的发展,Sun公司发现该语言在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。(Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。)
在这里插入图片描述
发展阶段:

发行版本发行时间备注
Java 1.01996.01.23Sun公司发布了Java的第一个开发工具包
Java 1.11997.02.19JavaOne会议召开,创当时全球同类会议规模之最。
Java 1.21998.12.08Java拆分成:J2SE(标准版)、J2EE(企业版)、J2ME(小型版)
Java 1.32000.05.08
Java1.42004.02.06
Java 5.02004.09.30①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaME
Java 6.02006.12.112009.04.20 Oracle宣布收购SUN公司
2009.04.20Oracle公司收购SUN,交易价格74亿美元。
Java 7.02011.07.02
Java 8.02014.03.18此版本是继Java 5.0以来变化最大的版本。是长期支持版本(LTS)
Java 9.02017.09.22①此版本开始,每半年更新一次;②Java 9.0开始不再支持windows 32位系统
Java 10.02018.03.21
Java 11.02018.09.25JDK安装包取消独立JRE安装包,是长期支持版本(LTS)
Java 12.02019.03.19
Java17.02021.09发布Java 17.0,版本号也称为21.9,是长期支持版本。
Java19.02022.09发布Java19.0,版本号也称为22.9。

1.3 Java技术体系平台

  • Java SE(Java Standard Edition)标准版*
    • 支持面向桌面级应用(如Windows下的应用程序)的Java平台,即定位个人计算机的应用开发。
    • 包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。
    • 此版本以前称为J2SE
  • Java EE(Java Enterprise Edition)企业版
    • 为开发企业环境下的应用程序提供的一套解决方案,即定位在服务器端的Web应用开发
    • JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如:Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术。
    • 版本以前称为J2EE
  • Java ME(Java Micro Edition)小型版
    • 支持Java程序运行在移动终端(手机、机顶盒)上的平台,即定位在消费性电子产品的应用开发
    • JavaME是JavaSE的内伸,精简了JavaSE 的核心类库,同时也提供自己的扩展类。增加了适合微小装置的类库:javax.microedition.io.*等。
    • 此版本以前称为J2ME
      在这里插入图片描述

注意: Android开发不等同于Java ME的开发

2 Java开发环境搭建

2.1 什么是JDK、JRE

  • JDK (Java Development Kit):是Java程序开发工具包,包含JRE 和开发人员使用的工具。
  • **JRE ** (Java Runtime Environment) :是Java程序的运行时环境,包含JVM 和运行时所需要的核心类库
    如下是Java 8.0 Platform:
    在这里插入图片描述

小结:
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库

2.2 JDK版本选择

在这里插入图片描述

  • 自Java 8版本发布以来,其后的每次更新,都会有小伙伴高呼:Java8 YYDS!
  • 论坛的声音:“你发任你发,我用Java 8!
    数据说话1:
    JRebel 于2022年4月前后发布了《2022 年Java生态系统状况报告》,报告中提到使用Java11 的占比最多,Java 8 紧随其后,如下图。而此前2020年的报告显示,Java8占比达到了84.48%
    在这里插入图片描述

G1是最受欢迎的GC算法。Java 11及更高版本的G1收集器是默认的GC,而Java 8中并不是。出于对G1的喜爱,很多开发者才会选择抛弃Java 8。

数据说话2:
此外,某美国软件开发商在对近千名专业的Java开发者调研后,发布的《2022年Java开发者生产力报告》称:八年前发布的Java 8依然是Java中应用最广泛的版本,占比 37%,其次是 Java 11,占比29%
Spring框架说话:
在Java 17正式发布之前,Java开发框架Spring率先在官博宣布,Spring Framework 6和Spring Boot 3计划在2022年第四季度实现总体可用性的高端基线:

  • Java 17+(来自 Spring Framework 5.3.x 线中的 Java 8-17)
  • Jakarta EE 9+(来自Spring框架5.3.x 线中的 Java EE 7-8)

Spring 官方说明:https://spring.io/blog/2022/01/20/spring-boot-3-0-0-m1-is-now-available
请添加图片描述

意味着:springboot3.0 是需要用java17和spring6.0为基础建设。如果从企业选型最新springboot3.0作为架构来说,它搭配jdk17肯定是标配了。

2.3 JDK的下载

  • 下载网址(Oracle公司官网):www.oracle.com
  • 下载步骤:如图所示,在官网底部选择Developers开发者
    请添加图片描述
    (1)在Developers页面中间的技术分类部分,选择Java,单击进入,如图所示:请添加图片描述(2)这里展示的是最新Java版本,例如Java17。单击Download Java,然后选择具体的版本下载。
    请添加图片描述
    (3)选择Download Java按钮后
    请添加图片描述
    (4)如果想安装Java8 可以选择如下位置:
    请添加图片描述
    (5)选择Accept License Agreement
    请添加图片描述
    (6)如果需要安装其它版本,可以选择Java archive:
    请添加图片描述
    接着进行选择下载即可:
    请添加图片描述

2.4 JDK的安装

  • 安装说明
    • 傻瓜式安装,下一步即可。
    • 建议:安装路径不要有中文或者空格等特殊符号。
  • 安装步骤:
    (1)双击jdk-17_windows-x64_bin.exe文件,并单击下一步,如图所示:
    请添加图片描述
    (2)修改安装路径,单击更改,如图所示:
    请添加图片描述
    (3)将安装路径修改为D:\develop_tools\jdk\jdk-17.0.2\,并单击下一步,如图所示:
    请添加图片描述
    (4)稍后几秒,安装完成,如图所示:
    请添加图片描述请添加图片描述

2.5 配置path环境变量

2.5.1 理解path环境变量

什么是path环境变量?
答:window操作系统执行命令时,所要搜寻的路径。
为什么配置path?
答:希望在命令行使用javac.exe等工具时,任意目录下都可以找到这个工具所在的目录。
以JDK为例演示
我们在C:\Users\songhk目录下使用javac命令,结果如下:
请添加图片描述
我们在JDK的安装目录的bin目录下使用javac命令,结果如下:
请添加图片描述我们不可能每次使用java.exe,javac.exe等工具的时候都进入到JDK的安装目录下,太麻烦了。这时就需要配置path环境变量。

2.5.2 JDK8配置方案:配置JAVA_HOME+path

  • 步骤:
    (1)打开桌面上的计算机,进入后在左侧找到计算机,单击鼠标右键,选择属性,如图所示:
    请添加图片描述
    (2)选择高级系统设置,如图所示:
    请添加图片描述
    (3)在高级选项卡,单击环境变量,如图所示:
    请添加图片描述
    (4)在系统变量中,单击新建 ,创建新的环境变量,如图所示:
    请添加图片描述
    (5)变量名输入JAVA_HOME,变量值输入 D:\develop_tools\jdk\jdk1.8.0_271 ,单击确定,如图所示:
    请添加图片描述(6)选中Path 环境变量,双击或者点击编辑 ,如图所示:
    请添加图片描述
    (7)在变量值的最前面,键入%JAVA_HOME%\bin。如图所示:
    请添加图片描述

注意:强烈建议将%JAVA_HOME%\bin声明在path环境变量中所有变量的最前面!

(8)环境变量配置完成,重启DOS命令行,在任意目录下输入javacjava命令或java -version,运行成功。
请添加图片描述
小结如下:
请添加图片描述

2.5.3 JDK17配置方案:自动配置

不管大家有没有提前安装JDK8或其它版本JDK,在我们安装完JDK17之后,理应按JDK8的方式配置path环境变量。但是,我们发现在安装完JDK17以后,配置环境变量之前,执行CMD指令:
请添加图片描述
竟然成功了!而且是17.0.2版本。因为JDK17在安装之后,自动进行了环境变量的配置。如下:
请添加图片描述
这里建议,将JDK17安装的路径,设置为JAVA_HOME,并将%JAVA_HOME%\bin上移到首位。
请添加图片描述

3 开发体验

JDK安装完毕,我们就可以开发第一个Java程序了,习惯性的称为:HelloWorld。

3.1 开发步骤

Java程序开发三步骤:编写编译运行

  • 将 Java 代码编写到扩展名为 .java 的源文件中
  • 通过 javac.exe 命令对该 java 文件进行编译,生成一个或多个字节码文件
  • 通过 java.exe 命令对生成的 class 文件进行运行
    请添加图片描述

3.2 编写代码

(1)在D:\JavaSE\chapter01 目录下新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为HelloWorld,后缀名必须为.java
请添加图片描述
2)用记事本或editplus等文本编辑器打开(虽然记事本也可以,但是没有关键字颜色标识,不利于初学者学习)
(3)在文件中输入如下代码,并且保存:

class HelloChina {public static void main(String[] args) {System.out.println("HelloWorld!!");}
}

第一个HelloWord 源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我们必须将编写好的Java源文件 编译成JVM可以看懂的字节码文件 ,也就是.class文件。

3.3 编译

在DOS命令行中,进入D:\JavaSE\chapter01目录,使用javac 命令进行编译。
使用文件资源管理器打开D:\JavaSE\chapter01目录,然后在地址栏输入cmd。
请添加图片描述
命令:

javac Java源文件名.后缀名java

举例:

javac HelloWorld.java

请添加图片描述
编译成功后,命令行没有任何提示。打开D:\JavaSE\chapter01目录,发现产生了一个新的文件 HelloChina.class,该文件就是编译后的文件,是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。

3.4 运行

在DOS命令行中,在字节码文件目录下,使用java 命令进行运行。
命令:

java 主类名字

主类是指包含main方法的类,main方法是Java程序的入口:

public static void main(String[] args){}

举例:

java HelloChina

请添加图片描述

4 注释

  • 什么是注释?
    • 源文件中用于解释、说明程序的文字就是注释。
  • 注释是一个程序员必须要具有的良好编程习惯。实际开发中,程序员可以先将自己的思想通过注释整理出来,再用代码去体现。

序员最讨厌两件事:
一件是自己写代码被要求加注释
另一件是接手别人代码,发现没有注释

  • 不加注释的危害
    请添加图片描述
  • Java中的注释类型:
    • 单行注释
      //注释文字
      
    • 多行注释
      /* 
      注释文字1 
      注释文字2
      注释文字3
      */
      
    • 文档注释 (Java特有)
      /**@author  指定java程序的作者@version  指定源文件的版本
      */ 
      
  • 注释的作用
    • 它提升了程序的可阅读性。(不加注释的危害性,见图。)
    • 调试程序的重要方法。
  • 具体使用1:单行注释、多行注释
    • 对于单行和多行注释,被注释的文字,不会不会出现在字节码文件中,进而不会被JVM(java虚拟机)解释执行。
    • 多行注释里面不允许有多行注释嵌套。
    • 一个段子
      A:嘿 //是什么意思啊?
      B:嘿.
      A:呃 我问你//是什么意思?
      B:问吧.
      A:我刚才不是问了么?
      B:啊?
      A:你再看看记录...
      B:看完了.
      A......所以//是啥?
      B:所以什么?
      A:你存心耍我呢吧?
      B:没有啊 你想问什么?
      ……
      不断循环之后,A一气之下和B绝交,自己苦学程序。
      N年之后,A终于修成正果,回想起B,又把聊天记录翻出来看,这时,他突然发现B没有耍他……
      而他自己也不知道当年他问B的究竟是什么问题……
      
  • 具体使用2:文档注释(Java特有)
    • 文档注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
    • 操作方式。比如:
      javadoc -d mydoc -author -version HelloWorld.java
      

请添加图片描述
案例:

//单行注释
/*
多行注释
*/
/**
文档注释演示。这是我的第一个Java程序!^_^
@author songhk
@version 1.0
*/
public class HelloWorld{/**Java程序的入口@param args main方法的命令参数*/public static void main(String[] args){System.out.println("hello");}
}

5 Java API文档

  • API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
  • Java语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的说明文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。大多数Java书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料。
  • Java API文档,即为JDK使用说明书、帮助文档。类似于:
    在这里插入图片描述
  • 下载API文档:
    • 在线看:https://docs.oracle.com/en/java/javase/17/docs/api/index.html
    • 离线下载:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html

6 Java核心机制:JVM

6.1 Java语言的优缺点

Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。“青出于蓝,而胜于蓝”。

6.1.1 优点

  • 跨平台性:这是Java的核心优势。Java在最初设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。
  • 通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”。
  • 原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM ,Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
    请添加图片描述
    请添加图片描述
  • 面向对象性:
    面向对象是一种程序设计技术,非常适合大型软件的设计和开发。面向对象编程支持封装、继承、多态等特性,让程序更好达到高内聚低耦合的标准。
  • **健壮性:**吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。
  • 安全性高:
    Java适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的攻击。如:安全防范机制(ClassLoader类加载器),可以分配不同的命名空间以防替代本地的同名类、字节代码检查。
  • 简单性:
    Java就是C++语法的简化版,我们也可以将Java称之为“C++--”。比如:头文件,指针运算,结构,联合,操作符重载,虚基类等。
  • 高性能:
    • Java最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。
    • Java低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。

6.1.2 缺点

  • 语法过于复杂、严谨,对程序员的约束比较多,与python、php等相比入门较难。但是一旦学会了,就业岗位需求量大,而且薪资待遇节节攀升
  • 一般适用于大型网站开发,整个架构会比较重,对于初创公司开发和维护人员的成本比较高(即薪资高),选择用Java语言开发网站或应用系统的需要一定的经济实力。
  • 并非适用于所有领域。比如,Objective C、Swift在iOS设备上就有着无可取代的地位。浏览器中的处理几乎完全由JavaScript掌控。Windows程序通常都用C++或C#编写。Java在服务器端编程和跨平台客户端应用领域则很有优势。

6.2 JVM功能说明

JVMJava Virtual Machine ,Java虚拟机):是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
请添加图片描述

6.2.1 功能1:实现Java程序的跨平台性

我们编写的Java代码,都运行在JVM 之上。正是因为有了JVM,才使得Java程序具备了跨平台性。
请添加图片描述
使用JVM前后对比:
请添加图片描述

6.2.2 功能2:自动内存管理(内存分配、内存回收)

  • Java程序在运行过程中,涉及到运算的数据的分配存储等都由JVM来完成
  • Java消除了程序员回收无用内存空间的职责。提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应阈值时,检查并释放可被释放的存储器空间。
  • GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄漏

http://www.ppmy.cn/news/40723.html

相关文章

推荐5款重度电脑用户也未必知道的小众软件

作为一个重度电脑用户,你可能会经常使用一些软件来完成各种任务和娱乐。但是你知道有哪些好用的WIN10软件吗?今天我就为你介绍一下我推荐的五款WIN10软件,它们分别是: 1.反恶意软件——Malwarebytes Malwarebytes是一款专业的反…

终端针对2G/3G退网场景处理方式介绍

本文介绍两种终端针对2G、3G网络频谱释放场景处理方式。 呼叫过程中网络返回SIP ERROR终端IMS呼叫过程中,网络返回PRACK message error,不同的运营商可能会有不同的要求。 如果运营商希望终端保持较好的IMS呼叫连续性和呼通率,那么终端可以忽略网络返回的错误继续完成IMS呼…

spring事务处理

系列文章目录 Spring中事务的处理相关内容的学习 文章目录系列文章目录前言一、Spring事务简介二、案例:银行账户转账1.题目要求和思路分析2.实现步骤3.实现结构三、spring事务角色四、spring事务相关配置五、案例:转账业务追加日志1.题目要求和思路分析…

为什么黑客不黑/攻击赌博网站?如何入门黑客?

攻击了,只是你不知道而已! 同样,对方也不会通知你,告诉你他黑了赌博网站。 攻击赌博网站的不一定是正义的黑客,也可能是因赌博输钱而误入歧途的法外狂徒。之前看过一个警方破获的真实案件:28岁小伙因赌博…

关于vector的emplace_back和push_back的区别

实验代码&#xff1a; class A { public:A(int x) {x x;cout << "construct A" << endl;}A(const A& a) {x a.x;cout << "copy construct A" << endl;}A(const A&& a) {cout << "Move construct A"…

PyQt5常用模块、类、控件

一、常用模块 QtCore:包含非核心的GUI功能&#xff0c;此模块用于处理时间、文件和目录、各种数据类型、流、URL、MIME类型、线程或进程 QtGui&#xff1a;包括窗口系统集成、事件处理、二维图形、基本成像、字体和文本 QtWidgets&#xff1a;基本控件都位于pyqt5.qtwidgets…

计算机网络面试八股文攻略(二)—— TCP 与 UDP

一、基础概念 TCP 与 UDP 是活跃于 运输层 的数据传输协议 TCP&#xff1a;传输控制协议 &#xff08;Transmission Control Protocol&#xff09;–提供面向连接的&#xff0c;可靠的数据传输服务。具体来说就是一种要建立双端连接才能发送数据&#xff0c;能确保传输可靠的…

leecode刷题初级-数组【python版本】

删除排除数组中的重复项&#xff1a; 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度&#xff0c;…