1.java语言发展史
·詹姆斯·高斯林
·SUN-(斯坦福大学网络公司)
·1995年5月23日,java语言诞生
·1996年1月 JDK1.0
·1997年2月 JDK2.0
·1998年12月 JDK1.2(将java分成J2SE,J2EE,J2ME)
·2000年5月 J2SE1.3
·2002年2月 J2SE1.4
·2004年10月 JDK1.5(改名JavaSE5.0,JavaEE,JavaME)
·2006年12月 JavaSE6.0
·2009年04月20日,甲骨文(oracle)74亿美元收购sun
·2011年7月 JavaSE7.0
·2014年3月JavaSE8.0
2.Java语言跨平台原理
·平台:指的是操作系统(windows,linux,mac)
·跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行
·原理:实现跨平台需要依赖Java的虚拟机JVM(Java Virtual Machine)
3.JRE和JDK
JRE(Java Runtime Environment java运行环境)
包括java虚拟机(JVM)和java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需安装JRE即可
JDK(Java Develpment Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括JRE。所以安装了JDK,就不用在单独安装JREl .其中的开发工具:编译工具(java.exe)运行工具(java.exe)等--->使用JDK开发完成的java程序,交给JRE去运行
4.HelloWorld案例
源文件(编写)---->编辑器---->字节码文件---->解释器------>结果
HelloWorld案例编写
·首先定义一个类
-public class 类名
·在类定义后加上一对大括号
-{}
·在大括号中间添加一个主方(main)法/函数
-public static void main(String [] args){}
·在主方法的大括号中间添加一行输出语句
-system.out.println("HelloWorld");
完整代码
public class HelloWorld{
public static void main(String [] args){
System.out.println("HelloWorld");
}
}
(文件路径:../HelloWorld.java)
HelloWorld 案例编辑
cmd中
进入HelloWorld.java文件的目录
输入:
javac HelloWorld.java
进行编译
输入:
java HelloWorld
进行运行
5.注释
注释:用于解释说明程序的文字
分类:单行 、多行
作用:解释说明程序,提高程序的阅读性
//这是单行注释
/*
这是多行注释
*/
例子:
//这是一个Helloworld的类
public class HelloWorld{
public static void main(String [] args){
/*
这是多行注释
*/
System.out.println("HelloWorld"); //在控制台输出Hellow
}
}
运行结果
6.关键字
被java语言赋予了特定含义的单词
特点:
A:组成关键字的字母全部小写
B:常见的代码编辑器对关键字有特殊的颜色标记
关键字含义
abstract:表明类或者成员方法具有抽象属性
asser:t断言,用来进行程序调试
boolean:基本数据类型之一,声明布尔类型的关键字
break:提前跳出一个块
byte:基本数据类型之一,字节类型
case:用在switch语句之中,表示其中的一个分支
catch:用在异常处理中,用来捕捉异常
char:基本数据类型之一,字符类型
class:声明一个类
const:保留关键字,没有具体含义
continue:回到一个块的开始处
default:默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
do:用在do-while循环结构中
double:基本数据类型之一,双精度浮点数类型
else:用在条件语句中,表明当条件不成立时的分支
enum:枚举
extends:表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
final:用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally:用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float:基本数据类型之一,单精度浮点数类型
for:一种循环结构的引导词
goto:保留关键字,没有具体含义
if:条件语句的引导词
implements:表明一个类实现了给定的接口
import:表明要访问指定的类或包
instanceof:用来测试一个对象是否是指定类型的实例对象
int:基本数据类型之一,整数类型
interface:接口
long:基本数据类型之一,长整数类型
native:用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new:用来创建新实例对象
package:包
private:一种访问控制方式:私用模式
protected:一种访问控制方式:保护模式
public:一种访问控制方式:共用模式
return:从成员方法中返回数据
short:基本数据类型之一,短整数类型
static:表明具有静态属性
strictfp:用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super:表明当前对象的父类型的引用或者父类型的构造方法
switch:分支语句结构的引导词
synchronized:表明一段代码需要同步执行
this:指向当前实例对象的引用
throw:抛出一个异常
throws:声明在当前定义的成员方法中所有需要抛出的异常
transient:声明不用序列化的成员域
try:尝试一个可能抛出异常的程序块
void:声明当前成员方法没有返回值
volatile:表明两个或者多个变量必须同步地发生变化
while:用在循环结构中
7.常量
在程序的执行过程中,其值不可以发生改变的量
常量分类:
A:字符串常量 "HelloWorld"
B:整数常量 12,-23
C:小数常量 12.23
D:字符常量 'a','e'
E:布尔常量 true,false
F:空常量 null
例子:
public class changliang{
public static void main(String [] args){
//字符串常量
System.out.println("HelloWold");
//整数常量
System.out.println(12);
System.out.println(-23);
//小数常量
System.out.println(12.23);
//字符常量
System.out.println('a');
System.out.println('0');
//布尔常量
System.out.println(true);
System.out.println(false);
}
}
运行结果:
8.变量
变量:是内存中的一小块区域,在程序的执行过程中,其值可以在一定范围内发生改变
组成:
A:对区域有限定------>用数据类型来限定
B:必须对区域给一个名称----->变量名
C:区域必须内必须有内容------>初始化值
定义格式:
数据类型 变量名 = 初始化值
9.数据变量
数据类型:Java是一种强类型语言,针对每一种数据都给出明确的数据类型。
数据类型分类:
A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
注意:
A:整数默认是int类型,浮点数默认是double类型
B:定义long类型数据的时候,要加L或者l,建议加L定义float类型的时候要加F或者f,建议加F
例子:
/*
变量的定义格式:
数据类型 变量名 = 初始化值
数据类型:
byte,short,long,float,double,boolean
注意:
定义long类型的变量时,最好直接加L
定义float类型的变量时,最好直接加F
*/
public class VariableDemo{
public static void main(String [] args){
//定义byte类型的变量
byte b =10;
System.out.println(10);
System.out.println(b);
//定义short类型的变量
short s = 100;
System.out.println(s);
//定义int类型的变量
int i = 1000;
System.out.println(i);
//定义long类型的变量
long l = 10000000000000L;
System.out.println(l);
//定义float类型的变量
float f = 12.34F;
System.out.println(f);
//定义char类型的变量
char c = 'a';
System.out.println(c);
//定义boolean类型的变量
boolean bb = true;
System.out.println(bb);
}
}
运行结果:
例子2:
/*
变量定义的注意事项:
A:变量未赋值,不能直接使用
B:变量只在它所属的范围内有效
变量属于它所在的那块大括
C:一行上可以定义多个变量,但不建议
*/
public class VariableDemo2{
public static void main(String [] args){
//定义一个变量
int a = 10;
System.out.println(a);
int b ;
//System.out.println(b); //----这里未赋值前使用变量,是错误的
b = 20;
System.out.println(b);
{
//代码块
int c = 30;
System.out.println(c);
}
//System.out.println(c); //-----这里的c是不存在的,因为变量只在它所属的范围内有效
/* int aa,bb;
aa = 10;
bb = 20;
System.out.println(aa);
System.out.println(bb);
//但是不建议这么写
*/
//这么写比上面的写法清晰,和规范
int aa = 10;
int bb = 20;
System.out.println(aa);
System.out.println(bb);
}
}
运行结果:
10.标识符
标识符:就是用来给包,类,方法,变量起名字的符号
组成规则:
A:unicode字符:
数字字符,英文大小写字母,汉字(不建议使用)
B:下划线_
C:美元符号$
注意事项:
A:不能以数字开头
B:不用以java中的关键字命名
常见命名规则:
A:基本要求----->见名知意
B:常见的命名
a,包(其实是文件夹,用于对类进行管理)
全部小写,多级包.隔开
b,类
一个单词首字母大写 eg:Student,Car
多个单词每个单词的首字符大写 eg:HelloWorld
c,方法和变量
一个单词首字母小写 eg:age,show()
多个单词组成从第二个单词开始每个首字母大写 eg:maxAge,getAge()
11.类型转换
当数据类型不一样时,将会发生类型转换
自动类型转换(隐式)
1.特点:代码不需要进行特殊处理,自动转换
2.规则:数据范围从下到大
例子:
public class DataTypeDemo{
public static void main(String[] args){
System.out.println(1024);//这就是一个整数,默认就是int类型
System.out.println(3.14);//这就是一个浮点数,默认就是double类型
//左边是long类型,右边是默认的int类型,左右不一样
//一个等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储
//这一行代码发生了自动类型转换
long num1 = 100;
System.out.println(num1);//100
//左侧是double类型,右侧是float类型,左右不一样
//float ---->double,符合从小到大的规则
//也发生了自动类型转换
double num2 = 2.5F;
System.out.println(num2);//2.5
//左侧是float类型,右侧是long类型,左右不一样
//long--->float ,范围是float更大一些,符合从小到大的规则
//也发生了自动类型转换
float num3 = 30L;
System.out.println(num3);
}
}
运行结果:
强制类型转换(显式)
1.特点:代码需要进行特殊的格式处理,不能自动完成
2.格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的类型
注意事项:
1.强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出
2.byte/short/char这三种类型都可以发生数学运算,例如加法‘+’
3.byte/short/char这三种类型在运算的时候,都会被首先提升成int类型,再进行运算
4.boolean类型不能发生数据类型转换
例子:
public class DataTypeDemo2{
public static void main(String[] args){
//左边是int类型,右边是long类型,不一样
//long-->int,不是从小到大
//不能发生强制类型转换
//格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的类型
int num = (int)100L;
System.out.println(num);
//long强制转换成int类型
int num2 = (int)6000000000L;
System.out.println(num2);//1705032704---->数据溢出
//double--->int ,强制类型转换
int num3 = (int)3.99;
System.out.println(num3);//3----->精度损失,这不是四舍五入,而是所有的小数位被舍
//弃
char zifu1 = 'A';//这是一个字符变量,里面是大写字母A
System.out.println(zifu1+1);//66,也就是大写字母A也被当做65进行运算
//计算机的底层会用一个数字(二进制)来表示字符A,也就是65
//一旦char类型进行数学运算,那么字符会按照一定的规则翻译成一个数字
byte num4 = 40;//注意:右侧的数值大小不能超过右侧的类型范围
byte num5 = 50;
//byte + byte ---->int + int ---> int
int result1 = num4+num5;
System.out.println(result1);
short num6 = 60;
//byte + short ---->int + int ---> int
//int 强制转换成short,注意必须逻辑上真实大小没有超过short范围
short result2 = (short)(num4 + num6);
System.out.println(result2);
}
}
运行结果:
12.ASCII码表
数字和字符对照关系表(编码表):
ASCII码表:American Standard code for Information Interchage -美国信息交换标准代码表
Unincode码表:也是数字和符号的对照关系,开通0-127部分和ASCII码表一样,但从128开始包 含更多字符
48 - '0'
65 - 'A'
97 - 'a'
例子:
public class DataCharDemo{
public static void main(String[] args){
char zifu1= '1';
System.out.println(zifu1+0);//49
char zifu2 = 'A';//其实底层保存的是65数字
char zifu3 = 'c';
//左侧是int类型,右边是char类型
//char -- > int ,符合从小到大
//发生自动类型转换
int num = zifu3;
System.out.println(num);
char zifu4 = '中';//正确写法
System.out.println(zifu4+0);//20013
}
}
运行结果: