Java
1、Java语言概述
1.1 Java语言发展史
Java之父:詹姆斯·高斯林(James Gosling)
1990年,詹姆斯·高斯林与Patrick,Naughton和Mike Sheridan等人合作“绿色计划”,后来发展一套语言叫做“Oak”,后改名为Java。
Java的发展历程:
1.2 Java语言平台版本
-
JavaME(Java Platform Micro Edition)小型版
是为开发电子消费产品和嵌入式设备提供的解决方案。
-
JavaSE(Java Platform Standard Edition)标准版
是为开发普通桌面和商务应用程序提供的解决方案
该技术体系是其他,可以完成一些桌面应用程序的开发两者的基础,针对PC端开发。 -
JavaEE(Java Platform Enterprise Edition)企业版
是为开发企业环境下的应用程序提供的一套解决方案
1.3 Java语言特点
简单性 | 面向对象 | 分布式 |
---|---|---|
可植性(跨平台) | 多线程 | 动态性 |
健壮性 | 安全性 |
简单性: 语法结构的简单,简化代码的书写量,抛弃了c语言复杂的难以理解的在开发过程中无需着重使用的一些概念(指针/垃圾回收GC)。
分布式: Java允许将程序进行功能的分割执行,发布到不同的服务器同时运行,减少服务器压力。
多线程: Java运行通过代码书写的形式同时执行多个不同功能的代码。
动态性: 初始JDK只安装常用的基础功能,可以通过扩展的形式进行额外功能的添加。
健壮性: Java提供了健全的代码检查机制,正在代码编译期间就会进行检测。
安全性: Java在网络上传输的安全性。
可移植性: Java基于虚拟机运行,JDK中内置虚拟机,只要安装了JVM那么就可以运行Java。
1.4 JDK、JRE、JVM之间的关系
-
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。 其中的开发工具:编译工具(javac.exe) 执行工具(java.exe) 打包工具(jar.exe)等
-
JRE(Java Runtime Environment Java运行环境)
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
-
JVM(Java Virtual Machine Java虚拟机)
整个java实现跨平台的最核心的部分,保证程序的跨平台性,以及编译执行写好的java程序!
总结
使用JDK开发完成的java程序,交给JRE去运行。由jvm保证跨平台性。
2 开发环境的搭建
2.1 JDK的下载
在 甲骨文官网 获取JDK。具体步骤如下:
- 进入甲骨文官网,点击上方的Product,然后点击下方的Java。
- 转到新页面后滚动条往下滑动,找到Oracle JDK并点击。
- 找到Java SE 8版本,点击JDK Download。
- 根据自己的操作系统,下载对应的JDK版本。
- 若想找JDK之前的旧版本,可在第三步展现的界面往下滑动,找到 Java Archive 并点击。
- 在该页面内,可找JDK任意版本进行下载,下载时需要进行登录账号(可用邮箱免费注册)。
尽量下载 jdk-8u201-windows-x64 或者 jdk-8u202-windows-x64这两个版本。
网盘下载链接如下:
https://pan.baidu.com/s/1vMYzgwQirV6h51Ss8f9PJg
提取码: 8421
注意:针对不同的操作系统,需要下载对应版本的JDK
2.2 JDK安装
傻瓜式安装,下一步即可。
默认的安装路径:JDK X64位安装在C:\Program Files下,JDK 32位则安装在C:\Program Files (x86)下。
为方便统一管理建议修改安装路径,将与开发相关的软件都安装到一个目录下,例如:D:\Java。
此外,JDK 1.8版本之前(包括1.8版本)安装时,会出现让再次安装JRE,因为JDK里边有专用的JRE,需要专用JRE才能运行JDK中包含的工具;而后边下载的JRE是公共JRE,这个JRE可由其他Java应用程序使用。
注意:安装路径不要包含中文或者空格等特殊字符(使用纯英文目录)。
2.3 JDK卸载
- 打开控制面板找到程序
- 选择Java程序卸载
- 打开原安装目录删除文件夹(存在的情况下)
2.4 环境变量的配置
-
右键电脑属性选择高级系统设置
-
选择高级选项下 的 环境变量
-
配置环境变量
JAVA_HOME:在系统变量中寻找是否存在名为JAVA_HOME的系统变量,如果存在则修改,不存在则新建。
变量名固定为:JAVA_HOME
变量值为安装jdk的目录CLASSPATH:
path:一定存在,修改时注意不要瞎删
添加固定变量%JAVA_HOME%\bin
JAVA_HOME:标志jdk安装路径,为第三方需要使用jdk的软件提供支持
CLASSPATH:用于设置编译Java文件工具以及编译文件位置
Path:用于使计算机在任意位置都可以识别java编译指令
-
测试环境变量配置
windows + R打开命令提示符,输入cmd进入cmd命令窗口,输入java指令验证。查看版本可输入java -version
命令行输入javac指令验证
3 简单DOS命令的学习
3.1 计算机语言发展史
机器语言:二进制语言,使用0和1编写只能由机器读取执行的语言。
汇编语言:在计算机中预先设置语法执行程序的语言,不具有逻辑性。 如:DOS
高级语言:Java 具有逻辑性编程语言。
3.2 如何打开DOS命令
打开命令行窗口的方式:
- windows + R打开运行窗口,输入cmd,回车。
- 点击windows窗口图标,输入cmd,选择命令提示符
3.3 常用DOS命令
操作 | 说明 |
---|---|
盘符名称: | E:回车,表示切换到E盘。 |
dir | 查看当前路径下的内容。 |
cd | 目录 进入单级目录。cd JavaSE |
cd… | 回退到上一级目录。 |
cd 目录1\目录2… | 进入多级目录。cd JavaSE\baiyunshan |
cd\ | 回退到盘符目录。 |
cls | 清屏。 |
exit | 退出命令提示符窗口。 |
其他dos可以使用help指令输出。
4 第一个Java程序
4.1 Java程序开发运行流程
开发Java程序,需要三个步骤:编写源程序,编译程序,运行程序2。
4.2 程序书写
- 创建以.java结尾的源程序并进行命名
- 按照java规范进行代码书写
public class HelloWorld{
public static void main(String [] args){
System.out.println("Hello kitty!");
}
}
-
使用javac指令将以.java结尾的源文件编译为以.class结尾的二进制字节码文件
javac 文件全路径(包含后缀)
编译:javac 文件名.java
范例:javac HelloWorld.java
- 使用java指令运行指定的类(通过类名)
java 类名(不需要写后缀)
执行:java 类名
范例:java HelloWorld
5.2 注意事项
-
大括号成对出现不要少些
-
class后的名字中不能出现空格(必须为一个单词)
-
严格区分大小写
-
不能使用中文符号
-
javac编译命令后面跟的是编译的源文件全路径
-
java执行命令后面跟的是class后的名字
-
class后的名字必须与文件名相同
5 Java基本语法
5.1 注释
5.1.1 什么是注释
注释是对代码的解释和说明的文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要
java中的注释在代码编译阶段不会被解析,不会编译进class
5.1.2 注释分类
单行注释:以//开始 注释本行内容
多行注释:以/*开始 注释到*/结束中的多行内容
文本注释:以/**开始 注释到*/结束中的多行内容 不同的是可以使用@author等注解进行额外内容的书写
/**
文档注释一般书写在类上或方法上进行类与方法的说明
@author 作者
@time 时间
*/
//单行注释 使用的较多的注释 注释本行内容
public class H{
//公开的 类 H
//创建一个公开的类 要求与文件同名 只能使用单个单词书写(Hello_World)也算一个单词
public static void main(String []args){
/*
多行注释 注释多行文本内容
公开的 静态的 无返回值的 main方法名 字符串 []args
main不能修改固定为main (String []args)也不能修改
main方法 主方法 是一个类的入口 执行一个类默认执行的方法
*/
System.out.println("你好1!");
//系统 出去 打印 ln-》line的缩写
//在系统输出打印并换行 输出括号中""中间的内容
System.out.println("你好2!");
}
}
5.2 关键字
5.2.1 概念
在java中已经被赋予特殊含义的单词称之为java的关键字。
5.2.2 关键字展示
java的关键字一共有51+2个
51个关键字以及2个保留字 (现在还没赋予含义未来可能赋予)
5.2.3 关键字特点
- 都有小写单词组成
- 在相应的编辑工具中都会高亮显示
5.3 标识符
5.3.1 什么是标识符
标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名。
5.3.2 标识符的组成规则
- 由字母、数字、下划线“_”、美元符号“$”组成。
- 首字母不能是数字。
- 不能使用关键字作为标识符。
- 标识符对大小写敏感(区分大小写)。
- 同一{ }内不允许出现同名标识符。(同一作用域内不允许出现同名标识符)
5.3.3 标识符的命名规范
- 通用规范
见名知意:标识符命名与实际功能关联
驼峰式命名法:如果标识符由多个单词组成,除了手单词其余单词首字母均大写 userName
- 类名
一个单词: 首字母大写 Hello
多个单词: 每一个单词的首字母都要大写 HelloWorld (大驼峰)
- 变量名和方法
一个单词: 全部小写 value get()
多个单词: 从第二个单词的首字母开始,每一个单词都要大写 maxValue getValue() (小驼峰)
- 包
一个单词: 全部小写 cn com
多个单词: 全部小写中间用.
分割 cn.yunhe
公司的域名倒着写
www.baidu.com–>com.baidu.xxx
- 自定义常量
一个单词: 全部大写 MAX VALUE
多个单词: 全部大写 中间用 _ 隔开 MAX_VALUE
5.4 常量
5.4.1 什么是常量
在程序运行过程中,其值不可以发生改变的量。
5.4.2 Java中常量的分类
- 字符串常量
用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、“abc”、"中国"等。
- 整数常量
整数,例如:-10、0、88等。
- 小数常量
小数,例如:-5.5、1.0、88.88等。
- 字符常量
用单引号括起来的一个字符,例如:‘a’、‘5’、‘B’、'中’等。
- 布尔常量
布尔值,表示真假,只有两个值true和false。
- 空常量
一个特殊的值,空值,值为null。
5.4.3 常量演示
除空常量外,其他常量均可使用输出语句直接输出。
/*
常量的分类:
字符串常量 "123" "abc"
整数常量: 100 1 -1 -100
小数常量: 1.1 1.2 -1.1 -1.2
字符常量: 'a' '1' '你'
字符'' 有且仅有一个字符
布尔常量: true false
空常量: null
*/
public class Demo01{
public static void main(String[] args){
// 字符串常量 "123" "abc"
System.out.println("abc");
// 整数常量
System.out.println(100);
System.out.println(-100);
//小数常量
System.out.println(1.1);
System.out.println(-1.1);
// 字符常量
System.out.println('a');
System.out.println('你');
// System.out.println('');
System.out.println(' ');
// 布尔常量: true false
System.out.println(true);
System.out.println(false);
// null是不能直接打印,有特殊应用的,在后面的数组 集合 对象中使用
// System.out.println(null);
}
}
5.5 变量
5.5.1 什么是变量
- 在程序运行过程中,其值可以在一定范围内发生改变的量,从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化
- 在程序运行过程中可以改变的量称之为变量
5.5.2 变量第一定义的格式
- 声明变量并赋值
数据类型 变量名 = 初始化值; // 声明变量并赋值
int age = 18;
System.out.println(age);
- 先声明,后赋值
// 先声明,后赋值(使用前赋值即可)
数据类型 变量名;
变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);
- 多个变量同时声明并赋值
在同一行定义多个同一种数据类型的变量,中间使用逗号隔开
数据类型 变量名 = 值,变量名 = 值, ....;
int a = 10, b = 20; // 定义int类型的变量a和b,中间使用逗号隔开
System.out.println(a);
System.out.println(b);
int c,d; // 声明int类型的变量c和d,中间使用逗号隔开
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);
5.5.3 变量的注意事项
1. 在同一对花括号中,变量名不能重复。
2. 变量在使用之前,必须初始化(赋值)。
3. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
4. 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
5.5.4 经常使用的变量创建
// 存储整数
int age = 18;
// 存储小数
double d = 3.1415926535;
// 存储单个字符
char c = 'a';
// 存储真假
boolean bool = true;
// 存储字符串(引用数据类型)
String str = "字符串";
System.out.println(str);
5.6 数据类型
指的是代码编写过程中声明与保存的数据的形式。
5.6.1 计算机存储单元
我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”。
通常用大写字母”B”表示,字节是由连续的8个位组成。
5.6.2 存储单位换算
除了字节外还有一些常用的存储单位,其换算单位如下
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
5.6.3 进制转换
-
二进制与十进制之间转换
-
二进制与十六进制之间转换
-
十六进制与十进制之间转换
-
十进制与X进制(X为任意值)之间转换
十进制数转换为任意进制数的原理和十进制转换为二进制的原理相同。
十进制数连续除以X,直到商为0即可。
5.6.4 Java中的数据类型
- 为什么有数据类型
Java是一个强类型语言,对每一种数据都规定了范围.
- 数据类型的分类
- 基本数据类型(四类八种)
整数类型:用于存储整数数据
浮点类型:用于存储小数数据
字符类型:用于存储单个字符
布尔类型:用于真假值的存储
- 注意
在开发过程中,对于整数类型书写默认是int类型,浮点数型书写默认是double类型
5.7 数据类型转换
使用不同类型的变量进行数据的存储
5.7.1 自动类型转换
数据类型小的向数据类型大的转换
无需特殊语法,在进行转换时由程序自动进行转换操作
//自动类型转换
bate num1 = 15;
int num2 = num1;
System.out.println("num2");
运算符转换
进行算术运算时,会自动将结果转换为当前运算中最大的数据类型。
//运算符转换
char ch1 = 'a';
System.out.println(ch1 + 1);
//输出结果为98
//a的ASCII码为97
面试题
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
b=b1+b2;会编译失败
在进行赋值时虽然默认为int类型 但是如果数值在存储范围内不会出错
进行如果进行运算的是变量会获取对应地址存储的数据类型,进行运算后结果根据运算的类型进行转换,之后在进行赋值
5.7.2 强制类型转换
数据类型大的向数据类型小的转换
由于是强制转换可能造成数据的溢出,所以需要使用特定语法进行强制类型转换
要转换的小的类型 变量=(要转换的小的类型)大的类型变量;
//强制类型转换
byte b = 127;
int i = 128;
b = (byte) i ;
System.out.println(b);
//输出结果为-128
//将整形i存入字节型的b时,多出一个字,会重新从-128开始存储
// -128 ——> 127
注意: 强制类型转换可能造成数据的溢出,导致与元数据不符,所以一般在进行强制类型转换时,要确保存储数据在指定范围内
5.7.3 强制类型转换注意事项
- char类型的数据转换为int类型是按照ASCII码表中对应的int值进行计算的。比如在ASCII码表中,'a’对应97。
int a = 'a';
System.out.println(a); // 将输出97
- ASCII码表
- 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。
// 修改为:
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);
- boolean类型不能与其他基本数据类型相互转换。
5.8 运算符
- 运算符
对常量或者变量进行操作的符号
- 表达式
用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。 不同运算符连接的表达式体现的是不同类型的表达式。
5.8.1 算术运算符
符号 | 作用 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增 |
– – | 自减 |
//算术运算符
//经常用于基本数据类型数值类型的运算
//+连接运算符
//经常用于字符串的拼接
String str1="hello";
String str2="world";
//System.out.println(str1+" "+str2);
// /除法运算符
//对于整数而言 是取整运算符
//System.out.println(5/4);
//对于小数而言 就是除法运算
//System.out.println(5/4.0);
// %取模运算符 求余
//System.out.println(6%4);
// ++自增一运算符
// --自减一运算符
//在运算结束后对运算的变量值进行修改
int a=1;
//放在变量前
//如果变量参与运算 在进行取值时先进行自增之后取值
//放在变量后
//如果变量参与运算 在进行取值时先取值进之后行自增
int b=a+ a++ + ++a + a-- + --a;
//1+ a++ + ++a + a-- + --a; a=1
//1+ 1 + ++a + a-- + --a; a=2
//1+1 + 3+ a-- + --a; a=3
//5+ 3 + --a; a=2
System.out.println(b);
System.out.println(a);`
注意事项
- /和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
- 整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
int a = 10;
int b = 3;
System.out.println(a / b); // 输出结果3
System.out.println(a % b); // 输出结果1
5.8.2 赋值运算符
使用基本的赋值=与算数运算符组合而成
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a=10 |
+= | 加后赋值 | a+=b => a=a+b |
-= | 减后赋值 | a-=b => a=a-b |
*= | 乘后赋值 | a*=b => a=a*b |
/= | 除后赋值 | a/=b => a=a/b |
%= | 取余后赋值 | a%=b => a=a%b |
5.8.3 关系(比较)运算符
经常用于比较基本数据类型中数值的类型的关系
符号 | 说明 |
---|---|
== | a==b,判断a和b的值是否相等 |
!= | a!=b,判断a和b的值是否不相等 |
> | a>b,判断a是否大于b |
>= | a>=b,判断a是否大于等于b |
< | a<b,判断a是否小于b |
<= | a<=b,判断a是否小于等于b |
注意:
关系运算符==与赋值运算符=是不同的
关系运算符的结果位bollean类型
//关系运算符
System.out.println(1==1);//true
System.out.println(1!=1);//false
5.8.4 逻辑运算符
经常与比较运算符一起使用(因为比较运算符结果位boolean类型)
逻辑运算符就是对多个boolean类型进行逻辑判断返回boolean类型
通常将逻辑运算符与关系运算符这类返回结果位boolean类型的运算符书写的表达式也称之为布尔表达式
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与 | a&b,a和b都是true,结果为true,否则为false |
| | 逻辑或 | a|b,a和b都是false,结果为false,否则为true |
^ | 逻辑异或 | a^b,a和b结果不同为true,相同为false |
! | 逻辑非 | !a,结果和a的结果正好相反 |
&& | 短路与 | 作用和&相同,但是有短路效果 |
|| | 短路或 | 作用和|相同,但是有短路效果 |
//逻辑运算符
//在java中不能像数学(1<x<5)一样对于变量进行前后判断书写
//一般同有逻辑运算符将条件连接
//x>1&x<5
//异或 当左右两边不同时返回true 相同时返回false
//System.out.println(true^false);
//非 也叫取反 将当期选择取反
//System.out.println(!true);
//短路运算&& ||
//短路运算是& | 的升级版
//非短路运算会计算等式左右两边的结果之后进行结果判断
//短路运算是当等式左边的值已经可以确定等式的结果时 将右边运算短路直接输出结果
int left=1;
int right=1;
// System.out.println(left++!=1&right++==1);
// System.out.println(left);
// System.out.println(right);
System.out.println(left++==1||right++==1);
System.out.println(left);
System.out.println(right);
面试题
&与&& 的区别:
&与&&都是与运算,当等式两边结果都为true时返回true,等式两边存在fasle时返回false
&& 是短路运算,因为与运算只要存在false结果就为false,在进行运算过程中,如果等式左边的值为false,那么等式右边的结果无论是什么都不会影响最终的结果,所以短路运算在等式左边已经能确定最终表达式结果的情况下,会将等式右边的运算进行短路操作,减少运算的执行
———————————————————————————————————————
1.&——位运算符、逻辑运算符
&作为逻辑运算符时,&左右两端条件式有一个为假就会不成立,但是两端都会运行,比如(1+2)=4 &(1+2)=3;1+2=4即使为假也会去判断1+2=3是否成立。
2.&&——逻辑运算符
&&也叫做短路运算符,因为只要左端条件式为假直接不成立,不会去判断右端条件式。
相同点:只要有一端为假,则语句不成立
5.8.5 位运算符
//位运算符
//是计算机底层进行数值计算的方式
//先将数据转换为二进制之后进行位运算
//>>右移运算
System.out.println(5>>1);
//<<左移移运算
System.out.println(5<<1);
//& 位与运算
System.out.println(6&3);
//| 位或运算
System.out.println(6|3);
// ^异或运算
System.out.println(6^3);
// 取反码
System.out.println(~6);
5.8.6 三目运算符(三元表达式)
由三部分组成可以根据表达式结果对返回的数据进行选择
语法:数据类型 变量名=布尔表达式?值1:值2
关系表达式 ? 表达式1 : 表达式2;
注意:值可以为任意类型或表达式,三目运算符会返回结果,所以一般使用变量接收
//三目运算符
//也叫三元表达式
//语法:
//布尔表达式?值1:值2
//返回两个数中最大值
int number1=120;
int number2=36;
int number3=326;
int max=(number1>number2)?(number1):(number2);
System.out.println("最大值为:"+max);
6 开发工具的简单使用
java开发工具常用eclipse与idea
注意: 只是开发工具书写代码没有区别,区别就是开发工具的不同使用方式不同
2.1 eclipse安装
- 安装版:使用安装工具包进行安装,在安装过程中进行一下配置
- 解压版:直接解压使用。
解压版如下(创建快捷方式直接使用):
网盘下载链接:https://pan.baidu.com/s/1UD6q4ikd6bkA0J5HU36rcA
提取码: 8421
注意: 无论安装那个版本,eclipse都是基于jdk,尤其是安装版,会自定识别jdk之后进行安装
2.2 使用配置
- 选择默认工作目录
workspace:书写代码存放的位置
勾选下面选项后每次打开直接使用默认工作空间进行代码存储
建议: 把默认路径修改到D:盘或E:盘,这样很容易找到你的java文件。
- 创建工程
书写代码都是为了项目书写,所以在进行代码书写时首先会创建一个项目工程,在相应的项目中书写对应代码
file->new peoject
输入项目名点击finish
src:存放java代码的根目录
JRE System Libray:java运行的核心类库
- 创建包
如果在src下直接书写代码,可能导致所有内容放在一块,java中包的概念就是用于区分代码功能,分别放在不同的包下存储
右键src->new->package
输入包名进行创建
- 创建类书写代码
在对应包右键->new->class
输入类名点击finish
5. 运行代码
在需要运行的类上右键run as ->java application
会将运行的结果输出至控制台
- 修改当前编码集
window->properties进行项目全局配置
每天一点点进步
不进则退