Java教程

课程学习--JavaSE--后端后端(第1期):Java快速入门

本文主要是介绍课程学习--JavaSE--后端后端(第1期):Java快速入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

      • Java
      • 历史
      • 简介
        • 版本
        • 专有名词
      • 语法基础
        • 关键字
        • 标识符
        • 注释
        • 数据类型
          • 分类
          • 基本数据类型
          • 字节的由来
          • ASCII码表
          • 补码的存在意义
          • 浮点数的底层原理
          • 精度丢失
        • 运算符
        • 修饰符
        • 语句
          • 循环
          • 条件
        • 数组
        • 输入

Java

Java是一门编程语言。

历史

前情提要,该部分主要描述Java从诞生到Java8正式发布期间,有关Java及中国软件行业的一些历史细节。

1990年,Sun(Stanford University Network,斯坦福大学校园网)公司启动绿色计划。该计划旨在开发一种编程语言,用于控制电视机机顶盒的运作。于是詹姆斯·高斯林等人开始开发 Java 语言的雏形,并将其命名为 Oak(橡树)。结果市场没啥反响,该语言开始服务家用电器业务,辗转反侧,依然不景气,最终,跟着浪潮进入互联网领域。

1992年,Oak的开发者觉得Oak不像是编程语言的名字,决定改名为Silk(丝绸),结果因为涉及专有名词没有审批通过。由于程序员喜欢喝咖啡,而印尼Java岛的咖啡很不错,于是更名为Java,寓意Java编程语言让写程序如同喝咖啡一样闲适。

1994年,高斯林在硅谷大会上演示JavaEE功能,实现动态网页效果,震惊世界,然后公司架设ftp服务器,供众人下载JDK。

1995年,Sun公司正式发布第一版Java。相继发布到版本1.4后,直接发布版本5,直到今天的版本15。

1997~1998年,中国开始出现网页。

2000年初,中国软件行业的寒冬,马化腾想卖掉QQ给新浪。要价100万。但新浪王志东只愿意出50万,最终没谈成。

2000年末,中国软件行业回暖,腾讯拿到风投,起死回生。

2003年5月10日,马云创办淘宝网。

2004~2005年,中国软件行业迅速发展,很好找工作。

2007年,中国的第一批智能手机诞生。

2009年,Java的桌面开发仍大有所为,往后开始进入互联网开发时代。

2014年3月18日,Java8发布。

简介

Java,一种编程语言。

版本

  • Java SE:Standard Edition(标准版),包含标准的JVM和标准库。
  • Java EE:Enterprise Edition(企业版),在Java SE的基础上加上了大量的API和库,以便开发Web应用、数据库、消息服务等。
  • Java ME:Micro Edition(微机版),针对嵌入式设备的“瘦身版”,注意该版本不是Android,不要混淆。

专有名词

  • JDK:Java Development Kit(Java开发工具包),用于Java开发工具软件,包含JRE、java.exe、javac.exe等。
  • JRE:Java Runtime Environment(Java运行时环境),用于运行Java程序的软件,如用户不开发,只用Java软件,只装JRE即可,包含JVM和Java类库。
  • JVM:Java Virtual Machine(Java虚拟机),虚拟机是指通过虚拟化技术模拟计算机硬件运行的一个软件。主要负责把 Java 程序生成的字节码文件(.class),解释成系统相应的机器指令,让其在各个系统上运行。

三者关系如下图:

┌─ ─ ─ ┌──────────────────────────────────┐
│      │     Compiler, debugger, etc.     │
│      └──────────────────────────────────┘
JDK ┌─ ┌──────────────────────────────────┐
│   │  │                                  │
│  JRE │      JVM + Runtime Library       │
│   │  │                                  │
└─  └─ └──────────────────────────────────┘
       ┌───────┐┌───────┐┌───────┐┌───────┐
       │Windows││ Linux ││ macOS ││others │
       └───────┘└───────┘└───────┘└───────┘

语法基础

关键字

用于定义数据类型的关键字
classinterface
void
boolean
byteshortintlong
floatdouble
char
用于定义数据类型值的关键字
truefalsenull
用于定义流程控制的关键字
ifelseswitch
casedefaultwhile
doforbreak
continuereturn

标识符

在程序中自定义的名称。

注释

// 单行注释

/*
* 多行注释
*/

/**
* Java类简述
* @author Charlie
* @version 1.0
*/

/**
* 方法简述
* @param value
* @return data
*/

数据类型

分类
					    ┌─ 整型:byte、short、int、long
                  ┌─ 数值 <
                  |       └─ 浮点型:float、double
         ┌─ 基本  |
         │  数据 <   字符:char
         │  类型  |
         │        |
数据类型 <         └─ 布尔:boolean
         │
         │        ┌─ 类:class
         │  引用	|
         │  数据 <   接口:interface
         └─ 类型  |
                  └─ 数组:[]
基本数据类型
类型名称关键字占用内存取值范围
字节型byte1 字节-128~127
短整型short2 字节-32768~32767
整型int4 字节-2147483648~2147483647
长整型long8 字节-9223372036854775808L~9223372036854775807L
单精度浮点型float4 字节±3.4E+38F(6~7 个有效位)
双精度浮点型double8 字节±1.8E+308 (15 个有效位)
字符型char2 字节ISO 单一字符集
布尔型boolean1 字节true 或 false
字节的由来

为了用二进制表示文字(英文),设计者做出如下统计:26个英文字母,大小写52个;加上10 个数字达到62 个;考虑到还有特殊字符(如- ! @#$%〈& *{} |等)和不可见的控制字符(如换行、制表),必然超过64 个,所以至少需要7个位用于记载2^7=128个字符。为了避免传输或存储时带来的误差,所以预留了一个奇偶校验位。至此,一个八位的字节诞生。

ASCII码表

ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),是计算机发展初期较成熟的字符集。

这里提及它的原因是该表拥有128个字符,同上文《字节的由来》中提到的“7个位用于记载128个字符”相吻合。

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUT32(space)64@96
1SOH33!65A97a
2STX34"66B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124|
29GS61=93]125}
30RS62>94^126`
31US63?95_127DEL
补码的存在意义

计算机中的二进制数都是以补码的形式存在,这里我们简单说明一下补码的存在意义。

为了用二进制表示有符号的数字,设计者将最高位定义为符号位(0为正,1为负),那么就会出现正零和负零,而聪明的印度设计者将所有的负数统统取反加一,规定为补码。以一个字节为例,这样使原先的-0变成-128,而-1变成-127,以此类推,直到-127变成-1。完美解决正负零问题,并充分利用了每个位。

浮点数的底层原理

浮点数,顾名思义,它的小数点可以浮来浮去,由此联想到科学计数法,通过改变指数,从而改变小数点的位置。

那么,按照科学计数法的要求,以-0.15625为例,就是-1.5625×10-1

而在计算机中是以2进制存储数据的,那么就只能以2为底数,而不是10,如:1111(B)=23+22+21+20+0×2-1。根据IEEE 754规定,浮点数的表示方法为:± F×2E,其中

  • 符号位:0正,1负。
  • 阶码E(指数):可以存放0~255,为了让浮点数的E能够表示正数和负数,在计算时要将E减去127,这样的话阶码E就可以表示-127 ~ 128。
  • 尾数F(有效数字):23个位,以二进制存放有效数字,1.xxx…xxx(23个0或1)。

其内部存储结构为1个符号位,8个指数位(二进制中用阶码表示),23个有效数字位(二进制中用尾数表示)。

Image

-0.15625在float中的表现形式为:-0.125×1.25=-0.001(B)×(1+0.01(B))

2020-04-01-15857540707951-floating-number-example

精度丢失

并不是所有的小数都可以无误差的转换成2进制,但具体丢失细节,本人暂无精力研究透彻。

只需注意存放需要计算的数据时,不要用浮点数,因为其精度丢失容易出现问题。

运算符

  • 算术运算符:+、-、*、/、%、++、–
  • 赋值运算符:+=、-=、*=、/=、%=
  • 关系运算符(比较运算符):==、!=、>、<、>=、<=
  • 位运算符(用补码运算!):&、|、~、^、<<、>>、>>>
  • 逻辑运算符:&&、||、!
  • 三元运算符(条件运算符):?:
  • 其他运算符:instanceof

修饰符

  • 访问控制修饰符:private、public、protected
  • 非访问修饰符:static、final、abstract、synchronized、volatile、transient

语句

循环
  • while
  • do…while
  • for
  • for each
条件
  • if…else
  • if…else if…else(一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。)
  • switch case default

数组

package cn.charliejohn.fundamantal;

public class LearningArray {
    public static void main(String[] args) {
        // 容量需要初始化,并且无法扩容
        int array[] = new int[10];
        array[0] = 1;
        System.out.println(array.length);
    }
}

/** console log output
 * 10
 */

输入

package cn.charliejohn.fundamantal;

import java.util.Scanner;

public class LearningScanner {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] values = scanner.nextLine().split(" ");
        for (String value : values){
            System.out.println(value);
        }
        scanner.close();
    }
}

/** console log output
 * 1 0 1 0
 * 1
 * 0
 * 1
 * 0
 */
这篇关于课程学习--JavaSE--后端后端(第1期):Java快速入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!