Skip to content

概述与基础

Java起源与发展

img

美国 · James Gosling,Java之父

Java语言于1995.5.23 正式发布

https://www.tiobe.com/tiobe-index/

img

Java5的新功能

  • 枚举类型
  • 静态导入
  • 增强的for循环
  • 自动装箱/自动拆箱
  • 可变参数的方法
  • 泛型
  • 注解

Java7的新功能

  • 二进制整数表示
  • 在数值字面量中使用下划线
  • 用String控制switch语句
  • 菱形运算符
  • 用一个catch捕获多个异常
  • 使用try-with-resources实现自动资源管理

Java8的新功能

  • Lambda表达式
  • 接口的默认方法和静态方法
  • 新的日期/时间API
  • 集合的聚集操作
  • 类型注解

Java语言优点

  • 语法简单
  • 面向对象
  • 平台独立性、可移植性
  • 健壮性、安全性
  • 分布式、高性能
  • 多线程、动态性

Java平台与开发环境

三大版本

Java标准版(Java Standard Edition,Java SE)

Java企业版(Java Enterprise Edition,Java EE)

Java微型版(Java Micro Edition,Java ME)

JVM

Java Virtual Machine,Java虚拟机。运行字节码。

JRE

Java Runtime Enviroment,Java运行时环境。 JVM和Java类库一起构成。

JDK

Java Development Toolkit,Java开发工具包。包括JRE,外加一个编译器和其他工具。

https://docs.oracle.com/javase/8/docs/

img

Java是平台独立的,是跨平台的。传统的编程中,源代码要编译成可执行代码。

Java中,源代码**被编译成**字节码(bytecode),字节码需要在Java虚拟机(JVM)上运行。

Java成为一种跨平台的语言,进而实现“编写一次,到处运行”。

img

JDK下载与安装

https://www.oracle.com/java/technologies/downloads/

img

Java IDE

Eclipse

https://www.eclipse.org/downloads/packages/

img

Intellij IDEA

https://www.jetbrains.com/zh-cn/idea/download/?section=windows

img

Java程序基本结构

开发步骤:

  1. **编辑**源程序
  2. **编译**源程序
  3. **执行**程序

HelloWorld

Java
1
2
3
4
5
public class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello world");
    }
}

代码风格与注释

代码风格

缩进和空白

代码缩进可清晰描述程序中各部分或语句之间的结构关系。

保持一致的缩进会使程序更加清晰、易读、易于调试和维护。

代码块风格

代码块是由大括号围起来的一组语句,如类体、方法体、初始化块等。

ANSI/Allman/BSD风格

Kernighan_Ritchie风格

Java注释

注释是对程序功能的解释或说明,是为阅读和理解程序的功能提供方便。所有注释的内容都被编译器忽略。

单行注释

以双斜杠(//)开头,在该行的末尾结束

多行注释

/*开始,以*/结束的一行或多行文字

文档注释

/**开始,以*/结束的多行

Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 单行注释
/*




*/

/**




*/

简单程序的开发

变量与赋值

变量(variable)用于在程序中临时存放数据。

Java有两大类型的变量:

  1. 基本类型的变量:数值型(整数型和浮点型)、布尔型和字符型。
  2. 引用类型的变量:类、接口、枚举、数组等。

变量在使用前必须①先声明,然后②初始化:

①声明变量:类型名 变量名;

Text Only
1
int number;

②变量的初始化就是给变量赋初值:

Text Only
1
number = 100;

③可以在声明的同时初始化变量:

Text Only
1
int number = 100;

关键字与标识符

标识符

identifier,为**变量**、**方法**和**类**进行命名

命名规则:

  • A-Za-z_$ 开头,后可接A-Za-z_$0-9,长度无限制,例:intTest, Manager_Name, _var, $Var, STATUS
  • 区分大小写
  • 见名知义

命名风格(多单词):

  • PascalCase,每个单词的首字母大写。、**接口**用该方法命名
  • camelCase,第一个单词的首字母小写,其余单词的首字母大写,变量、**方法**用该方法命名

关键字

Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
abstract    continue    for         new         switch
assert      default     goto*       package     synchronized
boolean     do          if          private     this
break       double      implements  protected   throw
byte        else        import      public      throws
case        enum        instanceof  return      transient
catch       extends     int         short       try
char        final       interface   static      void
class       finally     long        strictfp    volatile
const*      float       native      super       while

数据类型

img

字面值

字面值(literals)是某种类型值的表示形式,比如,100是int型字面值。

字面值类型 解释 示例
基本类型字面值 基本类型的值的表示 123,3.456,true,false,'g'
字符串字面值 用双引号定界的字符序列 "Hello World"
null字面值 null

整数类型

数据类型 所占字节数 所占位数 取值范围
byte 1 8 -27~27-1(-128~127)
short 2 16 -215~215-1(-32 768~32 767)
int 4 32 -231~231-1(-2147483648~2147483647)
long 8 64 -263~263-1(-9223372036854775808~9223372036854775807)

整型字面值类型:

  1. 十进制数,
  2. 二进制数,以0b0B开头
  3. 八进制数,以0开头
  4. 十六进制数,以0x0X开头

浮点数类型

数据类型 所占字节数 所占位数 取值范围
float 4 32 约1.4×10-45~3.4×1038
double 8 64 约4.9×10-432~1.7×10308

浮点型字面值表示方法:

  1. 十进制数形式,例:3.14
  2. 科学计数法形式,例:4.5e+3

注意:浮点数的运算是不精确的,不适合做财务金融计算,若需要精确无误的浮点计算,可以使用BigDecimal类。

**下划线**可以用在浮点型数和整型数(包括二进制、八进制、十六进制和十进制)的表示中,以增强代码可读性。

Java
1
2
long a = 1237_519_803L;
double d = 12.37_519_803d;

字符类型

**字符**是程序中可以出现的任何单个符号。

Java使用Unicode为字符编码,Unicode字符集使用**两个字节(16位)**为字符编码,可表示65 536个字符。

字面值用**单引号**将字符括起来,大多数可见的字符都可用这种方式表示,如**'a'、'@'、'我'**等。

有些特殊字符用**转义序列**来表示。用反斜杠(\)表示转义,如'\n'表示换行。

转义字符 说明 转义字符 说明
\' 单引号字符 \b 退格
\" 双引号字符 \r 回车
\ 反斜杠字符 \n 换行
\f 换页 \t 水平制表符
\ddd 3位八进制数表示的字符 \uxxx 4位十六进制数表示的字符

布尔类型

布尔型字面值很简单,只有两个值true和false,分别用来表示逻辑真和逻辑假。

布尔型值使用boolean关键字声明。

字符串类型

Java程序中经常要使用字符串。字符串是字符序列,不属于基本数据类型,是一种引用类型。

字符串是通过String类实现的。可用String声明和创建一个字符串。可以通过双引号定界符创建一个字符串字面值。

运算符

顾名思义,表示运算的符号就是运算符。参与运算的数据称为操作数。

按操作数个数分类

运算符 所需运算符个数 示例
一元运算符 1 ++a
二元运算符 2 a>b
三元运算符 3 a>b? c1:c2;

按功能分类

运算符
算数运算符(9个) 一元运算符(4个) 正负自增自减,+ - ++ --
二元运算符(5个) 加减乘除余,+ - * / %
赋值运算符 简单赋值运算符 赋值,=
复合赋值运算符 +=,-=,...
关系运算符/比较运算符 比较结果为true/false >,>=,<,<=,==,!=
逻辑运算符 与、或、非、异或 & | ! ^
短路与、短路或 && ||
位运算符 位逻辑运算 & | ~(取反) ^
位移位运算 <<、>>、>>>

逻辑运算符表格

A B A&B A|B !A A^B A&&B A||B
false false false false true false false false
false true false true true true false true
true false false true false true false true
true true true true false false true true

短路:在运算时先根据第一个操作数进行判断,如果从第一个操作数就退出结果,那么就不回去计算第二个操作数

短路与:A为true时才计算B

短路或:A为false时才计算B

位运算符表格

A B ~A A&B A|B A^B
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0

运算符优先级

表达式中**出现多个运算符**而又**没有用括号**分隔时,先运算哪个后运算哪个。

运算符结合性

对于同一优先级的运算符,在表达式中与操作数的结合顺序。

左结合:运算符优先结合左边的操作数。例:a+b+c,加号优先结合操作数a

右结合:运算符优先结合右边的操作数。例:a+=b+=c,+=优先结合操作数c

Java
1
2
3
double a = 10;
double b = 1, c = 2, d = 0.5;
System.out.println(a /= b /= c /= 0.5); // 40

表达式

由运算符和操作数组成。

表达式经过运算会产生确定的值。

数据类型转换

背景:不同数据类型直接的混合运算。

要点:计算机中数值的存储方式是补码。

自动类型转换

又称加宽转换,指将具有较少位数的数据类型转换为具有较多位数的数据类型。

img

强制类型转换

与自动类型转换相反,指将具有较多位数的数据类型转换为具有较少位数的数据类型。

Java
1
2
3
4
5
double d = 200.5;
byte b = (byte)d;   // 强制类型转换
System.out.println(b);     // 输出-56
// 00000000 00000000 00000000 110001000
// 11001000

表达式类型提升

Java
1
2
3
4
5
byte aa = 40;
byte bb = 50;
byte cc = a + b;             // 编译错误:不兼容的类型: 从int转换到byte可能会有损失
cc = (byte) (a + b);          // 正确
int ii = a + b;             // 正确

小试牛刀

  1. 使用Java语言打印你的姓名和年龄。
  2. 一辆汽车的平均油耗8L/100km,每升汽油8.47元,开车自家从北京到上海大约需要多少钱?
  3. 编写程序,要求用户从键盘输入一个double型数,输出该数的整数部分和小数部分。
  4. 表达式25/4的结果是多少?如果希望得到浮点数结果,如何重写表达式?
  5. 如何用最有效的方法计算22乘以8等于多少?
  6. 编写程序,从键盘上输入一个double型的华氏温度,然后将其转换为摄氏温度输出。转换公式如下:摄氏度 = (5/9)×(华氏度-32)
  7. 编写程序,从键盘上输入你的体重(单位:公斤)和身高(单位:米),计算你的身体质量指数(Body Mass Index,BMI),该值是衡量一个人是否超重的指标。计算公式为:BMI = 体重 / 身高的平方

123