- Java语言背景介绍
- Java开发环境搭建 (必掌握[配置])
- HelloWorld案例 (必掌握[练习]) ★★★★★
- Java基本语法(变量的定义)★★★★★
- 注释,关键字,常量,数据类型,变量,标识符
- 类型转换
- Java语言是由谁, 在哪家公司开发的?
答案:詹姆斯·高斯林在SUN公司开发出来的,后来被Oracle公司收购!
- Java语言的发展史?【不要刻意去记忆】
1995年Sun公司发布Java1.0版本
1997年发布Java 1.1版本
1998年发布Java 1.2版本
2000年发布Java 1.3版本
2002年发布Java 1.4版本
2004年发布Java 5.0版本 -> Java语言发展的里程碑
2006年发布Java 6.0版本
2009年Oracle甲骨文公司收购Sun公司,并于2011发布Java 7.0版本
2014年发布Java 8.0版本 -> 市面上常用的一个版本, 课程中所使用的版本
2017年发布Java 9.0版本
2018年3月发布Java 10版本
2018年9月发布Java 11版本
2019年3月发布Java 12版本
总结:
Java语言与1995年所研发出来的, Java在5版本出现了很多突破性的技术点,市面上使用最多的就是8版本。
以后我们在开发中使用软件都不会是最新版本,而是次级稳定版本!【公司中使用8.0最多的!】
- Java语言的平台划分?
1. JavaSE : Java语言的基础语法,基础班学习的就是JavaSE
学习完JavaSe可以实现简单的桌面应用开发 (坦克大战,飞机小游戏)
2. JavaME : 是用于嵌入式移动设备的程序开发,例如在早期Nokia手机上的一些应用。
JavaME目前已经退出历时舞台了,市面上不再招聘该类程序员。【被Android和iOS所取代了。】
3. JavaEE : 是用于Web网站方向的技术开发 【我们学习的最终方向】
Web网站 :
网页 : 一套没有逻辑,专门用于展示数据的界面而已。
网站 : 基于前台的网页 + 后台的逻辑配合在一起的, 才叫网站
- 什么是跨平台?
平台 : 操作系统
window系统
Mac OS 系统
Linux系统
- 跨平台的原理是?
通过虚拟机实现的!我们编写的同一份Java代码,只需要在不同操作系统中安装不同版本的虚拟机就可以了【虚拟机其实就是一款软件】
- JVM本身可以跨平台吗?
总结: 不跨平台的!有不同版本的!(不同版本的JVM对应着不同的操作系统) 【我们应该使用Windows版本的虚拟机JVM】
- 什么是JDK?
- 什么是JRE?
- 什么是JVM?
- 三者之间的关系是什么?
总结 :
1.jvm?
它是Java实现跨平台的基石,通过不同版本的JVM,能够让同一个java程序在不同的平台(操作系统)运行起来!
2.jre?
作用:java程序运行环境!【可以让一个已经存在的java程序运行起来】
jre包含了jvm和核心类库
类:java程序运行的最小单位
类库:里面包含了很多的类【这些类库都是jre自带的】
3.jdk?
作用:java程序开发工具包【要想进行java开发,就必须有jdk】
jdk包含了jre已经开发工具
开发工具:比如javac.exe java.exe
4.关系: jdk>jre>jvm
结论 :
以后,我们进行java开发,只需要有jdk就可以了!【如果希望程序在windows系统中运行,那么我们就需要使用windows版本的jdk,想要让程序在Linux系统中使用,那么只需要使用Linux版本的jdk】
A:JDK的下载
a:官网 http://www.oracle.com 【必须处于联网状态】
B:JDK的安装
建议★★:安装目录不要有中文和空格(特殊符号),以后安装所有的软件,目录结构请统一
目前,我的电脑使用你的是jdk8!
在基础班,我们使用11版本没有问题,到就业班的某个时间点,会切换到1.8。
a:傻瓜式安装
* 双击安装程序,然后一路next即可(但是不建议)【目录不要放在系统盘】
C:验证安装是否成功
目录名称 说明
bin 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录
------------------------------------------------------------------------
conf 该路径下存放了JDK的相关配置文件
include 该路径下存放了一些平台特定的头文件
jmods 该路径下存放了JDK的各种模块
legal 该路径下存放了JDK各模块的授权文档
lib 该路径下存放了JDK工具的一些补充JAR包
- 为什么要学习命令提示符?
- 如何打开命令提示符(DOS窗口)?
总结:
1. 为了调用jdk提供给我们的工具
2. 为了后期我们学习Linux系统做的一个准备
如何打开?
按下win+r(同时按下), 输入cmd,回车
- 盘符切换 盘符名: 最后按下回车
* 进入文件夹 cd 文件夹名称- 回退上一级 cd…
* 退出到根路径 cd\- 查看当前目录下的文件和文件夹 dir
* 清屏 cls- 退出 exit
1. calc -> 打开计算器
2. notepad -> 打开记事本 ★★★★★
- 为什么要配置环境变量?
- 如何配置?
总结:
1.在没有配置环境变量的时候,要想使用开发者工具,必须进入bin目录!为了方便使用这些命令,而不用每次都进入bin目录,我们可以通过配置环境变量来完成!
2.
右键我的电脑---->>> 属性----->>>高级系统设置----->>>环境变量----->>>在系统变量中点击新建---->>变量名称必须是 JAVA_HOME ,变量值是jdk安装的目录(不包含bin目录)---->>> 选中系统变量中的path,进行编辑---->>>将jdk环境变量设置进去(最左侧输入: %JAVA_HOME%\bin;)
注意:win7中,修改path中的值,请先将里面的数据备份一下
- 问题:
环境变量失效问题
Win10, 重启电脑之后, 可能就会失效
解决方案: 找到环境变量的path, 进入编辑文本, 不需要修改任何内容, 直接确定即可
- Java程序开发运行的基本步骤是什么?
总结:
1. 编写一个java源代码程序(java文件) 【普通人,也就是程序员能够看懂的!】
2. 编译java源代码成为字节码文件 【字节码文件.class 计算机可以读懂】
3. 让机器运行这个字节码文件
以后我们编写的代码都在内存中运行的!(JVM中)
- HelloWorld的基本书写 (暂时记忆,里面的内容必须与下面的完全一致)
总结:
public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
- 编写前的注意事项
检查文件后缀名是否是隐藏的, 避免创建出来的不是.java文件
- 10分钟时间练习
* 使用java程序,在屏幕上输出自己的姓名。
- 总结
1. 中英文符号问题 (;写成了;)
2. 单词拼写错误 (main写成了mian)
3. 字母大小写没有区分 (System写了system)
4. 忘记书写了分号
5. 执行编译命令,写成了 javac xxxx(忘记了.java)
6. 执行运行命令, 写成了 java xxxx.java (多了.java)
7. 类名(Demo)与文件名(HelloWorld)不一致!
- 请找出下方HelloWorld案例的错误, 并修改
public class Demo {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
问题:类名(Demo)与文件名(HelloWorld)不一致!
- Notepad软件安装后的设置
设置 -> 首选项
A. 新建 -> 默认语言Java -> 文件编码ANSI
B. 自动完成
- 5分钟时间安装并配置
- 什么是注释?
- 注释的分类?
- HelloWorld说明
总结:
1. 注释是给程序员(给人看的)看的,方便对代码的理解!【机器会忽略注释的内容】
2. 注释分为 单行注释、多行注释、文档注释!
单行注释:
写法: // 注释的具体内容
多行注释:
写法: /* 注释的具体内容 */
文档注释:
写法: /** 注释的具体内容 */
★★★★★ 以后只要修改了java源代码,都需要重新编译,再去执行!
/**
这是一个文档注释:一般都在类上面使用!
下面书写了一个HelloWorld类(打印输出一句话:王云飞)
定义类的格式: public class 类名{}
*/
public class HelloWorld{
/*
这是一个多行注释,定义了一个主方法(方法:我们现实生活中所谓的功能)
主方法,它比较特殊,是整个java程序的入口,JVM它会从main方法开始执行!
*/
public static void main(String[] args){
// 这是一个单行注释,就是在控制台打印一句话!
System.out.println("王云飞");
}
}
注意:
注释允许嵌套使用, 但仅限于单行注释
注释的内容是不会参与程序的编译和执行的.
- 什么是关键字?
- 关键字有哪些特征?
总结:
1. 在java中被赋予了特殊含义的单词 (以后我们在定义一些内容<比如变量>就不能使用这些关键字)
2. 【如何识别关键字】
在高级记事本中,它的颜色比较特殊的!
字母都是小写的!
在java中关键字非常多!是不是每一个都需要记忆?
每天我们都会接触少量的关键字(经过大量的练习,当天记忆一下,随着时间的推移,都是没有问题的)
问题: main是关键字吗?
答 : 不是关键字,但是可以理解为比关键字更为关键的一个单词,因为JVM虚拟机在执行的时候, 只会查找main这个方法的名字.
- 什么是常量?
- 常量的分类有哪些?
总结:
1. 在程序运行中,固定不变的量。
2. 常量的分类:
字符串常量: 只要是使用双引号包起来的内容就是字符串常量,比如 "abc" "王云飞"
字符常量:只要使用单引号包起来的内容就是字符常量,比如 'a' '100'
整数常量:就是书写的整数数字(不能有小数点),比如 10,-25
小数常量:数字,带有小数点,比如 10.25 -3.14
布尔常量:就只有2个取值,分别代表真(true)、假(false)
空常量:只有一个取值 null 【不能直接打印】
- 10分钟时间练习
请在屏幕上输出一个学生的信息,包含姓名、性别、年龄、身高、地址。
public class Demo2{
/*
需求: 姓名、性别、年龄、身高、地址。
*/
public static void main(String[] args){
System.out.println("张三");
System.out.println('男');
System.out.println(23);
System.out.println(180.1);
System.out.println("北京市昌平区金燕龙办公楼一层");
}
}
- 为什么要有数据类型?
- Java的基本数据类型一共分为哪些?
总结:
1. 在计算机中存储数据都是在内存中,占据一定的空间!占据空间需要有单位!在计算中,最小的存储单位是位(bit)【在计算机中存储的任何数据都是0 1(二进制数据,只有0和1)】【十进制10用二进制1010表示】,其中里面的0或者1都是一个bit,每8个位(bit)就构成了1个字节(byte) =====>>> 我们为了方便统计数据,都会使用字节(byte)来作为最小单位!
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
有了数据类型能够存储不同长度的数据,达到节省空间的效果!
2. java数据类型划分
基本数据类型(★★★★★):四类八种!
整数类型: byte short int(默认) long
byte的最大取值是127!
浮点数类型:float double(默认)
字符类型:char
布尔类型:boolean
引用数据类型:后续课程学习!【数组、接口、类等等……】
注意:数字的类型取值范围大小依次是 byte short int long float double
注意:
数值的取值范围跟字节占比大小不一定相关
数据类型从小到大
//TODO:
byte - short - int - long - float - double
问题: 为什么float占4个字节, 取值范围却要比8个字节的long还要大呢??
System.out.println(Float.MAX_VALUE - Long.MAX_VALUE);
原因: 底层的二进制存储结构不同 (了解)
重点记 :
所有整数默认都是(int)类型 System.out.println(10);
所有小数默认都是(double)类型 System.out.println(10.0);
- 什么是变量?
- 变量的格式是?
- 变量的作用?
总结:
1. 程序在运行中,数值可以发生改变的量!
2. 变量的组成部分(数据类型 变量名称 数值)
格式: 数据类型 变量名称 = 数值 ; 例如: double num = 3.14;
3. 提高代码的重用性(不要修改很多地方,只需要修改变量的值就可以了)
变量的操作:
定义变量: int num = 10; 【定义num变量的类型为int,就只能给int类型的数据!】
修改变量的值: num = 100;
获取变量的值:直接操作变量名称即可 打印: System.out.println(num);
其它数据类型:
char c = 'a'; // 定义一个字符类型的变量,名称为c,值为'a'
boolean b = true; // 定义了一个布尔类型的变量,名称为b,值为true
总结: 今后定义整数类型变量的时候, 先用int, 如果int装不下了, 用long, 定义long类型变量的时候需要加入L的标识.
今后定义小数类型变量的时候, 先用double, 非要用float的话, 需要加入F的标识.
3. 就是用来记录不断发生改变的常量.
- 变量的扩展讲解:
1. 变量可以先定义, 再赋值.(也可以在定义的时候直接赋值) 【必须掌握】
int a;
a = 100;
说明: 如果这个变量定义在方法的内部,它就是一个局部变量,一定要先赋值(初始化),然后再使用,否则就会报错!
2. 一条语句可以定义n个变量.【能够看懂就行】
例如:int x=10,y=20,z=30;
还可以,先定义,后赋值!
int x,y,z;
x=10;
y=20;
z=40;
说明:以后建议大家定义变量的时候,使用上面的方式(每个变量的定义单独写,阅读性强!)
- 10分钟练习: 请分别定义byte、short、int、double、char以及boolean这6种类型的变量,并将值输出到屏幕上。
1. 变量定义的注意事项:
变量名不允许重复定义.【在同一作用域中:目前就是在main方法中】
int a = 10;
int a = 20; // 这句话就会出现编译错误.
访问变量,不能超出变量的作用域
{
int m = 50; // 这个变量m只在当前{}中有效!
}
System.out.println(m); // 编译报错!已经超出了变量m的范围
2. 变量使用的注意事项:
如果定义了一个long类型的变量,赋值超过了int类型的最大值,需要在后面加上L
3. 变量使用的注意事项:
变量使用之前(必须是一个局部<方法内部的变量>), 必须完成赋值.
比如定义的变量在类中,方法的外部(全局变量),可以不赋值,直接使用【默认值】
4. 变量的使用注意事项:
如果定义一个float类型的变量,需要在小数的后面加上一个F
float num = 3.14; // 错误,小数默认是double类型,将一个double赋值给float类型的变量,报错!
- 细节:
1. 定义long类型的变量, 需要加入L的标识
2. 定义float类型的变量, 需要加入F的标识
- 什么是标识符?
- 标识符的组成规则?
总结:
1. 自己起的名字 【自己去定义的】
自己给类, 变量, 方法... 起的名字
2.
26个英文字母大小写都可以(严格区分大小写)
数字0-9
_ $
建议 : 自己起名字的时候, 要做到见名知意
int age = 18; // 变量age代表的是年龄
大部分情况,我们定义标识符的时候,都是用的是单词!【可以选择拼音!】
3. 标识符组成的注意事项【硬性要求!不遵循,会报错的!】
A. 数字不能开头
B. 不能使用关键字命名
C. 中间不能以空格分隔.
标识符的命名规范 (江湖规矩) 【软性的要求:不要找要求,显得不够专业,low】
小驼峰式命名:变量名、方法名
首字母小写,从第二个单词开始每个单词的首字母大写。firstName
大驼峰式命名:类名 FirstName
每个单词的首字母都大写。
另外,标识符的命名最好可以做到见名知意
例如:username、studentNumber等
- 类型转换的分类有?
- (隐式)转换指的是?
- (强制)转换指的是?
总结:
自动类型转换:我们不用自己写代码处理!
将小范围数值赋值给大范围的变量 double d = 10;
规律: byte ----->>> short -----> int -----> long ------> float -----> double
强制类型转换:写代码手动完成!【慎用!】
将大范围的数值赋值给一个小范围的变量 int num = 10.5; // 编译报错!不能直接将double类型的数值赋值给一个int类型的变量!
可以进行强制转换:小范围的数据类型 变量名称 = (小范围的数据类型)大范围的数据;
int num = (int)10.5; // 不推荐!丢失精度!(将小数点后面的数据丢掉!)
强制类型转换,还存在数据溢出问题!(将满满的一桶水倒入一个水杯)
int count = (int)100000000000000000L; // 语法没有任何问题,但是执行之后存在数据溢出问题。
char类型不参与 byte和short的转换!
boolean不涉及类型转换!(只存在于数值)
面试题:问题: 下面的程序是否有问题,如果有问题,请指出并说明理由(必须掌握!!!)
byte b1 = 3; // 数值3是一个常量(整数类型的常量) 没问题!
byte b2 = 4; // 没问题
byte b3 = b1 + b2; // byte或者short类型参与运算,会先将byte或者short提升为int // b1和b2都是变量!语法检测的时候,不关注数值(变量的数值会改变),
错误原因: 因为所有整数默认都是int类型, 所以b1和b2相加的时候, 会先将自己提升为int类型
两个int相加的结果还是int, 将int结果赋值给byte, 必须加入强转
解决方案: byte b3 = (byte)(b1 + b2);
byte b = 3 + 4; // 这句话不会出现编译错误
原因是3和4是两个常量, Java有常量优化机制, 在编译的时候就会将3和4计算出一个结果
并自动判断结果是否在byte的取值范围内.
double d = 20;
System.out.println(d); // 20.0;
long l = 10L; // 这里不存在编译错误, 因为10默认是int类型, 小的给大的赋值, 可以直接赋值
System.out.println(l);
long l2 = 12345678998765432L;
- 字符串的+号串联
能够说出Java语言的跨平台原理
通过JVM实现,不同操作系统,只需要有不同版本的JVM即可!
能够独立下载并安装JDK
在公司中,JDK版本都是统一的!
能够独立配置path环境变量
一台电脑安装了多个JDK?哪一个生效?环境变量的配置!
能够独立编写HelloWorld案例并编译执行
原封不动的copy
能够说出Java中的8种基本数据类型
整型:byte short int long
浮点型:float double
字符型:char
布尔类型:boolean
能够定义基本数据类型的变量并使用变量名输出
格式: 数据类型 变量名称 = 数值;
能够说出标识符的命名规则
允许出现的: 26个字母(区分大小写)、数字、下划线_、美元符号$
硬性要求:不能以数字开头、不能使用关键字、不能出现允许出现内容以外的!
软性要求:变量、方法名称使用小驼峰;类名使用大驼峰!【见名知意!】
能够说出基本数据类型之间相互转换的规则
char不与 byte和short进行类型转换,boolean类型不参与!
自动转换:小范围数值赋值给大范围的变量;
byte—> short ----> int ----> long ----> float —double
char—> int ----> long ----> float —double 我们可以将汉字作为数字处理! 10 1010 万国码
强制转换:大范围的数值赋值给小范围的变量;
大范围的数值赋值给一个小范围的变量; int num = (int)10L;
// 精度丢失!
// 溢出!
long b1 = 1212321321311; // 常量值给变量名称,编译阶段,只要数值不超过范围,就通过!
long b2 = 1212321321321;
long b3 = b1+b2; // 变量,编译,只要语法正确就行! long+long = long