1 Java的概述
1.1 Java语言发展史
詹姆斯·高斯林(James Gosling)1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第一代工作站NeWS系统,但不受重视。后来转至Sun公司,1990年,与Patrick,Naughton和Mike Sheridan等人合作“绿色计划”,后来发展一套语言叫做“Oak”,后改名为Java。
SUN (Stanford University Network斯坦福大学网络公司)
1995年5月23日,Java语言诞生
1996年1月 JDK1.0
1997年2月 JDK1.1
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
1.2 Java语言平台
1.3 Java语言跨平台原理
平台:指的是操作系统(Windows,Linux,Mac)
跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行
原理:实现跨平台需要依赖Java的虚拟机 JVM (Java Virtual Machine)
1.4 JVM JRE JDK说明
A:什么是JVM?
JVM是java虚拟机(JVM Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有自己的虚拟机,因此java语言可以跨平台
B:什么是JRE?
java运行环境:Java Runtime Environment
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JRE:JVM+类库。
C:什么是JDK?
java开发工具包:Java Development Kit
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
JDK:JRE+JAVA的开发工具。
D:为什么JDK中包含一个JRE?
为什么JDK中包含一个JRE呢?
开发完的程序,需要运行一下看看效果。
E:JDK,JRE,JVM的作用和关系
JDK包含JRE 和开发工具包
JRE 包含 核心类库和JVM
简单而言:使用JDK开发完成的java程序,交给JRE去运行
1.5 常用dos命令
打开控制台:win+r,然后cmd回车
常用命令
dir(directory):列出当前目录下的文件以及文件夹
cd (change directory)改变指定目录(进入指定目录)
进入 cd 目录;cd 多级目录
回退 cd.. ;cd\
cls : (clear screen)清屏
exit : 退出dos命令行
1.6 helloworld案例
1.6.1 编写代码步骤:
首先定义一个类: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"); } }
1.6.2 运行代码步骤:
在命令行模式中,输入javac命令对源代码进行编译,生成字节码文件
javac 源文件名.java
编译完成后,如果没有报错信息,输入java命令对class字节码文件进行解释运行,执行时不需要添加.class扩展名
最后打印的结果: HelloWorld
1.6.3 常见问题有:
A:找不到文件
a:文件扩展名隐藏导致编译失败
b:文件名写错了
B:单词拼写问题
a:class写成Class
b:String写成string
c:System写成system
d:main写成mian
C:括号匹配问题
a:把类体的那对大括号弄掉一个
b:把方法体的那对大括号弄掉一个
c:把输出语句的那对小括号弄掉一个
D:中英文问题
a:提示信息:错误: 非法字符: \????的格式
注意:java编程中需要的基本上都是英文字符
2 环境变量
2.1 环境变量配置
2.2 注释
注释概述:
用于解释说明程序的文字
Java中注释分类:
单行注释 格式: //注释文字
多行注释 格式: /* 注释文字 */
文档注释 格式:/** 注释文字 */
注释的作用 解释说明程序,提高程序的阅读性
2.3 关键字
关键字概述
被Java语言赋予特定含义的单词
关键字特点
组成关键字的字母全部小写
常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观,所以我们不需要去死记硬背,在今后的学习中重要的关键字也会不断的出来。
3 语法格式
3.1 常量
3.1.1 常量概述
在程序执行的过程中,其值不可以发生改变的量
3.1.2 常量分类
字符串常量 用双引号括起来的内容(“HelloWorld”)
整数常量 所有整数(12,-23)
小数常量 所有小数(12.34)
字符常量 用单引号括起来的内容(‘a’,’A’,’0’)
布尔常量 较为特有,只有true和false
空常量 null(数组部分讲解)
/* 常量:在程序执行的过程中,其值不可以发生改变的量 常量分类: A:字符串常量 "HelloWorld" B:整数常量 12,-23 C:小数常量 12.34 D:字符常量 'a','0' E:布尔常量 true,false F:空常量 null(后面讲解) */ public class ChangLiang { public static void main(String[] args) { //字符串常量 System.out.println("HelloWorld"); //整数常量 System.out.println(12); System.out.println(-23); //小数常量 System.out.println(12.34); //字符常量 System.out.println('a'); System.out.println('0'); //布尔常量 System.out.println(true); System.out.println(false); } }
3.2 变量
3.2.1 变量概述
在程序执行的过程中,在某个范围内其值可以发生改变的量
从本质上讲,变量其实是内存中的一小块区域
3.2.2 变量定义格式
数据类型 变量名 = 初始化值;
注意:格式是固定的,记住格式,以不变应万变
3.2.3 变量图解
3.3 数据类型
3.3.1 计算机存储单元
变量是内存中的小容器,用来存储数据。那么计算机内存是怎么存储数据的呢?无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母b表示。而计算机最小的存储单元叫“字节(byte)”,通常用大写字母B表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,大家可能比较熟悉,我们一起来看看:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
3.3.2 数据类型概述和分类
A:为什么有数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
B:Java中数据类型的分类
基本数据类型
引用数据类型
3.4 标识符
3.4.1 标识符概述
A 作用
给包,类,方法,变量等起名字
B 组成规则
由字符,下划线_,美元符$组成
这里的字符采用的是unicode字符集,所以包括英文大小写字母,中文字符,数字字符等。
注意事项:
1.不能以数字开头
2.不能是Java中的关键字
C : 命名原则:见名知意
a包
最好是域名倒过来,要求所有的字母小写
b类或者接口
如果是一个单词首字母大写
如果是多个单词每个单词首字母大写(驼峰标识)
c方法或者变量
如果是一个单词全部小写
如果是多个单词,从第二个单词首字母大写
d常量
如果是一个单词,所有字母大写
如果是多个单词,所有的单词大写,用下划线区分每个单词
/* 标识符:就是给包,类,方法,变量起名字的符号。 组成规则: A:unicode字符 数字字符,英文大小写,汉字(不建议使用汉字) B:下划线_ C:美元符$ 注意事项 A:不能以数字开头 B:不能是java中的关键字 常见命名规则: A:基本要求 见名知意 B:常见的命名 a:包(其实就是文件夹,用于对类进行管理) 全部小写,多级包用.隔开 举例:com,com.accp b:类 一个单词首字母大写 举例:Student,Car 多个单词每个单词的首字母大写 举例:HelloWorld c:方法和变量 一个单词首字母小写 举例:age,show() 多个单词从第二个单词开始每个单词的首字母大写 举例:maxAge,getAge() */ public class BiaoShiFu { public static void main(String[] args) { //定义变量 //数据类型 变量名 = 初始化值; int a = 10; //正确 int b2 = 20; //错误 //int 2b = 30; //不能是java中的关键字 //错误 //int public = 40; } }
3.5 定义变量
3.5.1 基本数据类型变量的定义和使用
变量的定义格式:
数据类型 变量名 = 初始化值;
基本数据类型:
byte,short,int,long,float,double,char,boolean
注意:
整数默认是int类型,定义long类型的数据时,要在数据后面加L。
浮点数默认是double类型,定义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 = 10000; System.out.println(i); //定义long类型的变量 long l = 1000000000000000L; System.out.println(l); //定义float类型的变量 float f = 12.34F; System.out.println(f); //定义double类型的变量 double d = 12.34; System.out.println(d); //定义char类型的变量 char c = 'a'; System.out.println(c); //定义boolean类型的变量 boolean bb = false; System.out.println(bb); } }
3.5.2 变量定义的注意事项
/* 变量定义注意事项: 1:变量未赋值,不能直接使用 2:变量只在它所属的范围内有效 变量属于它所在的那对大括号 3:一行上可以定义多个变量,但是不建议 */ public class VariableDemo2 { public static void main(String[] args) { //定义变量 int a = 10; System.out.println(a); int b; b = 20; //变量在使用前赋值都是可以的 System.out.println(b); { int c = 100; System.out.println(c); } //System.out.println(c); /* int aa,bb,cc; aa = 10; bb = 20; cc = 30; */ /* int aa = 10; int bb = 20; int cc = 30; */ int aa=10,bb=20,cc=30; } }
3.6 数据类型转换
3.6.1 隐式数据类型转换
取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算
/* +:是一个运算符,做加法运算的。 我们在做运算的时候,一般要求参与运算的数据类型必须一致。 类型转换: 隐式转换 强制转换 隐式转换 byte,short,char -- int -- long -- float -- double */ public class TypeCastDemo { public static void main(String[] args) { //直接输出了运算的结果 System.out.println(3 + 4); //定义两个int类型的变量 int a = 3; int b = 4; int c = a + b; System.out.println(c); //定义一个byte类型,定义一个int类型 byte bb = 2; int cc = 5; System.out.println(bb + cc); //我能不能不直接输出,用一个变量接收呢? //用变量接收,这个变量应该有类型 //可能损失精度 //byte dd = bb + cc; int dd = bb + cc; System.out.println(dd); } }
3.6.2 强制类型数据转换
强制转换的格式
b = (byte)(a + b);
强制转换的注意事项
如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
/* 强制转换: 目标类型 变量名 = (目标类型) (被转换的数据); 不建议强制转换,因为会有精度的损失。 */ public class TypeCastDemo2 { public static void main(String[] args) { int a = 3; byte b = 4; int c = a + b; //byte d = a + b; byte d = (byte) (a + b); } }