一、Java历史
- 诞生于SUN公司(Stanford University Network)。
- 大概于1996年发布正式的第一版。
- Java之父,詹姆斯·高斯林(James Gosling)。
- 2009年,SUN公司被Oracle(甲骨文)公司收购。
- 目前学习的版本是Java8,最新版本是Java12。
- Java分为三大方向:Java SE,Java EE,Java ME。
- Java9尝试把Java SE,Java EE,Java ME合起来,用模块的方式进行区分。
二、Java语言的主要特征
1. Java语言是强制面向对象的,提供类、接口和继承等。
支持类之间的单继承,接口之间的多继承,支持类与接口之间的实现机制,(关键字implements)。
2. Java语言是分布式的,支持Internet应用的开发。
在基础的Java应用编程接口中有一个网络应用编程接口(Java net),提供了用于网络应用编程的类库,包括URL,Socket等,RMI远程方法激活机制也是开发分布式应用的重要手段。
3. Java语言是健壮的,强类型机制,异常处理垃圾的自动收集等。
丢弃指针,防止指针指向错误的区域,使Java语言更安全。
4. Java语言是安全的,通常用在网络环境中。
Java提供了安全机制,以防恶意代码的攻击,如安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类,字节代码检查。
5. Java语言是体系结构中立的,跨平台的。
Java程序.java在Java平台上被编译为体系结构中立的字节码格式.class,可以在任何实现.class文件的平台上运行,任何语言可以编译成.class也可在平台上运行。
6. Java语言是解释型的。
Java程序在Java平台上被编译为字节码格式,可以在实现这个Java平台的任何系统的解释器中运行。
7. Java是性能略高的。
相比于其他解释型的高级脚本语言。
8. Java语言是原生支持多线程的。
线程是一种特殊的对象,必须由Thread类或其子类来创建。
三、Java语言的运行机制
1. 跨平台:
通过Java语言编写的应用程序在不同的系统平台上都可以运行(一次编写,处处运行)。
2. 原理:
Java程序不是直接运行在操作系统上的,而是运行在JVM(Java虚拟机)中的,而不同的操作系统平台可以安装不同的JVM。
3. JVM:
是一个虚拟的计算机,具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器,对于不同的平台有不同的虚拟机,屏蔽了底层运行平台的差别。
4. Java程序开发和运行的步骤:
① 编写Java代码保存的源代码文件.Java。
② 编译Java代码为字节码文件.class,JVM只认识字节码,编译工具Javac.exe。
③ 运行字节码文件,把字节码再转成CPU能执行的机器指令。
5. 使用编译工具命令:
javac 源文件名.java
6. 使用运行工具命令:
java 字节码文件名/类名
7. 垃圾回收机制GC:
在C/C++等语言中,由程序员负责回收无用的内存,Java提供一种系统级线程跟踪存储空间的分配情况,并在JVM空闲时检查并释放那些可被释放的存储空间。
垃圾回收自动进行,有自己的一套算法,程序员无法精确控制和干预。
四、Java开发环境搭建
1. JDK(Java Developer’s Kit)Java开发工具包:
JDK=JRE+开发工具集,包括编译工具javac.exe,打包工具jar.exe(安装JDK就不用再单独安装JRE了)。
2. JRE(Java Runtime Environment)Java运行环境:
JRE=JVM+核心类库(提前写好的代码),包括Java虚拟机和Java程序所需的核心类库等(如果只是想要运行一个开发好的Java程序,计算机中只需要安装JRE即可)。
3. JVM(Java Virtual Machine)Java虚拟机:
运行Java程序需要用到。
4. 查看JDK是否安装成功命令:
cd xxxxx/jdk/bin
javac
五、环境变量的配置和JDK版本查看
1. 配置环境变量:
为了在任意目录下可使用javac命令,Windows等操作系统默认是在当前路径下和path环境变量指定的目录下查找命令等工具的,如果想在指定的目录下去查找这个命令,就要在path这个环境变量中把目录添加上去。
Win7:path=jdk安装的bin路径;之前的环境变量的值;
Win10:一行一个环境变量,表格形式)。
2. 用户环境变量和系统环境变量的区别:
用户环境变量只针对当前用户(操作系统登录的用户),系统环境变量是针对所有用户的。
3. JDK版本查看命令:
java –version
六、Java程序注释,代码结构
1. 注释的三种形式:
单行注释:
//xxx
多行注释:
/*
xxx
xxx
*/
文档注释:
/**
xxx
*/
2. Java代码结构:
类{
方法/函数{
语句;
}
}
class HelloWorld{
//Java程序主方法,运行入口
public static void main(String[] args){
//输出语句,""中的内容表示需要原样输出的内容
System.out.println("Hello Java");
}
}
七、Java程序问题
1. 编码问题:
最早硬件机器语言(01)→引入汇编助记符等→ASCII码(最早只能表示128个字符,流传到其他国家扩展了128个,不具有通用性)→多字节编码(中国GB2312,后来GBK,台湾等地区Big5)→引入万国码Unicode编码表(只说了字符用什么数字表示,但数字范围跨服很大,在网络传输中出现问题)→解决传输问题UTF-8(规定了几个字节是一个字符,0开头一个字节是一个字符,11开头两个字节是一个字符,111开头三个字节是一个字符,1111开头四个字节是一个字符)。
2. 不同编码方式对同一组数据解析出来的字符是不同的解决方法:
修改当前源文件字节编码,转为与当前操作系统一致的编码。
3. 大小写问题:
源文件名不区分大小写,但还是要注意;
字节码文件名(类名)严格区分大小写;
代码中大小写严格区分。
4. 格式缩进问题:
{}问题,{在类名后面,}另起一行(Java)或者{}均另起一行©;
缩进问题:缩进Tab,回缩shift+Tab。
5. 源文件名和类名问题:
源文件名和类名一致,javac 源文件名.java,java 源文件名;
源文件名与类名不一致,javac 源文件名.java,java 类名(前提是类里面含有主方法,没有主方法的类不能运行);
如果class是公共的(public class),则要求源文件名必须和public class后的类名一致,一个源文件只能有一个public类;
一个源文件可以编写多个类,编译后会产生多个字节码文件,字节码文件名就是类名;
平时开发中一个.java文件只写一个类,除非有内部类(一个类在另一个类里面),而且源文件名与类名一致,后期好维护。
6. 在cmd命令行,如何重新运行之前执行过的命令:
↑查找之前的命令;
↓查找之后的命令。
八、Java标识符
1. 标识符:
在Java中对类、变量、方法等要素进行命名的字符序列称为辨识度,程序员自己命名。
2. 标识符命名规则:必须遵守,不然编译报错。
① Java标识符必须用26个英文字母的大小写、数字0-9、美元符号$、下划线_;
② 不能使用关键字(包含保留字)和特殊值,如class、public、static等50个关键字+3个特殊值;
③ 不能使用空格;
④ 不能以数字开头;严格区分大小写。
3. 标识符命名规范:建议遵守。
① 见名之意;类名、接口名等,要求每一个单词的首字母大写,HelloWorld;
② 变量名、方法名,从第二个单词开始首字母大写,其余首字母小写,helloWorld,main,println;
③ 包名,所有单词都小写,单词之间用.分割,java.lang;
④ 常量名(自己定义的),所有单词都大写,每个单词之间用_分割,MAX_VALUE,PI。
九、Java变量
1. 变量(variable)的作用:
存储值(数据),变量在Java中本质上代表一块内存区域,变量中的数据存储在JVM中。
2. 变量的三要素:
① 数据类型;
② 变量名(在程序中通过变量名访问内存及其数据);
③ 值(变量中具体的值,可以改变)。
3. 变量使用原则:
① 先声明,后使用,包括类、方法等;
② 变量必须先初始化(第一次赋值),再访问它的值(打印、计算、比较等操作);
③ 变量的声明在同一作用域(从变量声明处开始,到其所属的{}结束;
④ 同一作用域中只能声明一次,但可以多次赋值。
4. 变量的声明:
格式:数据类型 变量名=变量值(第一次赋值);
赋值:变量名=变量值(第二次赋值)。
5. 变量显示:
" " 中的内容原样显示;
变量在显示的时候,显示的不是变量名,而是变量中存的值,所以不用加 " " ;
" xxx " +变量名,把 " " 中的内容和变量值拼接显示。
十、Java数据类型
1. 分类:
基本数据类型;
引用数据类型(String)。
2. 基本数据类型(8种):
① 整型
byte:字节类型,1个字节,范围-128~127,2∧7;
short:短整型,2个字节,范围-32768~32767,2∧15;
int:整型,4个字节,范围-2147483648~2147483647,2∧31;
long:常整型,8个字节,范围-9223372036854774808~9223372036854774807,2∧63。
long 变量名=13059006613L/l
//建议使用大写L
② 浮点型
double:8个字节,大概精度范围是用科学计数法表示小数点后15~16位,
1.797693e+308~4.9000000e–324,10∧308/-324;
float:单精度浮点型,4个字节,大概精度范围是用科学计数法表示小数点后6~7位,
3.402823e+38~1.401298e-45,10∧38/-45,同长整型long,变量值后要加F/f。
③ 布尔型
boolean:值只有true、false,用于条件判断。
④ 字符类型:
char:单字符类型,2个字节,可以表示汉字,在Java中是用Unicode编码表示,每一个字符都有唯一一个Unicode编码值,兼容ASCII码等。
3. 字符串、字符表示
" xxx " 字符串String的常量必须用" " ,’ x ’ 单字符char的常量必须用 ’ ’ 。
4. 1Bit(字节)=8Byte
B、KB、MB、GB以1024进位,硬件厂商存储单位用1000进位,带宽100Mb中b=bit。
5. 表示类型的字符常量:
① ’ 一个字符 ’ :如 ’ A ', ’ 女 ’ ;
② ’ 转义字符 ’ :
'\n' //换行
'\t' //制表位Tab键
'\\' //斜杠
'\"' //双引号
'\'' //单引号
'\b' //删除键Backspace
'\r' //回车键Enter
'\u' //字符的Unicode编码值饿十六进制形式
'\u5c1a' //十六进制对应十进制23578。