• 01- Java概述


    第1章 Java概述

    1.1 Java语言发展历史(记关键点)

    Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。

    Java之父是詹姆斯.高斯林(James Gosling)。

    1996年发布JDK1.0版。大约26年。

    目前最新的版本是Java21。

    1.2 Java语言特点(后面需要关注和体会)

    (1)优点

    • 面向对象:Java语言支持封装、继承、多态,面向对象编程,让程序更好达到高内聚低耦合的标准。

    • 支持分布式:Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

    • 健壮型:Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。

    • 安全性高:Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。

    • 跨平台性:Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。

    (2)缺点

    • 语法过于复杂,严谨,对程序员的约束比较多,与python和php等相比入门相对较难。但是一旦学会了,就业岗位需求量大,而且薪资待遇节节攀升。

    • 一般适用于大型网站开发,整个架构会比较重,对于初创公司开发和维护人员的成本比较高(即薪资高),选择用Java语言开发网站或应用系统的需要一定的经济实力。

    1.3 Java语言跨平台原理

    1、Java语言跨平台原理

    很多时候,我们写的程序可能要在**多个**操作系统运行,这个时候就要求我们的程序需要在尽可能**不改动**的情况下完实现这个目标。不同的语言实现**跨平台**的方式不同。Java语言实现跨平台是建立在“**虚拟机**”基础之上的。
    ​
    Java设计了一套简洁的虚拟指令集,也就是**字节码**。如果我们想要在一台机器上运行Java程序,只需要将Java程序**编译**成字节码就可以了。**编写**一个将Java程序翻译成Java字节码的**编译器**,比起编写一个将Java程序翻译成x86_64指令集的编译器来说,要简单得多。可是这里产生了一个问题,难道我们的机器可以直接执行字节码这样的虚拟指令集吗?当然是不能的。我们需要针对不同的指令集,开发对应的字节码解释器。这个工作同样比较简单。

    Java虚拟机(JVM,Java Virtual Machine)是由软件技术**模拟**出计算机运行的一个**虚拟**的计算机,它负责解释执行字节码指令集。也就是说,只要一台机器可以运行Java的虚拟机,那么就能运行Java语言编写的程序。而不同的平台,需要安装不同的**Java虚拟机程序**。那么我们**编写**完Java程序之后,需要先将.java的源文件**编译**为.class的字节码文件,然后在Java虚拟机中来**执行**这些字节码文件。

    Java虚拟机的设计不仅仅解决了Java程序跨平台的问题,同时解决了很多语言的跨平台问题。

    • .NET(C#,VB等语言)也有虚拟机,也能实现跨平台,但是只能在Windows操作系统下安装.NET环境。

    • C++不受虚拟机的限制,但是需要用不同平台的编译器重新编译一次。需要编写n个版本的编译器。

    • Java虚拟机可以配置在MacOS,Windows(PC操作系统),Linux等上,但是不能配置在WP(Windows Phone),IOS(移动操作系统)上,只能配置在android(移动操作系统)。Java程序可以实现一次编译处处运行。

    2、JVM、JRE、JDK的关系

    • JVM(Java Virtual Machine ):Java虚拟机,是运行所有Java程序的假想计算机,是Java程序的运行环境之一,也是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在JVM 之上。

    • JRE (Java Runtime Environment) :是Java程序的运行时环境,包含JVM 和运行时所需要的核心类库

    • JDK (Java Development's Kit):是Java程序开发工具包,包含JRE 和开发人员使用的工具。

    我们想要运行一个已有的Java程序,那么只需安装JRE 即可。

    我们想要开发一个全新的Java程序,那么必须安装JDK ,其内部包含JRE

    1.4 Java语言开发环境

    1、JDK的下载

    2、JDK的安装

    • 安装步骤:

      • 双击jdk-8u202-windows-x64.exe文件,并单击下一步,如图所示:

      • 取消独立JRE的安装,单击公共JRE前的下拉列表,选择此功能将不可用如图所示:

      • 修改安装路径,单击更改,如图所示:

      • 将安装路径修改为D:\develop\Java\jdk1.8.0_202\,并单击确定,如图所示:

      • 单击下一步,如图所示:

      • 稍后几秒,安装完成,如图所示:

      • 目录结构,如图所示:

    3、配置环境变量

    为什么配置path?

    希望在命令行使用javac.exe等工具时,任意目录下都可以找到这个工具所在的目录。

    例如:我们在C:\Users\Irene目录下使用java命令,结果如下:

    我们不可能每次使用java.exe,javac.exe等工具的时候都进入到JDK的安装目录下,太麻烦了。我们希望在任意目录下都可以使用JDK的bin目录的开发工具,因此我们需要告诉操作系统去哪里找这些开发工具,这就需要配置path环境变量。

    配置 JAVA_HOME+Path
    • 步骤:

      • 打开桌面上的计算机,进入后在左侧找到计算机,单击鼠标右键,选择属性,如图所示:

      • 选择高级系统设置,如图所示:

      • 高级选项卡,单击环境变量,如图所示:

      • 系统变量中,单击新建 ,创建新的环境变量,如图所示:

      • 变量名输入JAVA_HOME,变量值输入安装路径 D:\develop\Java\jdk1.8.0_202 ,并单击确定,如图所示:

      • 选中Path 环境变量,双击或者点击编辑 ,如图所示:

      • 点击新建,键入%JAVA_HOME%\bin,最后点击确定 。如图所示:

      • 环境变量配置完成,重新开启DOS命令行,在任意目录下输入javac 命令,运行成功。

    1.5 HelloWorld

    1.5.1 开发说明

    1、程序开发步骤说明

    JDK安装完毕,可以开发我们第一个Java程序了。

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

    2、编写Java源程序保存.java源文件
    1. 在电脑中目录新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为HelloWorld,后缀名必须为.java

    2. 用vscode文本编辑器打开(虽然是记事本也可以,但是不够没有关键字颜色标识,不利于初学者学习)

    3. 在文件中输入如下代码,并且保存:

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

    友情提示:

    每个字母和符号必须与示例代码一模一样。

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

    3、编译Java源文件生成.class字节码文件

    在DOS命令行中,进入 目录,使用javac 命令进行编译。

    方式一:使用文件资源管理器打开目录,然后在地址栏输入cmd。

    方式二:在vscode软件的文件菜单-->在集中终端中打开-->命令行

    命令:

    javac Java源文件名.后缀名

    举例:

    javac HelloWorld.java

    编译成功后,命令行没有任何提示。打开D:\atguigu\javaee\JavaSE20190624\code\day01_code目录,发现产生了一个新的文件 HelloWorld.class,该文件就是编译后的文件,是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。

    Java源文件的编译工具javac.exe

    4、运行Java程序

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

    命令:

    java 主类名

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

    1. public static void main(String[] args){
    2.    
    3. }

    举例:

    java HelloWorld

    友情提示:

    java HelloWord 不要写 不要写 不要写 .class

    Java字节码文件的运行工具:java.exe

    1.5.2 常见错误

    1、书写错误
    • 单词拼写问题

      • 正确:class 错误:Class

      • 正确:String 错误:string

      • 正确:System 错误:system

      • 正确:main 错误:mian Java语言是一门严格区分大小写的语言 标点符号使用问题

      • 不能用中文符号,英文半角的标点符号(正确)

      • 括号问题,成对出现

    2、Java程序的结构与格式

    结构:

    1. 类{
    2. 方法{
    3. 语句;
    4. }
    5. }

    格式:

    (1)每一级缩进一个Tab键

    (2){}的左半部分在行尾,右半部分单独一行,与和它成对的"{"的行首对齐

    3、字符编码问题

    当cmd命令行窗口的字符编码与.java源文件的字符编码不一致,如何解决?

    解决方案一:

    在vscode编辑器中,修改源文件的字符编码
    

    解决方案二:

    在使用javac命令式,可以指定源文件的字符编码
    
    javac -encoding utf-8 HelloWorld.java
    
    4、大小写问题

    (1)源文件名:

    在Windows操作系统中.java的源文件名不区分大小写,我们建议大家养成区分大小写的习惯。
    

    (2)字节码文件名与类名

    严格区分大小写
    

    (3)代码中

    严格区分大小写
    
    5、源文件名与类名一致问题?

    (1)源文件名是否必须与类名一致?public呢?

    如果这个类不是public,那么源文件名可以和类名不一致。但是不便于代码维护。
    
    如果这个类是public,那么要求源文件名必须与类名一致。否则编译报错。
    
    我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
    

    (2)一个源文件中是否可以有多个类?public呢?

    一个源文件中可以有多个类,编译后会生成多个.class字节码文件。
    
    但是一个源文件只能有一个public的类。
    

    (3)main方法必须在public的类中吗?

    不是。
    
    但是后面写代码时,基本上main方法(主方法)习惯上都在public类中。
    

    第2章 Java基础语法

    2.1 注释

    • 注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行。

    • Java中有单行注释多行注释文档注释

      • 单行注释以 //开头,以换行结束,格式如下:

        // 注释内容
      • 多行注释以 /*开头,以*/结束,格式如下:

        1. /*
        2. 注释内容
        3. */
      • 文档注释以/**开头,以*/结束,Java特有的注释,结合

        1. /**
        2. 注释内容
        3. */
    1. //单行注释
    2. /*
    3. 多行注释
    4. */
    5. /**
    6. 文档注释演示
    7. @author Lee
    8. */
    9. public class Comments{
    10.    
    11. /**
    12. Java程序的入口
    13. @param String[] args main方法的命令参数
    14. */
    15.    public static void main(String[] args){
    16.        System.out.println("hello");
    17.   }
    18. }

    常见的几个注释:

    • @author 标明开发该类模块的作者,多个作者之间使用,分割

    • @version 标明该类模块的版本

    • @see 参考转向,也就是相关主题

    • @since 从哪个版本开始增加的

    • @param 对方法中某参数的说明,如果没有参数就不能写(后面再学)

    • @return 对方法返回值的说明,如果方法的返回值类型是void就不能写(后面再学)

    • @throws/@exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写(后面再学)

    使用javadoc工具可以基于文档注释生成API文档。

    用法: javadoc [options] [packagenames] [sourcefiles] [@files]
    

    例如:

    javadoc -author -d doc HelloWorld.java

    2.2 关键字

    关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。

    • HelloWorld案例中,出现的关键字有 publicclassstaticvoid 等,这些单词已经被Java定义好

    • 关键字的特点:全部都是小写字母

    • 关键字比较多,不需要死记硬背,学到哪里记到哪里即可。

    关键字一共50个,其中const和goto是保留字。

    true,false,null看起来像关键字,但从技术角度,它们是特殊的布尔值和空值。

    2.3 标识符

    简单的说,凡是程序员自己命名的部分都可以称为标识符。

    即给类、变量、方法、包等命名的字符序列,称为标识符。

    1、标识符的命名规则(必须遵守的硬性规则)

    (1)Java的标识符只能使用26个英文字母大小写,0-9的数字,下划线_,美元符号$

    (2)不能使用Java的关键字(包含保留字)和特殊值

    (3)数字不能开头

    (4)不能包含空格

    (5)严格区分大小写

    2、标识符的命名规范(建议遵守的软性规则,否则容易被鄙视和淘汰)

    (1)见名知意

    (2)类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz,

    例如:HelloWorld,String,System等

    (3)变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz,

    例如:age,name,bookName,main

    (4)包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz,

    例如:java.lang

    (5)常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ,

    例如:MAX_VALUE,PI

    更多细节详见《Java开发手册(泰山版)》

    2.4 初识数据类型

    Java的数据类型分为两大类:

    • 基本数据类型:包括 整数浮点数字符布尔

    • 引用数据类型:包括数组接口枚举注解

    2.5 常量值

    • 常量值:在程序执行的过程中,其值不可以发生改变

    • 常量值的分类:

      类型举例
      整数常量值12,-23, 1567844444557L
      浮点常量值12.34F,12.34
      字符常量值‘a’,'0',‘尚’
      布尔常量值true,false
      字符串常量值”HelloWorld“
    • 整数常量值,超过int范围的必须加L或l(小写L)

    • 小数常量值,无论多少,不加F,就是double类型。要表示float类型,必须加F或f

    • char常量值,必须使用单引号

    • String字符串常量值,必须使用双引号

    1. /*
    2. 常量值:
    3. 代码里面写死的,固定不变的。
    4. 一目了然的值。
    5. 整数常量值:11L
    6. 小数常量值:1.51.5F
    7. 单字符常量值:'a'
    8. 布尔型常量值:true,false
    9. 字符串常量值:"hello"
    10. */
    11. public class ConstantValue{
    12. public static void main(String[] args){
    13. System.out.println(1);//识别为int
    14. System.out.println(1L);//识别为long,数字后面加L或l
    15. System.out.println(1.5);//识别为double
    16. System.out.println(1.5F);//识别为float类型,数字后面加F或f
    17. System.out.println('a');//识别为char类型,单引号
    18. System.out.println(true);//识别为boolean类型
    19. System.out.println(false);//识别为boolean类型
    20. System.out.println("helloworld");//识别为String类型,双引号
    21. System.out.println("1");//识别为String类型,双引号
    22. }
    23. }

    2.6 变量

    2.6.1 变量的概念

    变量:在程序执行的过程中,其值可以发生改变的量

    变量的作用:用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的。

    2.6.2 变量的声明

    1. 数据类型 变量名;
    2. 例如:
    3. //存储一个整数类型的年龄
    4. int age;
    5. //存储一个小数类型的体重
    6. double weight;
    7. //存储一个单字符类型的性别
    8. char gender;
    9. //存储一个布尔类型的婚姻状态
    10. boolean marry;
    11. //存储一个字符串类型的姓名
    12. String name;
    13. //声明多个同类型的变量
    14. int a,b,c; //表示a,b,c三个变量都是int类型。

    注意:变量的数据类型可以是基本数据类型,也可以是引用数据类型。

    2.6.3 变量的赋值

    给变量赋值,就是把“值”存到该变量代表的内存空间中。

    1、变量赋值的语法格式

    变量名 = 值;
    • 给变量赋值,变量名必须在=左边,值必须在=右边

    • 给变量赋的值类型必须与变量声明的类型一致或兼容(<=)

    2、可以使用合适类型的常量值给变量赋值

    1. int age = 40;
    2. double weight = 126.4;
    3. char gender = '女';
    4. boolean marry = true;
    5. String name = "小明";

    long类型:如果赋值的常量整数超过int范围,那么需要在数字后面加L。

    float类型:如果赋值为常量小数,那么需要在小数后面加F。

    char类型:使用单引号''

    String类型:使用双引号""

    3、可以使用其他变量或者表达式给变量赋值

    1. int m = 1;
    2. int n = m;
    3.        
    4. int x = 1;
    5. int y = 2;
    6. int z = 2 * x + y;

    2.6.4 变量值的输出

    1. //输出变量的值
    2. System.out.println(age);
    3. //输出变量的值
    4. System.out.println("年龄:" + age);
    5. System.out.println("age:" + age);
    6. System.out.println("name" + name + ",age = " + age + ",gender = " + gender + ",weight = " + weight + ",marry = " + marry);

    如果()中有多项内容,那么必须使用 + 连接起来

    如果某些内容想要原样输出,就用""引起来,而要输出变量中的内容,则不要把变量名用""引起来

    2.6.5 变量可以反复赋值

    • 变量的第一次赋值称为初始化;

    • 变量的再赋值称为修改变量的值;

    1. //先声明,后初始化
    2. char gender;
    3. gender = '女';
    4. //声明的同时初始化
    5. int age = 18;
    6. System.out.println("age = " + age);///age = 18
    7. //给变量重新赋值,修改age变量的值
    8. age = 19;
    9. System.out.println("age = " + age);//age = 19

    2.6.6 变量的三要素

    1、数据类型

    • 变量的数据类型决定了在内存中开辟多大空间

    • 变量的数据类型也决定了该变量可以存什么值

    2、变量名

    • 见名知意非常重要

    • 给这块内存区域赋值,例如:我们现在在”XX科技园“,我们住的校区叫做”新芒果春天“

    3、值

    • 基本数据类型的变量:存储数据值

    • 引用数据类型的变量:存储地址值,即对象的首地址。例如:String类型的变量存储的是字符串对象的首地址(关于对象后面章节再详细讲解)

    2.6.7 变量的使用应该注意什么?

    1、先声明后使用

    如果没有声明,会报“找不到符号”错误

    2、在使用之前必须初始化

    如果没有初始化,会报“未初始化”错误

    3、变量有作用域

    如果超过作用域,也会报“找不到符号”错误

    4、在同一个作用域中不能重名

    5、变量值的类型必须与变量声明的类型一致或兼容(<=)

    1. 一致:一样
    2. int age = 18;  18int类型的常量值,age也是int类型
    3. int = int
    4.    
    5. 兼容:可以装的下,=右边的值要 小于等于 =左边的变量类型
    6. long bigNum =18; 18int类型的常量值,bigNum是long类型
    7. int < long
    8. int age = 18L; 错误  18Llong类型的常量值,age是int类型
    9. long > int

    2.6.8 练习

    1. public class MyInfo{
    2. public static void main(String[] args){
    3. //存储姓名用String类型
    4. //=左边是变量名,右边是常量值,给变量赋值
    5. String name = "好谷";
    6. System.out.println("name");//原样显示字符串常量值"name"
    7. System.out.println(name);//把变量name中的值输出
    8. int age = 40;
    9. char gender = '女';
    10. double weight = 148.5;
    11. boolean marry = true;
    12. System.out.println(age);
    13. System.out.println(gender);
    14. System.out.println(weight);
    15. System.out.println(marry);
    16. System.out.println("----------------");
    17. // + 表示拼接,把"姓名:"字符串常量 和name字符串变量的值,拼接起来,构成一个字符串值
    18. System.out.println("姓名:" + name);
    19. System.out.println("name=" + name);
    20. //System.out.println("姓名:",name);//错误
    21.        
    22.        System.out.println("----------------");
    23.        System.out.println("name" + name + ",age = " + age + ",gender = " + gender + ",weight = " + weight + ",marry = " + marry);
    24. }
    25. }

    2.7 最终变量/常量(final)

    最终变量习惯上也称为常量,因为它是通过在声明变量的数据类型前面加final的方式实现的,所以叫最终变量。加final修饰后,这个变量的值就不能修改了,一开始赋值多少,就是多少,所以此时的变量名通常称为常量名。常量名通常所有字母都大写,每一个单词之间使用下划线分割,从命名上和变量名区分开来。

    这样做的好处,就是可以见名知意,便于维护。

    1. public class FinalVariableDemo {
    2. public static void main(String[] args){
    3.        //定义常量
    4.        final int FULL_MARK = 100;//满分
    5.       // FULL_MARK = 150;//错误,final修饰的变量,是常量,不能重新赋值
    6.        
    7.        //输出常量值
    8.        System.out.println("满分:" + FULL_MARK);
    9.        
    10.        //小好的成绩比满分少1
    11.        int hao = FULL_MARK - 1;
    12.        //小谷得了满分
    13.        int gu = FULL_MARK;
    14.        //小李得了一半分
    15.        int lee = FULL_MARK/2;
    16.        
    17.        //输出变量值
    18.        System.out.println("小好成绩:" + hao);
    19.        System.out.println("小古成绩:" + gu);
    20.        System.out.println("小李成绩:" + lee);
    21. }
    22. }

  • 相关阅读:
    AI更改视频语言的神奇网址:让郭德纲讲英语成为现实!
    Fisco开发第一个区块链应用
    【定语从句练习题】定语从句中的介词
    【JAVA基础】深入解析 ArrayList 和 LinkedList 的区别?
    数据结构与算法训练:第十六弹
    Linux常用操作命令(拷贝、登录)介绍
    第28篇 Spring Boot简介
    常见的100道java面试题及答案【java学习+面试指南】(二)
    使用gtest和lcov测试代码覆盖率
    Linux基础学习——shell脚本基础:bash脚本编程基础及配置文件
  • 原文地址:https://blog.csdn.net/weixin_55702682/article/details/136708616