目录
1.1 Java的出生地:SUN Microsystems Inc.
一、Java的诞生与发展历史
1.1 Java的出生地:SUN Microsystems Inc.
SUN:Stanford University Network
Oracle(甲骨文)sun公司被Oracle收购了!
Java之父:James Gosling(詹姆斯·高斯林)
1995年发布Java第一版 1.0
Java发展历史中的几个重要版本:
- Java 1.2 从该版本开始,把Java分成J2SE、J2ME、J2EE三部分。
- Java 5 2004年9月30日18:00PM,J2SE 1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0
- Java 6 Java的各种版本更名,以取消其中的数字 "2":J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。
2009年04月20日,甲骨文(Oracle)74亿美元收购Sun。取得java的版权。
1.2 Java技术体系
Java技术分为三个体系:
- Java SE(J2SE)(Platform Standard Edition,java平台标准版)开发桌面应用程序。它是学习Java EE的基础,也是本教学周期学习的内容
- Java EE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)开发面向Internet的应用程序 Java Web
- Java ME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)开发运行于智能设备的程序。
1.3 Java语言的特点
1、面向对象
在Java中,一切都是对象。 Java可以很容易地扩展,因为它基于对象模型。
独立于平台 - 与许多其他编程语言(包括C和C++)不同,在编译Java时,它不会编译到特定于平台的机器中,而是编译为与平台无关的字节代码。
此字节代码通过Web分发,并由虚拟机(JVM)在其运行的任何平台上进行解析。
2、安全
借助Java的安全功能,它可以开发无病毒,无篡改的系统。身份验证技术基于公钥加密。
体系结构中立 - Java编译器生成体系结构中立的目标文件格式,这使得编译的代码可以在许多处理器上执行,并且存在Java运行时系统。
3、可移植
由于体系结构中立且没有与规范相关的实现,因此Java可移植。 Java中的编译器是用ANSI C编写的,具有干净的可移植性边界,它是一个POSIX子集。
4、健壮
可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。
5、多线程性
使用Java的多线程功能,可以编写可以同时执行许多任务的程序。此设计功能允许开发人员构建 可以顺利运行的交互式应用程序。
6、解释性语言
Java字节代码即时转换为本机机器指令,不存储在任何地方。开发过程更加快速和分析,因为链接是一个渐进和轻量级的过程。
7、高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。
8、分布性
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
1.4 Java程序的运行机制
1.4.1 JVM与跨平台
Java程序不是直接在操作系统之上运行,而是运行于JVM(java虚拟机)之上。
针对不同的操作系统开发相应的JVM,Java程序运行于不同的JVM之上,因此Java程序可以在不同修改的情况下运行于不同的操作系统之上,从而实现了所谓的跨平台。
Java源代码(.java文件)经编译器编译成字节码(.class文件)字节码文件是计算机可识别的二进制文件,JVM本质上就是一个负责解释执行Java字节码的程序。
JVM执行Java程序的过程:
- 加载.class文件
- 管理并分配内存
- 执行垃圾收集
1.4.2 JVM、JRE、JDK
JVM:Java虚拟机
JRE:Java运行时环境(JVM+类库) //后面编写代码时在强调类库
JDK:Java开发工具包(JRE+编译工具)
JDK的全称:Java Development kit
提示:运行Java程序只需要安装JRE,开发Java程序则需要安装JDK。
1.5 java开发环境
PS:小伙伴们可以阅读上一篇《JDK安装教程》详细介绍~
1.6 java开发流程
1.6.1 结构化编程与面向对象编程
结构化编程:函数
面向对象编程:类
java类的基本结构:变量 + 方法(函数)
1.6.2 编写和运行Java程序的三个步骤
- 编写源代码,保存到源代码文件中,例如 HelloWorld.java
- 编译源代码,例如javac HelloWorld.java 生成.class文件(字节码)
- 执行字节码,例如java HelloWorld //区分大小写,无扩展名
编译:编译器对源代码的语法进行检查,生成字节码文件
运行:JVM执行变成生成的字节码
1.6.3 源文件与class文件
在Java中源文件的名称必须是文件中主类的名称,扩展名必须为.java。源文件中可以包含多个类,但是最多只能有一个类使用public修饰,使用public修饰的类就是主类。在Java中,源文件还被作为编译单元,即一个源文件就是一个编译单元。
编译器会为源代码中的每个类生成一个.class文件,.class文件的名称是类的名称,扩展名为.class。
1.6.4 main()方法
方法名:只能是main,不能是Main等形式。
修饰符:public static void 三个缺一不可,多一个不行
参数:
1、参数类型为字符串数组 String[]
2、参数名称只要符合Java中标识符命名要求即可
3、参数声明的两种方式:String[] args, 或 String args[]
1.7 常用命令
1.7.1 Dos命令
命 令 | 功 能 |
盘符: | 转换到指定分区 |
cd 目录 | 进入指定的目录 |
Dir | 查看当前路径下的目录和文件 |
cd .. | 进入上一级目录,..表示上一级目录 |
Cls | 清屏 |
Cd desktop | 打开C盘 |
1.7.2 Java命令
javac //后跟文件名称,需要包含扩展名.java
javac -d //指明存放字节码文件(class)文件的位置
java //后跟类名
javadoc //生成注释文档
二、标识符、关键字、数据类型
2.1 注释
注释的三种形式:单行注释、多行注释、文档注释
文档注释(documentation comment)以“/**”开始,以“*/”结束。使用文档注释可以将关于程序的信息嵌入到程序自身中。/* */
javadoc命令可以文档注释中的内容提取出来,将其放入到一个HTML文件中。文档注释方便了程序的文档化。
2.2 分隔符、代码块
每行功能代码以 ; 作为结束符号
空格没有实际意义,可以利用空格无意义,将代码合理缩进,易读
{}包含的代码称之为代码块, 例如类if(){}、方法{}、类{}等等
2.3 标识符
2.3.1 标识符的概念
Java中类、方法和变量的名称,称之为标识符。
2.3.2 标识符的语法要求
(1)以字母、数字、_或$组成
(2)不能以数字开头
(3)不能使用java的关键字和保留字
注意:
1、标识符的长度没有限制
2、Java是大小写敏感的,所有标识符区分大小写 main Main
2.3.2 标识符的命名规范(驼峰)
Java中的标识符通常是由多个英文单词构造,每个单词除了首字母外其他字母小写。
2.3.2.1 大驼峰
第一个单词的首字母大写。以大写字母开头,用于类名、接口名
class Account {…} //类名
class HelloWorld{…} //类名
interface AccountBase {…} //接口名
2.3.2.2 小驼峰
第一个单词的首字母是小写,其他单词的首字母大写。以小写字母或单词开头,用于变量名、方法名
String studentName; //变量名
String getStudentName() {…} //方法名
2.3.2.3 常量命名规范
常量是使用final修饰的存储单元。(最终的)
全部为大写字母表示
final int DAYS_WEEK = 7; //常量必须在声明时赋初值
final double PI = 3.1415926;
2.4 Java的关键字
2.4.1 Java中的全部关键字
目前定义了50个关键字
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 |
Java保留了const和goto关键字,但是没有使用。Java还保留了下面这些关键字:true、false和null。这些关键字是Java定义的数值。
2.4.2 目前已经接触到的关键字
public static void class new
2.5 基本数据类型
2.5.1 数据类型的分类
注意:
基本数据类型也可以分成两大类:数值型、布尔型
通俗的理解编写代码的工作包括:定义变量,保存数据,进行处理(计算)
基本类型与引用类型的区别:
- 基本类型:变量保存实际的数据。
- 引用类型:变量不包含实际的数据,而是包含实际数据在内存中的位置。
例如:
int a = 10;
Student stu= new Student(“张三”, 18, 90);
2.5.2 整型
Java不支持无符号的、只是正值的整数。
2.5.2.1 类型、宽度、范围
名 称 | 宽 度 | 范 围 |
long | 64/8 | -9 223 372 036 854 775 808至9 223 372 036 854 775 807 |
int | 32/4 | -2 147 483 648至2 147 483 647 大约21亿 |
short | 16/2 | -32 768至32 767 65536 |
byte | 8/1 | -128至127 |
int类型的范围 -231 – 231-1
short类型的范围 -215 – 215-1
2.5.2.2 字面值/直接量
(1)整数字面值默认是int类型
(2)将字面值赋给byte或short变量时,如果字面值位于目标类型的范围之内,就不产生错误。
(3)大写或小写的L明确地标识其类型为long
(4)在字面值可以包含下划线,例如1_000_000_000
(5)十进制、八进制(0)、十六进制(0X/0x)、二进制(0B/0b)
2.5.3 浮点型
浮点数,也称为实数(real number),当计算需要小数精度的表达式时使用。
2.5.3.1 类型、宽度、范围
名称 | 宽度(位) | 大致范围 |
double(双精度) | 64/8 | 4.9e-324~1.8e+308 |
float (单精度) | 32/4 | 1.4e-045~3.4e+038 |
浮点数不精确,整数是精确的
2.5.3.2 浮点数字面值
(1)默认为double类型,为了指定float字面值,需要使用后缀F或f
(2)科学计数法。
例如:
6.022E23、314159E-5、2e+100
2.5.4 字符型
2.5.4.1 char类型与字符编码
(1)char是16位,Java在内部使用16位的整数表示字符(Unicode编码),char类型的范围0~65535。//全世界基本的语言符号基本都包含了
(2)char也可以用作整数类型,可以将整型字面值赋给char类型的变量,可以在char类型上执行算术运算。
(3)26个小写字母、26个大写字母、以及10个数字0-9,其编码是连续的。
2.5.4.2 char类型字面值
(1)字符型字面值使用单引号中的字符表示,例如’a’。
(2)转义字符
转义序列 | 描 述 |
\ddd | 八进制字符(ddd) |
\uxxxx | 十六进制Unicode字符(xxxx) |
\’ | 单引号 |
\” | 双引号 |
\\ | 反斜杠 |
\r | 回车符 |
\n | 新行符(也称为换行符) |
\f | 换页符 |
\t | 制表符 |
\b | 回格符 |
字符串类型:
字符串类型是String,String是类,所以是引用类型。字符串字面值是使用双引号包围起来的内容。
2.5.5 布尔型
(1)boolean类型表示逻辑值,它只能是true或false
(2)boolean类型的值与整数0和1没有任何关系
2.6 变量与常量
2.6.1 变量的声明与赋值
说明:变量表示存储单元,变量名就是存储单元的名称,变量初始化之后就可以通过变量名访问存储单元。
1、变量声明 int i; String str; //还没有分配存储空间String是引用数据类型。
2、初始化(赋初值) i=10; str=”abc”; //初始化之后就分配了存储空间
3、声明并赋值 int i = 10; String str=”abc”; //声明的同时进行初始化
注意:变量在使用之前必须先初始化(赋初值)。
2.6.2 常量的声明与赋值
声明常量需要使用final关键字,如,final double PI = 3.1415926。
常量通常在声明时赋值,并且赋值之后其值不能改变
常量标识符通常全部为大写。
2.6.3 实例变量与局部变量
根据变量声明的位置,变量可以分为实例变量和局部变量。
2.6.3.1 实例变量及作用范围
在类的{}内直接定义的变量,称为实例变量或成员变量。
作用范围:整个类中都可以使用
实例变量在创建对象时会自动初始化,并有初始值(默认值)
byte/short/int:0
long:0L
float:0.0f
double:0.0
boolean:false
引用类型:null
2.6.3.2 局部变量及作用范围
在方法中或代码块{}中定义的变量,称之为局部变量。
作用范围:直接包含它的{}内有效
局部变量不会自动初始化,没有默认值,使用之前必须要初始化。
2.7 类型转换
当将一种类型的变量或字面值赋给另外一种类型的变量时,就会发生类型转换。
Java中类型转换分自动类型转换和强制类型转换。
总结:对于数值类型,如果目标类型的范围包含了原类型的范围,则可以自动转换,否则就需要强制转换。
2.7.1 自动类型转换
类型兼容、小类型转换为大类型
byte-->int short--->int int--->long
long--->float float--->double
String--->Object (子类--->父类)
2.7.2 强制类型转换
大类型转换为小类型
int-->byte int--->short long--->int
float--->long double--->float
Object--->String
2.8 面向对象初步(先了解)
2.8.1 了解类和对象
2.8.2 创建对象
三、运算符&表达式&选择结构
3.1 运算符
可以将大部分Java运算符划分为四组:算术运算符、位运算符、关系运算符以及逻辑运算符。
3.1.1 赋值运算符
赋值运算符有一个有趣的特性:它允许创建赋值链。
例如:
int x, y, z;
x = y = z = 100; // set x, y, and z to 100
3.1.2 算术运算符
算术运算符用于数学表达式,其使用方法与在代数中的使用方法相同。
运算符 | 结 果 |
+ | 加法(也是一元加号) |
- | 减法(也是一元负号) |
* | 乘法 |
/ | 除法 |
% | 求模(取余) |
+= | 加并赋值 |
-= | 减并赋值 |
*= | 乘并赋值 |
/= | 除并赋值 |
%= | 求模并赋值 |
++ | 自增 |
-- | 自减 |
注意:
(1)当将除法运算符用于整数类型时,其结果不会包含小数部分。
(2)求模运算符%,返回除法操作的余数。它既可以用于浮点数也可以用于整数。可以用于判断一个整数是否是奇数、偶数、是否是某个数的倍数。
示例:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("c % a = " + (c % a) );
System.out.println("a++ = " + (a++) );
System.out.println("a-- = " + (a--) );
// 查看 d++ 与 ++d 的不同
System.out.println("d++ = " + (d++) );
System.out.println("++d = " + (++d) );
}
}
以上实例编译运行结果如下:
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++ = 10
a-- = 11
d++ = 25
++d = 27
3.1.2.1 算术与赋值复合运算符
int a = 1;
a += 2; //相当于a = a+2;
(1)对于所有的二元算术运算符,都有相应的复合赋值运算符。
(2)复合赋值运算符的效率更高。所以在专业的Java程序中,会经常看到复合赋值运算符。
3.1.2.2 自增与自减
(1)自增运算符将其操作数加1。自减运算符将其操作数减1。
(2)自增与自减分前缀形式与后缀形式。++、--
前缀形式:先加1,后使用
int i = 10;
int a = ++ i; //等同于 i=i+1; a=i; // int a = i; 所以a=11, i= 11
后缀形式:先使用,后加1
int j = 10;
int b = j++; //等同于 int b = j; j=j+1; 所以b=10,j = 11
3.1.2.3 表达式
(1)表达式的概念:由操作数与运算符组成 j++ a+b。最简单的表达式是字面值和单个变量。
(2)表达式的求值:表达式是有值的,需要注意表达式值的类型
(3)表达式中的类型提升规则:
表达式的类型会自动提升为所有操作数的最大类型。
对于操作数全为非long类型整数的表达式,其类型会自动提升为int。
3.1.3 关系运算符
关系运算符也称为比较运算符
运算符 | 结 果 |
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
(1)关系运算的结果为boolean型数值。
(2)关系表达式最常用于if语句和各种循环语句中的控制条件。
3.1.4 布尔逻辑运算符
布尔逻辑运算符,只能操作boolean型操作数。
运算符 | 结 果 |
&& (并且) | 逻辑与(短路形式) |
|| (或) | 逻辑或(短路形式) |
^ | 逻辑异或 |
! | 逻辑一元非 |
& | 逻辑与 |
| | 逻辑或 |
布尔逻辑运算规则:
操作数 | 逻辑运算及结果 | ||||
A | B | A || B | A && B | !A | A ^ B |
False | false | false | false | True | false |
True | false | true | false | False | true |
False | true | true | false | True | true |
True | true | true | true | False | false |
运算规则说明:
对于||,只要有一个操作数为true,则结果为true;
对于&&,只要有一个操作数为false,则结果为false。
对于^,两个操作数不同,则结果为true,否则结果为false。
注意:&&和||(短路形式), &和| (非短路形式)
这两个运算符是所谓短路形式的逻辑运算符。假如单独根据左操作数就能确定表达式的结果,那么就不会计算右操作数的值。
例如:
int a = 5;
int b = 6;
if( (a < b) || (a++ == b) )
//通过第一部分就能确定最终结果的话,第二部分就不会执行
{
System.out.println(a);
} //分别使用 | 和 || 测试效果(输出a的值)
3.1.5 位运算符
位运算符:针对整数的二进制表示形式中的每一位进行运算
3.1.5.1 左移与右移
(1)左移<<:左移动1位,低位补0,相当于乘以2
(2)右移>>:右移1位,高位补符号位,相当于除以2
(3)无符号右移 >>>:高位补0
3.1.5.2 位逻辑运算符
运算符 | 结 果 |
~ | 按位一元取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
运算规则:
操作数 | 位运算及结果 | ||||
A | B | A | B | A & B | A ^ B | ~A |
0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 | 0 |
注意:
&和|,如果操作数为boolean类型,则为布尔逻辑运算符,如果操作数为整数则为位逻辑运算符。通常将&和|作为位运算符。
&&和||只能作为逻辑运算符,两个操作数只能是boolean类型。
3.1.5.3 位运算符与赋值运算符的结合
例如:
a >>= 4; 相当于a = a >> 4;
3.1.6 ?:运算符
条件运算符,三目(三元)运算符
运算规则
expression1 ? expression2 : expression3
expression1可以是任何结果为boolean型数值的表达式。如果expression1为true,则对expression2进行求值;否则对expression3进行求值。“?”运算的结果是对其进行求值的表达式。expression2和expression3都需要返回相同(或兼容)的类型,并且不能为void。
(1)使用?运算符解决除0问题
ratio = denom == 0 ? 0 : num / denom;
//优美地解决了除0问题
(2)使用?运算符获取绝对值
int i=-10;
int k = i < 0 ? -i : i; //k为i的绝对值
3.2 运算符的优先级
最高 | ||||||
++(后缀) | --(后缀) | |||||
++(前缀) | --(前缀) | ~ | ! | +(一元) | -(一元) | (类型匹配) |
* | / | % | ||||
+ | - | |||||
>> | >>> | << | ||||
> | >= | < | <= | instanceof | ||
== | != | |||||
& | ||||||
^ | ||||||
| | ||||||
&& | ||||||
|| | ||||||
?: | ||||||
op= | ||||||
最低 |
大概顺序:算术运算符>移位运算符>关系运算符>逻辑运算符>赋值运算符
圆括号会提升其内部操作数的优先级。为了得到所期望的结果,这通常是必需的。圆括号(不管是否冗余)不会降低程序的性能。所以,为了减少模糊性而添加圆括号,不会对程序造成负面影响。
3.3 流程控制-选择结构
选择结构是通过分支语句实现的,分支语句有两种。
3.3.1 if-else
1、if语句的三种语法形式如下:
第一种形式:
if(expression){
// expression结果必须是boolean
}
第二种形式:
if(expression){
}
else{
}
第三种形式:
//多分支
if(expression){
}
else if(expression){
}
...
else{
}
注意:
else 不能单独使用,要和if配对使用
if else 都可以后面不跟{},但是只能控制下面的一行代码
3.3.2 多分支语句switch
3.3.2.1 switch语句的结构
语法格式如下:
switch (expression) {
case value1:
// statement sequence
break;
case value2:
// statement sequence
break;
...
case valueN :
// statement sequence
break;
default:
// default statement sequence
}
3.3.2.2 switch语句需要注意的问题
(1)switch(expression)中expression的结果必须是byte,short,char,int中的一种。新增:枚举类 型、String(JDK 7以后)
注意:long不行
(2)在同一个switch语句中,两个case常量不允许具有相同的值
(3)每个case语句中需要加上break;语句。如果遗漏了break,则会继续进入到下一个case。
(4)可以省略default语句。
(5)default语句通常放在末尾,可以放在开始,中间或者末尾位置。
3.3.3 if-else与Switch的区别
(1)switch语句只能进行相等性测试,这一点与if语句不同,if语句可以对任何类型的布尔表达式进行求值。即,switch只查看表达式的值是否和某个case常量相匹配。
(2)相对于一系列嵌套的if语句,switch语句通常效率更高。
四、 控制语句
选择语句(分支语句)、迭代语句(循环语句)、跳转语句
4.1 while循环结构
语法格式如下:
while( 布尔表达式 ) {
//循环内容
}
一般在循环体内控制循环的结束条件:让循环条件为false或break。
4.2 do while循环结构
语法格式如下:
do {
//代码语句
}while(布尔表达式);
至少执行一次循环。
示例:
public class Test {
public static void main(String[] args){
int x = 10;
do{
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}while( x < 20 );
}
}
以上实例编译运行结果如下:
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19
4.3 while和do while的区别
do while先执行 后判断 所以它至少执行一次
while先判断条件 后执行 有可能一次也不执行
所有的循环,都可能出现死循环!!!
4.4 for循环结构
4.4.1 语法
语法格式如下:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
每次迭代前会测试布尔表达式。如果获得的结果是 false,就会执行 for 语句后面的代码;每次循环结束,会按照步进的值执行下一次循环。
4.4.2 增强 for 循环
Java5 引入了一种主要用于数组的增强型 for 循环。
语法格式如下:
for(声明语句 : 表达式)
{
//代码句子
}
4.5 跳转语句
break 语句
我们在 switch 中已经见到了,它是用于终止循环的操作,实际上 break 语句在for、while、do···while循环语句中,用于强行退出当前循环,例如:
for(int i = 0;i < 5;i++){
if(i == 1){
break;
}
}
continue 语句
continue 也可以放在循环语句中,它与 break 语句具有相反的效果,它的作用是用于执行下一次循环,而不是退出当前循环,例如:
for(int i = 0;i < 5;i++){
System.out.printl(" i = " + i );
if(i == 1){
System.out.printl("continue ... ");
continue;
}
}
注意:
break:终止直接包含的循环体,结束(本层)循环
continue:终止本次循环,直接执行循环的下一次
break有两个作用:一是结束本层循环,二是跳出switch语句
标签:语句,Java,int,收藏,运算符,详细,3.1,2.5 From: https://blog.csdn.net/qq_41320700/article/details/143373530