day02_java常识丶入门程序

语言:是人与人之间用于沟通的一种方式。例如:中国人与中国人用普通话沟通。而中国人要和英国人交流,就要学习英语。计算机语言:人与计算机交流的方式。如果人要与计算机交流,那么就要学习计算机语言。计算机语言有很多种。计算机语言一般划分下面几代:

  • 第一代语言:机器语言。指令以二进制代码形式存在。
  • 第二代语言:汇编语言。使用助记符表示一条机器指令。
  • 第三代语言:高级语言。C、Pascal、Fortran面向过程的语言丶C++面向过程/面向对象丶Java跨平台的纯面向对象的语言

Java语言概述

  • 是SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一门高级编程语言。
  • 是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。 applet内嵌在HTML代码中。
  • 随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。
  • Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全相同。但同时,Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。JDK1.5又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱

java的版本发展如下图所示:

                                                                                       day02_java常识丶入门程序

Java技术体系平台

                                                                                           day02_java常识丶入门程序

Java语言的主要特点

特点一:面向对象

  • 两个基本概念:类、对象
  • 三大特性:封装、继承、多态

特点二:健壮性

  • 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制

特点三:跨平台性

  • 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM JavaVirtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

                                                                                             day02_java常识丶入门程序

 

核心机制—Java虚拟机:JVM是一个虚拟的计算机,。负责执行指令,管理数据、内存、寄存器。只有某平台提供了对应的java虚拟机,java程序才可在此平台运行。Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”

                                                                                                                                                                                                                                             day02_java常识丶入门程序

核心机制—垃圾回收:

  • 在C/C++等语言中,由程序员负责回收无用内存。Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。Java程序还会出现内存泄漏和内存溢出问题吗?Yes!

Java语言的环境搭建

什么是JDK,JRE

                                                                                       day02_java常识丶入门程序

JDK、JRE、JVM关系

                                                                                                              day02_java常识丶入门程序

 

安装JDK

  • 进入官网www.oracle.com,下载需要的JDK版本
  • 傻瓜式安装,下一步即可。
  • 建议:安装路径不要有中文或者空格等特殊符号。
  • 如果操作系统是64位的,软件尽量选择支持64位的(除非软件本身不区分)。

JDK的安装目录

                                                                 day02_java常识丶入门程序

配置环境变量 path

  • 根据windows系统在查找可执行程序的原理,可以将java工具所在路径定义到path 环境变量中,让系统帮我们去找运行执行的程序。具体过程可以百度。

                                                                                         day02_java常识丶入门程序

配置完path环境变量以后的验证

                                                                                                                                                                                                                           day02_java常识丶入门程序

初步了解 Java 的加载与执行

  • 搭建好了开发环境后,在编写第一个 Java 程序之前,我们应当对 Java 的加载与执行提前有一个简单的了解,请 看下图:

                                                                                                                                                                                                                                                      day02_java常识丶入门程序

通过上图,我们可以看到 Java 程序从开发到最终运行是这样进行的:

  • 第一步(写代码):在任意位置创建一个.java 结尾的文件,程序员在该文件中编写符合 Java 语法的源代码,这个文件被称为Java 源文件。
  • 第二步(编译):使用“javac”命令对 java 源文件进行编译,如果 Java 源文件符合 Java 语法规则,则编译生成 1 个或者多个以“.class”结尾的文件。“.class”结尾的文件我们称之 为字节码文件,注意字节码文件不是普通文本文件,使用记事本等文本编辑器是无法打开的, 但该文件内容也不是二进制,如果是二进制形式的话,操作系统是可以直接执行的,这个文件 的内容我们称之为字节码。注意:这里有一个“类名”的概念,假设生成的文件是 A.class, 则表示类名为 A,B.class 则表示类名为 B。
  • 第三步(运行):使用“java”命令运行已编译的 Java 程序,假设编译之后的字节码文件 是 A.class,则在 dos 命令窗口中执行 java A命令,这个时候 Java 虚拟机(JVM)就启动了, Java 虚拟机通过“类装载器 ClassLoader”从硬盘中找到 A.class 文件并装载,字节码文件被装 载到 Java 虚拟机之后,Java 虚拟机解释器对字节码进行解释,最终解释为二进制码,然后操 作系统通过执行二进制指令来和硬件平台完成交互。

以下则是 Java 程序加载与执行的过程,接下来我给大家总结 7 条规则,大家可以理解并记忆一下:

  1. Java 程序从开发到运行包括编译和运行两个阶段,这两个阶段可以在不同的操作系统 中完成,例如在 windows 环境下进行编译,在 Linux 环境下运行,这是因为有 JVM 机制的存 在,做到了一次编译到处运行(跨平台/可移植)。
  2. 编译阶段需要使用 javac.exe(安装 JDK 之后该命令就存在了)命令,运行阶段需要使 用 java.exe(安装 JRE 之后该命令就存在了)命令。
  3. 一个 Java 源文件可能会编译生成多个 class 文件。
  4. Java 源文件中的源代码如果不符合 Java 的语法机制则编译时编译器会提示错误信息, 并且无法生成 class 文件。反之则生成 class 文件,而 class 文件才是最终要执行的程序,此时 将 Java 源文件删除是不会影响 Java 程序运行的(当然,我们也不必删除 java 源文件,因为在 运行 class 文件之后,如果没有达到预期的运行效果,这个时候还需要将 Java 源代码修改,重 新编译,以达到最终的运行效果)。
  5. 若生成的字节码文件名为 A.class,那么我们称 A为一个类的名字
  6. 当编译阶段完成之后,我们可以使用 JRE 中的 java.exe 命令运行程序,例如执行命令 “java A”,该命令执行后会启动类加载器,类加载器去硬盘上搜索 A.class 文件,找到该字节 码文件之后,将其加载到 JVM 当中,JVM 中的解释器会将 A.class 字节码文件解释为操作系 统可以执行的二进制码,然后操作系统通过执行二进制码和硬件平台交互。
  7. 运行 Java 程序的前提是当前操作系统上已经安装了对应版本的 JVM(JVM 不是单独 安装的,安装 JRE 即可,不同的操作系统需要安装不同版本的 JRE,不同版本的 JRE 对应不 同版本的 JVM)。

在了解了 Java 程序的加载与执行之后,我们开始动手实现第一个 Java 程序吧!

第一个Java程序HelloWorld

开发环境已经搭建完毕,可以开发我们第一个Java程序了。 步骤如下:

  1. 将 Java 代码编写到扩展名为 .java 的文件中。
  2. 通过 javac 命令对该 java 文件进行编译
  3. 通过 java 命令对生成的 class 文件进行运行

                                                                                                            day02_java常识丶入门程序

1:编写Java源程序 

选择最简单的编辑器:记事本。 敲入如下代码

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

将文件保存成HelloWorld.java,这个 文件是存放java代码的文件, 称为源文件。文件名必须是 HelloWorld ,保证文件名和类的名字是一致的,注意大小写。每个字母和符号必须与示例代码一模一样。第一个 HelloWord 源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我们必须将编写好的 Java源文件 编译成JVM可以看懂的 字节码文件 。

2:编译Java源文件

在DOS命令行中,进入Java源文件的目录,使用 javac 命令进行编译。

day02_java常识丶入门程序

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

3:运行Java程序

在DOS命令行中,进入Java源文件的目录,使用 java 命令进行运行。

day02_java常识丶入门程序

入门程序说明  

  • 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中, javac 编译器会检查我们 所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功。
  • 运行:是指将 class文件 交给JVM去运行,此时JVM就会去执行我们编写的程序了。

java HelloWorld的执行过程以及原理

  • 第一步:会先启动JVM(java虚拟机)

  • 第二步:JVM启动之后,JVM会去启动“类加载器classloader” 。类加载器的作用:加载类的。本质上类加载器负责去硬盘上找”对应的字节码文件。默认情况下类加载器(classloader)会从当前路径下找。我们可以设置一个环境变量,叫做:classpath环境变量告诉类加载器classloader去什么地方找字节码文件,在没有配置环境变量classpath的时候,默认从当前路径下加载。
  • 第三步: 类加载器如果在硬盘上找不到对应的字节码文件,会报错,报什么错? 错误: 找不到或无法加载主类  类加载器如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码文件装载到JVM当中,JVM启动“解释器”将字节码解释为“101010000...”这种二进制码,操作系统执行二进制码和硬件交互。

注释

注释是对代码的解释和说明,其目的是让程序员能够更加快速的理解代码。它是编写程序 时,写程序的人给一个语句、程序段等的解释或提示,能提高程序代码的可读性。我认为添加 注释,是为了程序更容易理解与维护,特别是维护,更是对自己代码负责的一种体现。 注释在编译的时候不会生成到 class 字节码文件当中,它只在 java 源文件中保留。 Java中的注释类型:

  • 单行注释
  • 多行注释
  • 文档注释 (java特有)

单行注释,格式如下:

  •  // 两个正斜杠后面的内容被注释

多行注释格式如下:

  • /* 注释文字 */

文档注释(Java特有)格式如下:

 day02_java常识丶入门程序

注意:

  • 对于 javadoc 注释来说,这里的注释会被 JDK bin 目录下的 javadoc.exe 命令解 析并生成帮助文档(生成帮助文档后期做项目的时候大家会接触到的)。
  • 对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
  • 多行注释里面不允许有多行注释嵌套。

下面我们对刚才开发的第一个Java程序进行注释

/**
 * 文档注释
 *
 * @author wrg
 * @version 1.0
 * 这是我的第一个java程序!
 */
public class HelloWorld {
    /*
    多行注释:
    如下的main方法是程序的入口!格式是固定的!作用:程序的入口。
    */
    public static void main(String[] args) {
        //单行注释:如下的语句表示输出到控制台
        System.out.println("hello world !!");
    }
}

注释应该怎么写

  • 编写注释是程序员最基本的素质,养成编写注释的好习惯,要有编写注释的意识。当然, 写注释也是有技巧的,不是所有位置都写,不是把写的代码原版翻译过来,老程序员往往在写 注释的时候,不多不少,能够做到恰到好处,几句话就可以描述清楚程序的核心功能。
  • 通常要在类和接口上写注释,这一部分注释是必须的。在这里,我们需要使用 javadoc 注 释,需要标明:创建者,创建时间,版本,以及该类的作用。在方法中,我们需要对入参,出 参,以及返回值,均要标明。对常量,我们需要使用多行注释,进行标明该常量的用途。在关 键算法上,添加注释并且按照顺序依次标明,写明白该方法为什么这么做。
  • 注释的作用不在于表示代码的含义,而在于表示代码的功能。

Java API的文档

  • API (Application Programming Interface,应用程序编程接口)是 Java 提供 的基本编程接口。
  • Java语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的 API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。

                                                                                   day02_java常识丶入门程序

第一个Java程序小结:

  • 在 java 编程中,一定要注意成对儿的符号要成对儿写,以上 HelloWorld 当中成对 儿的符号包括:小括号(),中括号[],大括号{},双引号""。这些符号在编写的时候建议成对编写。
  • 在以上程序中 HelloWorld 后面的大括号{},这个大括号{}里被称为类体。如下所示:
//在java中任何有效的代码必须写到“类体”当中,最外层必须是一个类的定义。
public class HelloWorld {
        // 类体
}
  • 程序的入口又叫做 main 方法,或者叫做主方法。大家记住固定写法即可。另外在 main 方法后面的大括号{}我们称之为方法体,方法体也是由大括号括起来的。
public class Test { // 声明/定义一个公开的类,起个名字叫Test
    // 类体
    /*
      main方法(程序的入口,SUN公司java语言规定的)
     也就是说:JVM在执行程序的时候,会主动去找这样一个方法。没有这个规格的方法,程序是无法执行的。
     main方法也可以叫做主方法。
     注意:方法必须放到“类体”中,不能放到“类体”外面。
     任何一个程序都要有一个入口,没有入口进不来,无法执行。
     一个类中main方法是独一无二的
    */
    public static void main(String[] args) { //这是一个入口方法。
        // 方法体

    }
}
  • 方法体由一条一条 java 语句构成,每一条 java 语句必须以“;”结束。方法体当中 的代码遵循自上而下的顺序依次逐行执行。
  • 虚拟机运行的是字节码文件,没有字节码文件程序是无法运行的。对修改后的源文件需要重新编译,生成新的class文件后,再进行执行。

public class 和 class 的区别

  • 一个源文件中最多只能有一个public类。其它类的个数不限,如果源文件包含 一个public类,则文件名必须按该类名命名。
  • 虽然一个 java 源文件可以定义多个 class,实际上这是不规范的, 比较规范的写法是一个 java 源文件中只定义一个 class
  • 任何一个 class 中都可以设定程序入口,也就是说任何一个 class 中都可以写 main 方法(主方法),想从哪个入口进去执行,则让类加载器先加载对应的类即可
  • 在源文件中只要有一个class的定义,那么必然会对应生成一个class文件。
  • java 源文件的名字并不是类名,并且也不需要符合标识符的命名规则呢

标识符

标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含 义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句 块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。 在编程语言中,标识符就是程序员自己规定的代表一定含义的单词(java 源程序当中凡是 程序员自己有权利修改的名字),比如类名,属性名,变量名等。如以下代码所示:

public class Demo {
    int age;

    public void setAge(int a) {
        age = a;
    }
}

其中,Demo 是一个类名,表示学生类;age 是一个属性名表示学生的年龄属性,setAge 是一个方法名,a 表示一个变量名。这些都是标识符。

标识符都可以标识什么?在 java 源程序当中,标识符可以用来标识:

  • 类名,例如:Student 学生类、User 用户类、Product 商品类、Order 订单类等。
  • 接口名,例如:Runable 可运行的、Comparable 可比较的等。
  • 变量名,例如:name 名字、age 年龄、birth 生日、length 长度等。
  • 方法名,例如:login 登录、logout 登出、eat 吃、drink 喝等。
  • 常量名,例如:LOGIN_SUCCESS、ACCESS_TOKEN 等。

除了标识以上之外,还可以标识其他的,这里就不再一一列举,大家主要先把以上的了解 一下。技巧:凡是自己可以起名字的地方都叫标识符

标识符命名规则( 如果不遵守如下的规则,编译不通过!需要大家严格遵守)

  • 26个英文字母大小写,0-9 _或 组成
  • 数字不可以开头。
  • 不可以使用关键字和保留字,但能包含关键字和保留字。
  • Java中严格区分大小写,长度无限制。
  • 标识符不能包含空格。

标识符命名规范(如果不遵守如下的规范,编译可以通过!建议大家遵守)

  • 包名:多单词组成时所有字母都小写:xxxyyyzzz
  • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz
  • 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
  • 在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
  • java采用unicode字符集,因此标识符也可以使用汉字声明,但是强烈不建议使用

关键字

Java语言赋予了特殊含义,用做专门用途的字符串(单词)我们称之为关键字

  • 特点:关键字中所有字母都为小写
  • 官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

常见的关键字有哪些呢?请看以下表格:

                                                                                                                                                                                                                                                          day02_java常识丶入门程序

对于关键字不 需要去死记硬背,随着后面内容的学习,每一天的积累,不断的敲代码,慢慢的就掌握了。

上一篇:Day02 - Java 基础②


下一篇:day02