计算机由计算机硬件和计算机软件组成.
指的就是人与人之间进行沟通, 交互的载体, 方式.
指的就是人与计算机之间进行交互的方式.
简单理解: 由二进制0, 1这样的指令组成.
例如: 10010表示 加法.
简单理解: 用一些简单的字母表示二进制序列(0, 1)
例如: add表示 加法.
优点: 文件小, 执行速度快, 可以直接操作计算机的硬件
弊端: 可读性和可移植性相对较差, 对程序员来讲, 门槛较高.
简单理解: 由一些纯英文字母(包含大小写) 和 一些特殊符号组成.
例如: +表示 加法.
优点: 语法相对简单, 可读性, 兼容性较强, 对程序员来讲, 门槛较低.
弊端: 种类繁多, 每种语言都有自己的语法, 每学一门语言, 都要学习新的语法.
使用最广泛, 且简单易学
Java是一门强类型的语言
Java有非常完善的异常处理机制
Java提供了对于大数据的基础性支持
Sun公司(Stanford University NetWork: 美国的斯坦福大学)在1995年推出的高级编程语言.
Java之父: 詹姆斯·高斯林(James Gosling)
Sun公司在2009年被甲骨文(Oracle)公司给收购了.
J2SE: 标准版, 也是其他两个版本的基础. 在JDK1.5的时候正式更名为: JavaSE.
J2ME: 小型版, 一般用来研发嵌入式程序. 已经被Android替代了. 在JDK1.5的时候正式更名为: JavaME.
J2EE: 企业版, 一般开发企业级互联网程序. 在JDK1.5的时候正式更名为: JavaEE.
1. 开源
指的是Java源代码是开放的.
2. 跨平台
指的是: 用Java代码编写的程序, 可以在不同的操作系统上运行.
原理: 由JVM保证Java程序的跨平台性, 但是JVM本身并不能跨平台.
图解:
3. 多态
4. 多线程
5. 面向对象
JDK: Java开发工具包(Java Development Kit), 包含开发工具 和 JRE.
常用的开发工具: javac, java
JRE: Java运行时环境(Java Runtime Environment), 包含运行Java程序时所需的核心类库和 JVM.
核心类库: java.lang, java.util, java.io
JVM: Java虚拟机(Java Virtual Machine)
作用: 用来保证Java程序跨平台性的, 但是JVM本身并不能跨平台.
1. JDK的下载
Oracle官网: www.oracle.com
直接下载JDK的地址: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2. JDK的安装
傻瓜式安装(下一步下一步就可以了)
安装路径(以后但凡是安装开发软件, 都要满足以下两点: )
不要直接安装到盘符目录下.
安装路径最好不要出现中文, 空格等特殊符号.
目录解释:
bin: 存放的是编译器和工具
db: 存数数据
include: 编译本地方法.
jre: Java运行时文件
lib: 存放类库文件
src.zip: 存放源代码的.
3. JDK的卸载
去控制面板直接卸载就可以了.
小技巧: windows徽标键 + 字母R -> control -> 然后敲回车, 这样可以直接打开控制面板.
让我们可以在任意目录下都能使用JDK提供的常用开发工具, 例如: javac, java
Java程序的开发步骤一共3步, 分别是:
- 编写
- 编译
- 执行
图解:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
System.out.println("你好, 欢迎来到我的直播间, 记得刷礼物喲!");
}
}
注意: HelloWorld.java叫源代码文件, 是我们能看懂, 但是计算机看不懂的文件.
通过javac指令将HelloWorld.java文件编译成HelloWorld.class字节码文件.
格式
在DOS窗口中输入如下内容:
javac HelloWorld.java
通过java指令, 让计算机执行HelloWorld.class字节码文件.
格式
//在DOS窗口中输入如下内容:
java HelloWorld
注意: 直接写文件名即可, 不需要写文件后缀名, 即: .class
Bug
• 概述
在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)
• 解决方案
多看, 多思考, 多尝试, 多总结
遇到的问题
开发工具指的就是我们用来编写代码的软件.
开发工具指的就是我们用来编写代码的软件, 常用的主要有以下几类:
• windows操作系统自带的记事本
缺点: 没有行号, 关键字不能高亮显示, 代码不能折叠.
• 高级记事本(Notepad++, Editplus)
优点: 有行号, 关键字能高亮显示, 代码能折叠.
缺点: 不方便我们调试, 不适合开发大型项目.
• 集成开发工具(IDE)
– 集成开发工具指的是集代码的编写, 编译, 运行, 调试, 重构等一系列功能于一体的软件.
– 常用的IDE如下:
• Eclipse
• MyEclipse
• IDEA
IDEA 全称 IntelliJ IDEA,是Java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Python等少数语言。
总结: IDEA这个软件是用ava语言开发的, 所以想使用IDEA, 你电脑上必须安装JRE.
JetBrains公司官网: www.jetbrains.com
直接下载地址: www.jetbrains.com/idea/download/other.html
3. 这个界面是告诉我们, 当前的IDEA可以开发哪些程序, 默认这些模块都是选中的, 如果明确知道不需要使用某些模块, 可以通过Disable All禁用掉此模块. 这里我们不需要禁用, 直接选择Next: Featured plugins即可.
4. 这个界面是JetBrains公司提供给我们的可选择性安装的5个小插件, 我们可以根据需求进行选择, 这里建议安装最后一个插件IDE Features Trainer, 它可以帮助我们快速使用IDEA. 然后选择Start using IntelliJ IDEA即可.
详细图解
2. 选择Create New Project, 新建项目.
3. 新建一个空项目.
4. 指定项目名和项目的保存位置.
5. 新建模块.
2. 在com.itheima.demo01包下创建HelloWorld类.
4. 如果提示错误: 找不到或无法加载主类 com.itheima.demo01.HelloWorld, 则修改下项目语言级别即可, 然后重启下IDEA.
具体步骤:
左上角的File -> Project Structure -> Project -> 修改Project SDK和Project language level两个选项的值 -> 然后关闭IDEA软件, 重新打开即可.
图解:
隐藏不需要的文件, 需要在界面的lgnore files and folders选项值后加*.idea;*.iml;out;即可.
常用的快捷键如下图:
选择要移除的项目, 然后右键点击, 选择Remove Module, 即可移除该模块.
选择IDEA软件左上角的File选项, 然后选择Project Structured, 选择Modules, 选择+(加号), 然后选择Import Module, 然后导入指定模块即可.
就是用来对程序进行解释和说明的文字.
大白话翻译: 注释是给我们程序员看的, 并不是给计算机看的.
• 单行注释
//单行注释
• 多行注释
/*
多行注释
多行注释
*/
• 文档注释
/**
文档注释
文档注释
*/
就是被Java语言赋予了特殊含义的单词.
• 关键字是由纯英文字母组成的, 而且全部都是小写的.
• 常用的开发工具(Notepad++, IDEA)针对于关键字都会高亮显示.
• public: 公共的权限, 目前先了解即可.
• class: 表示在创建一个类.
• static: 表示静态的意思.
• void: 表示方法的返回值类型.
//类名可以自定义.
public class 类名 {
public static void main(String[] args) {
System.out.println(这里的内容可以随便写);
}
}
• 概述:
现在还不是关键字的单词, 但是却具有关键字的意义, 在以后的JDK升级版本中, 可能会被升级为关键字的单词.
• 常见的保留字:
goto, const
指的是在程序的执行过程中, 其值不能发生改变的量.
• 自定义常量(目前先了解, 在面向对象的时候, 才会详细解释)
• 字面值常量
解释: 根据字面意思就可以划分的常量.
public class ConstantDemo01 {
// 定义main方法,作为程序的主路口
public static void main(String[] args) {
//1. 输出整数常量
System.out.println(10);
System.out.println(20);
System.out.println("=============================");
//2. 输出小数常量
System.out.println(5.21);
System.out.println("=============================");
//3. 输出字符常量 要求值有且仅有一个
System.out.println('男');
//System.out.println('10'); // 这样写会报错 10 = 1 + 0
//System.out.println(''); // 这样写会报错
System.out.println("=============================");
//4. 输出字符串常量
System.out.println("落空空");
System.out.println("");
System.out.println("=============================");
//5. 输出布尔常量
System.out.println(true);
System.out.println(false);
System.out.println("=============================");
//6. 输出空常量 在java中 空常量不能直接输出
}
}
• 在程序的执行过程中, 其值可以在某个范围内发生改变的量就叫变量.
• 从本质上讲, 变量其实是内存中的一小块区域. 例如:
– 商品的价格(5元,6元,4元)
– 钟表的时间(5点,6点,6点半)
– 人们的年龄(0岁,10岁,18岁……80岁)
– 程序员生涯的职位(开发工程师,开发经理,项目经理,CTO)
• Java中要求一个变量每次只能保存一个数据,而且必须要明确保存数据的数据类型。
解释:
– 数据类型:变量变化的范围就是数据类型
– 变量名:每个变量都有一个名字,方便存取。
– 初始化值:使用变量前,需要给变量赋值。
需求
定义变量, 记录班级的学生人数, 并将结果打印到控制台上.
参考代码
//1. 定义一个Java类, 类名叫: VariableDemo01
public class VariableDemo01 {
//2. 定义main方法, 作为程序的主入口, 所有代码都是从这里开始执行的.
public static void main(String[] args) {
//3. 定义一个int类型的变量, 变量名叫a, 初始化值为: 121
int a = 121;
//4. 通过输出语句, 将变量a的值打印到控制台上.
System.out.println(a);
}
}
Java是一种强类型语言, 针对于每一个数据都给出了明确的数据类型.
解释:
区分一门语言到底是强类型语言还是弱类型语言的依据是: 看这门语言对数据的数据类型划分是否精细.
如果精细, 则是强类型语言, 如果不精细, 则是弱类型语言. 10.3.1 数据类型的分类
• 基本数据类型(简称: 基本类型)
– byte, short, char, int, long, float, double, boolean
• 引用数据类型(简称: 引用类型)
– String, 数组, 类, 接口, 目前先了解, 后续会详细讲解.
• 方式一: 声明变量并赋值.
数据类型 变量名 = 初始化值;
//示例: 声明(定义)一个int类型的变量, 变量名叫a, 初始化值为: 10
int a = 10;
• 方式二: 先声明, 后赋值.
数据类型 变量名;
变量名 = 初始化值;
//示例
//1. 声明(定义)一个int类型的变量, 变量名叫a
int a;
//2. 把数字10赋值给变量a
a = 10;
需求 定义变量, 分别记录上述的8种基本类型数据, 并将变量值打印到控制台上.
思路分析
参考代码
• 方式一: 声明变量并赋值.
//1. 定义一个类, 类名叫: VariableDemo02
public class VariableDemo02 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 测试byte类型.
//3.1 定义一个byte类型的变量, 变量名叫b, 初始化值为10.
byte b = 10;
//3.2 将变量b的值打印到控制台上.
System.out.println(b);
//4. 测试short类型.
//4.1 定义一个short类型的变量, 变量名叫s, 初始化值为20.
short s = 20;
//4.2 将变量s的值打印到控制台上.
System.out.println(s);
//5. 测试char类型.
//5.1 定义一个char类型的变量, 变量名叫c, 初始化值为'A'.
char c = 'A';
//5.2 将变量c的值打印到控制台上.
System.out.println(c);
//6. 测试int类型
int a = 10;
System.out.println(a);
//7. 测试long类型, 数据后记得加字母L.
long lon = 100L;
System.out.println(lon);
//8. 测试float类型, 数据后边加字母F.
float f = 10.3F;
System.out.println(f);
//9. 测试double类型.
double d = 5.21;
System.out.println(d);
//10. 测试boolean类型.
boolean bb = true;
System.out.println(bb);
}
}
• 方式二: 先声明, 后赋值
//1. 定义一个类, 类名叫: VariableDemo03
public class VariableDemo03 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 测试byte类型.
//3.1 定义一个byte类型的变量, 变量名叫b.
byte b;
//3.2 把数字10赋值给变量b.
b = 10;
//3.3 将变量b的值打印到控制台上.
System.out.println(b);
//4. 测试char类型.
//4.1 定义一个char类型的变量, 变量名叫c.
char c;
//4.2 把字符'A'赋值给变量c.
c = 'A';
//4.3 将变量c的值打印到控制台上.
System.out.println(c);
//5. 测试int类型
int a;
a = 10;
System.out.println(a);
//6. 测试double类型.
double d;
d = 5.21;
System.out.println(d);
//7. 测试boolean类型.
boolean bb;
bb = true;
System.out.println(bb);
}
}
需求
演示上述使用变量时的三个注意事项.
参考代码
//1. 定义一个类, 类名叫: VariableDemo04
public class VariableDemo04 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 变量未赋值,不能使用.
int a;
//a = 10;
System.out.println(a); //这样写, 代码会报错, 因为变量a没有赋值.
//4. 变量只在它所属的范围内有效.
{
//大括号包裹起来的代码叫: 代码块.
//作用: 让变量尽可能早的从内存消失, 从而节约资源, 提高效率.
double d = 5.21;
System.out.println(d);
}
//下边这行代码会报错, 出了上述的大括号, 变量d就已经从内存中消失了, 无法访问.
System.out.println(d);
//5. 一行上可以定义多个变量,但是不建议.
int e = 10, f = 20, g = 30;
System.out.println(e);
System.out.println(f);
System.out.println(g);
}
}
标识符就是用来给类, 接口, 方法, 变量, 包等起名字的规则.
标识符只能包含52个英文字母(区分大小写)、0 ~ 9数字 、$(美元符号)和_(下划线)。
标识符不能以数字开头。
标识符不能和Java中的关键字重名。
最好做到见名知意.
例如: name表示姓名, age表示年龄.
需求
定义变量分别记录张三的年龄和性别(假设: 23, 男), 然后将变量值打印到控制台上.
参考代码
//1. 定义一个类, 类名叫: VariableDemo06
public class VariableDemo06 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 定义变量, 记录张三的年龄.
int zhangSanAge = 23;
//4. 定义变量, 记录张三的性别.
char zhangSanSex = '男';
//5. 打印年龄.
System.out.println(zhangSanAge);
//6. 打印性别.
System.out.println(zhangSanSex);
}
}
不同类型的数据之间可能会进行运算,而这些数据取值范围不同,存储方式不同,直接进行运算可能会造成数据损失,所以需要将一种类型转换成另外一种类型再进行运算。
即: Java程序中要求参与计算的数据,必须保证数据类型的一致性,如果数据类型不一致将发生类型转换。
• 自动(隐式)类型转换
• 强制(显式)类型转换
指的是小类型转大类型,会自动提升为大类型,运算结果是大类型.
大白话翻译: 将取值范围小的类型自动提升为取值范围大的类型
当byte类型的数据和int类型的数据的数据进行计算时, 会自动将byte类型的数据提升为int类型, 然后再计算.
转换规则为:
指的是手动将大类型转换成小类型,运算结果是小类型.
大白话翻译: 将取值范围大的类型强制转换成取值范围小的类型.
尝试把小数1.5赋值给int类型的变量a, 并打印结果.
public class DataTypeDemo02 {
public static void main(String[] args) {
//1. 定义int类型的变量a.
int a;
//2. 尝试将1.5赋值给变量a.
//这行代码会报错, 大范围的数据赋值给小范围的数据类型, 必须通过`强制转换`格式实现.
//a = 1.5;
a = 10; //这样写没问题.
//3. 打印结果.
System.out.println(a);
}
}
• double 类型占8个字节,int 类型占4个字节。
• 1.5 是double 类型,取值范围大于int 。
• 可以理解为double 是8升的水壶,int 是4升的水壶,不能把大水壶中的水直接放进小水壶去。
• 想要赋值成功,只有通过强制类型转换,将double 类型强制转换成int 类型才能赋值。
• 比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
数据类型 变量名 = (数据类型)要被转换的数据值;
//示例: 将1.5赋值给int类型,代码修改为:
int a = (int)1.5;
下述代码会不会报错, 如果会, 哪一行会报错, 为什么? 怎么修改代码?
public class DataTypeDemo03 {
public static void main(String[] args) {
short s = 11;
s = s + 3;
System.out.println(s);
}
}
观察下述代码, 打印结果是多少呢?
public static void main(String[] args) {
//字符类型变量
char c = 'a';
int i = 1;
//字符类型和int类型计算
System.out.println(c+i); //输出结果是???
}
在计算机的内部都是二进制的0, 1数据,如何让计算机可以直接识别人类文字呢?
于是就产生出了编码表的概念。
• 编码表:就是将人类的文字和一个十进制数进行对应起来组成一张表格。 ‘a’ -> 97 char:0-65535
• 存储字符时:需要查找ASCII码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中
• 使用字符时:将对应的二进制数转换为十进制 找到ASCII表中对应的字符 显示出来
• 将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII码表.
• ASCII(American Standard Code for Information Interchange 美国标准信息交换码), 规则如下:
字符 数值
0 48
9 57
A 65
Z 90
a 97
z 122
注意:
在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。
char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。
• 运算符和表达式
– 运算符:用来连接常量或者变量的符号, 就叫运算符.
– 表达式:用运算符把常量或者变量连接起来符合java语法的式子就称之为表达式。
• 不同运算符连接的表达式体现的是不同类型的表达式。
例如:
– +(加号) 是运算符,并且是算术运算符。
– a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。
• 算术运算符
• 赋值运算符
• 比较(关系)运算符
• 逻辑运算符
• 三元(三目)运算符
算术运算符指的是用来对变量或者常量进行算术操作的, 例如: 加减乘除等.
算数运算符包括 | 作用 |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ | 自增运算符, 相当于自身 + 1 |
- - | 自减运算符, 相当于自身 - 1 |
• Java中, 整数相除, 结果还是整数.
• + 符号在字符串中的操作:
– + 符号在遇到字符串的时候,表示连接、拼接的含义。
– “a”+"b"的结果是“ab”,连接含义
public static void main(String[] args){
System.out.println("5+5="+5+5);//输出5+5=55
}
符号 | 作用 | 声明 |
---|---|---|
++ | 自增 | 变量的值加1 |
- - | 自减 | 变量的值减1 |
解释: ++ 运算,变量自己增长1。反之,-- 运算,变量自己减少1,用法与++ 一致, 此处以++举例.
• 独立运算:
– 变量在独立运算时,前++和后++没有区别 。
– 变量前++ :例如 ++i 。
– 变量后++ :例如 i++ 。
• 混合运算:
– 和其他变量放在一起,前++和后++就产生了不同。
– 变量前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
public static void main(String[] args) {
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
– 变量后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a=10,将10赋值给变量a |
+= | 加后赋值 | a+=b,将a+b的值给a |
-= | 减后赋值 | a-=b,将a-b的值给a |
*= | 乘后赋值 | a*=b,将a×b的值给a |
/= | 除后赋值 | a/=b,将a÷b的商给a |
%= | 取余后赋值 | a%=b,将a÷b的余数给a |
• 赋值运算符,就是将符号右边的值,赋给左边的变量。
public static void main(String[] args){
int i = 5;
i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i
System.out.println(i); //输出结果是10
}
• +=符号的扩展
下面的程序有问题吗?
public static void main(String[] args){
short s = 1;
s+=1;
System.out.println(s);
}
分析: s += 1 逻辑上看作是s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是,s=s+1进行两次运算,+= 是一个运算符,只运算一次,并带有强制转换的特点,也就是说s += 1 就是s = (short)(s + 1),因此程序没有问题编译通过,运行结果是2.