ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-05-12 21:31:56  阅读:154  来源: 互联网

标签:Java 字节 -- 浮点数 补码 运算符 JavaSE 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
 */

标签:Java,字节,--,浮点数,补码,运算符,JavaSE,ASCII
来源: https://blog.csdn.net/charliejohn/article/details/116721700

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有