java
特点:
面向对象,跨平台
java的环境
运行环境【JRE】[java runtime environ]:
启动虚拟机运行java的代码
开发环境【JDK】[java development kit]:
给开发者提供了一些操作java程序的工具
java环境的关系:
JRE=JVM(java虚拟机)+java核心类库
JDK=JRE+开发工具
环境问题:
java虚拟机?JVM
是一台虚拟的计算机
用来管理解析执行我们写的java程序
---转化成操作系统识别的指令
---操作系统才根据指令让硬件运行
java程序跟操作系统没关系--跟java虚拟机有关系
跨平台的特性表现
java代码 windows版本jvm window
linux版本jvm linux
Mac 版本jvm Mac
需要在不同的操作系统上面安装支持的jdk或者jre
JDK的目录结构
bin目录---工具
jre目录---运行环境
lib目录---开发用到的类库【虚拟机库】
src.zip和javaxf-src.zip--所有类库资源的源代码
使用JDK的工具:
虽然是可执行文件,不能直接打开使用,
当我们点击打开的时候--弹出黑色窗体--告诉你它的使用方式--使用命令行
windows的命令行环境--dos系统--【windows+r】
输入工具--执行--【第一次安装jdk--直接运行开发工具的时候】
输入java---报错【不是内部或者外部命令】
原因:dos是windows操作系统的另外一种表现形式
jdk的工具属于外来软件应用---不属于我们的操作系统--操作系统无法识别
解决方法:
让操作系统认识jdk工具---告诉操作系统工具在哪里
告诉操作系统路径方式:
地址dos中直接切换到对应目录下---造成一个问题只能在bin目录下使用
通过windows暴露出来的属性【path】将路径添加到操作系统自动识别目录
如何配置操作系统的属性【环境变量】
配置方式有三种【分别应用不同的环境】
第一种:临时配置【不想在电脑上留下痕迹】
windows在dos提供了命令:
path---查看操作系统默认识别的工具路径
set path=新路径;%path% 添加路径
例如 set path=C:\Program Files\Java\jdk1.8.0_341\bin;%path%
第二种:暴力配置:直接配置到系统环境中
选中【我的电脑】【高级系统设置】等
添加jdk的路径
千万不要删除已存在的路径内容
按下home键--将光标定位到最前面
将你的jdk路径粘贴到这个位置,添加一个英文分好隔开
一路【确定】--重新打开命令行窗体--测试环境【java工具命令】
第三种:标准配置:行业规范
解决【暴力配置】存在的问题
问题:我们想换版本的时候,暴力配置方式
需要我们去path路径中找到原来的删除,添加新路径
解决:
能不能将路径单独配置,然后引入path中,系统允许%自定义变量%
配置方式:【到千万不要删除前面都一样】
1)系统变量里面创建一个新的变量【点击创建按钮】
变量名:java_home
变量值:路径中可变部分
例如:【C:\Program Files\Java\jdk1.8.0_341】\bin
2) 将JAVA_HOME 变量引入到path路径下
变量名:path
变量值:%JAVA_HOME%\bin;path原来的路径
注意事项:
1path 中新配置的环境变量一定放在最前面
2.千万别删除
3,JDK的安装类似于解压---所有我们可以第一次安装之后将安装目录放在u盘中
到电脑上直接
开发工具和开发环境:
在开发环境满足的情况下,就要进行程序开发---学习开发工具
jdk提供的开发工具:
javac:java程序的编译工具
java:java程序字节码运行工具
javadoc:java程序生成帮助文档的工具
jar:java项目打包成jar包发布以后的启动执行工具
基本用法注意:
直接输入命令 ---显示他的帮助信息
命令- help 查看帮助信息
命令-version 查看JDK的版本
编写代码的工具:
文本工具----【记事本】
可视化智能编程(IDE)【不建议javase基础使用】可以一键运行程序,自动监测排版程序
eclipse【解压和安装--】---myeclipse【安装版本】
vscode【安装版本】
idea---收费
netbeas--oracle提供
使用记事本编写代码如何执行--使用dos命令---掌握一些常用的dos命令
1)help:查看dos中支持的命令列表
2)dir:查看当前目录下所有的内容【文件和文件夹】
3)cd系列命令:用于切换目录
cd+文件名: 进入当前目录下对应的文件夹
cd+文件夹绝对路径:进入到对应路径的目录
cd+文件夹1/文件夹2:进入多级目录
cd..:返回
cd/:返回当前磁盘的根目录
4)mkdir/md 文件夹名字:创建文件夹
5)盘符:---切换磁盘
6)清屏:cls
7)删除文件夹:rd 文件夹名
8)del 文件名:删除文件
del+文件夹名:删除文件夹下所有的文件
9)exit:关闭当前窗体
10)使用记事本创建和打开文件
notepad + 文件名.扩展名
如果文件存在就打开,不存在就创建一个新的。
特殊命令:
ipconfig 查看网络情况
ping:攻击命令--黑客入门命令
ping ip/域名 字节大小
netstat -nlp 查看端口占用情况
编写Java的第一个程序---打印helloword
1)java文件的要求
java程序的文件拓展名.java
2)java文件的命名要求和程序类名一致,并且构成文件名的每一个
单词首字母大写
3)创建java文件 HelloWord.java
4)编写java代码
java代码基础语法结构--类
语法:【固定写法】
public class 类名{
}
5)程序要想执行,需要有一个起点----入口函数--主函数
语法:【固定写法】
public static void main(string[]args){
执行业务代码
}
6)业务代码---输出语句--打印信息
System.out.println(内容);
7)编译java程序
原因:我们所写的java代码 我们认识但是java虚拟机不认识【只认识 0和1】
所以我们需要使用工具将我们java文件编程【0和1组成的字节码文件】
命令语法格式: javac java文件名.java
此命令会令我们的.java文件翻译成class文件
.class文件就是我们的字节码文件
8)执行字节码文件
使用命令:java 字节码文件名/类名
执行程序--得到结果
五.java第一个程序分析,编码规范,出现问题
1.分析java程序编写过程
1)执行过程
A 创建一个java文件
【扩展名.java】【文件名是英文并且构成名字的每一行单词首字母大写】
B 编写程序
程序规范
最外层:编写一个类
public class 文件名{
业务代码
}
代码运行入口:主函数
public static void main (String[]args){
}
输出语句:
System.out.println();
注意:
以上代码为java固定格式
所有的java代码都在英文环境下编写
根据我们学习的java语法--逐渐丰富业务代码
C:编写源程序代码jvm不能加载运行,
所以需要使用javac命令,将源代码【.java】编译成【.class】
语法:javac 文件名.java
D:得到的字节码文件【.class】 能够被jvm识别
---使用java命令加载字节码文件直接运行程序
语法:java 类名/字节码文件名
E:程序运行输出结果
总结:
java源文件【HelloWorld.java】--【javac命令变编译】
---java字节码文件【HelloWorld.class】---【java命令执行】--结果
2.编码习惯/编码规范
A:java代码严格区分大写小
B:固定代码不能乱改--照抄
C:所有的java代码都是在英文环境
D:各种括号需要成对出现---
E:层级关系分明,内部代码相对外部代码前面要有空格缩进【2-4空格】
F:在我没有让使用图形化工具之前--统一用notepad
3.问题:
A:编码问题--乱码问题
乱码的原因:
我们认识的【小王】------联系两者中介(字节)------电脑【0,1】
欧洲规范【iso8859-1】【一个中文---6字节】
定义标准【UTF-8】【一个中文---3个字节】
中文规范【GBK/GB312】【一个中文---2字节】
例如:
记事本写东西存储---【小王】---【UTF-8】---字节[AAABBB]
dos加载运行的时候---【GBK】---[AA][AB][BB]
解决办法:
之前统一编码--UTF-8
假如已经编码不统一了:
首先使用源编码工具正常打开
再次选中所有的内容--复制
到新编码工具内--粘贴--保存
B:报错问题
javac 去编译代码,如果没有报错--代码合理 没有语法错误
如果报错,会指出错误位置
C:JAVA编译和运行过程错误探索
字节码文件名就是类名
类名必须和文件名一致
可以不一致【定义类的时候前面的public去掉】
--当我们一个文件夹下面有多个java文件,我们全部编译了--无法知道
哪个【.class】所对应的【.java文件】
java语法知识【三个部分】
1基础语法【语言共性 八大语言基础】
关键字 标识符 注释 变量与常量 运算符 流程语句 数组 函数
2.核心语法---面向对象思想--程序编写的规则
面向对象的概念
类的构成
对象创建使用
关键字 static final this super
权限修饰符
包的定义--类的分类
类与类之间 关系
面向对象三大特征
抽象
接口--架构概念--面向接口编程
3. 案件AV高级技术 常用APL
常用类
异常机制
集合框架
IO流
多线程
网络通行
图形界面
反射和注释
java的基础语法【语言共性】
1.关键字
概念:语言开发者提供的具有特殊含义的单词或者字母
关键字所有的字母都是小写
使用:我们只要遵循它的要求语法使用就行,不要有非分之想
2.标识符
含义: 开发者自定义的已名称所用的单词或者字母
构成:26个英文字母大小写,数字,_和$
约束:
不能是关键字
不能以数字开头
严格控制大小写
使用的位置
类名:构成类名的每一个首字母大写
变量名:构成变量名的每一个单词都小写
函数/方法名:第一个单词全部小写其他单词首字母大写
常量名:全部大写
java基础语法知识
1.关键字
2.标识符
3.注释:
1)方便识别和梳理
2)注释的概念
注释说明代码块或者代码语句
3)有哪些注释
//注释内容 单行注释
/*注释内容*/ 多行注释
/**注释内容*/ 文档注释
4)//单行注释
作用:用于解释说明每一行代码语句
使用要求:每一行业务代码都需要加单行注释
5)/* 注释内容*/ 调试代码
6)/**文档注释*/ 文档注释【java特有】
帮助开发者将代码业务生产帮助文档提供被人使用
文档注释的位置:
java文件开头
类的定义上面
接口定义上面
方法/函数上面
常量上面
文档注释的内容
/**
* 需求:当前类或者接口或者方法干什么
* 分析:细化需求业务
* @author 程序编写人的姓名
* @date 编写的时间
* @version v.1.0.1
* 问题汇总:所有遇到问题以及解决方案写出来
文档注释的功能:
替代多行注释
将此类生成帮助文档--给别人使用
命令:javadoc java文件名.java【-d 生成内容存放置】
7)注释的特点
A:注释说明代码功能
B:良好的注释习惯有助于养成编程的感觉【代码是用来翻译我的想法】
C:注释不会参与编译--jvm最后运行的就是纯代码
D:文档注释或者生成类的帮助文档---高级技术中提供很专业的API
4.变量与常量 【数据的暂存和复用】
1)为什么需要
希望同一个数据能在不同的地方重复使用--程序中多个地方公用一个数据
需要一个地方暂时存放数据---有需要的时候就去获取---【内存】+【硬盘】
【内存存储】---临时性---
【硬盘存储】---持久性---
我们此时的数据共享是临时的--需要在内存中划分空间--
---java语言中--称数据存储空间
2)数据存储分类
固定值存储--常量
可变数据存储--变量
3)变量的概念:
内存中的一块固定临时存储空间
想在程序中使用空间--需要进行标识---
存储数据的类型-----变量类型---用于指定存储空间的大小和存储数据类型
存储数据空间的命名----变量名---用于获取数据
4)定义变量语法
A:变量的声明
语法: 变量类型 变量名
例如:int a;// 声明了一个整数变量
B:变量赋值
语法:变量名=新值;
C:变量声明+初始化赋值
语法:变量类型 变量名=初始值;
例如 int b=10;
5)变量类型的定义
基本类型【八个】
整数:
byte short
int long
小数:
float double
布尔:
boolean
字符:
char
引用数据类型【java核心业务类型】
类
接口【特殊类】
数组--
6)定义变量 演示变量定义和使用
定义整数变量--重复使用
7)变量定义及其使用的原理
8)变量类型为什么有八种
原因:Java的数据类型不仅仅指定了存储数据的类型,还限定了存储数据的大小
整数:byte 1字节 127--- -128 2
short 2字节
int 4字节
long 8字节
小数:
float 4字节
double 8字节
boolean 1字节固定值true或false
9)探索java变量类型中特点
所有数据类型是java中定义,不受操作系统的影响
数据类型的使用注意事项
问题1:
byte a=24
byte a1=a+1;//会出现【不兼容的类型;从int转换到byte可能会损失】
问题出现的原因:
A:运算的数据平等性【重点】
B:默认类型 所有整数字面量【参与变量运算】的时候默认为int类型
C:数据类型的转换
一种:强制转换/显示转化 显示标出
变量=(类型)运算表达式
一种:自动转换/隐式转换/类型提升 默认的 涉及到
byte-->short-->int-->long-->float-->double
char
10)默认类型:
当参与变量运算的时候对应字面量/常量数据类型--默认为默认类型
整数:默认类型 int
小数:默认类型double
11)类型转换 【很重要】
A:自动类型转化
按照图示从小到大
备注:char类型的变量值转换为int以及以上的类型运算的时候,char会以其ASCII码值
B:强制类型转化
byte >移动的位数 右移动,会把数据转化成二进制按照移动位置右边删除对应位
左边用0补齐字节长度
【重点】 ^特殊用法 加密解密传输数据 两个变量高效交换数据
A:加密和解密
原来数据
65 67 69 72 75
加密完的数据
77 72 72 68 74
6)三元运算符
语法:条件表达式 值1:值2
当条件表达表达式满足 返回值1结果
当条件表达表达式不满足 返回2结果
有点类似if-else语法
此运算符是有返回结果的;
7)流程控制语句【与javascri一模一样】
条件语句:if
A:语法
if(条件表达式){
满足条件执行语句
}
B:语句
if(条件表达式){
}else{
}
C:语句
if(条件表达式){
}else if{
}
......
else{
}
D:语句
if(条件表达式){
执行语句1;
if(条件语句2){
执行语句2
}
}
含义:
条件表达式1的运算结果为true的时候执行【执行语句1】
并且执行条件表达式2运算
【执行语句2】执行的要求是:
条件表达式1的运算结果是true并且 条件表达式2的运算结果也是true;
2)循环语句
A:语法1 for
for(初始条件计数器;判断条件表达式;计数器改变){
执行循环语句
}
B: while
C:循环do-while
三种循环之间的关系和特点
for循环是对while循环的简化 所以正常循环选择for
while适合做无限循环或者特殊用法【例如数据库结果集迭代】
for(;;){}或者for(;true;){}--无限循环
while(true){}.....无限循环--更加简便
do while无论条件是否满足至少执行一次
C:选择语句 switch
语法:
switch(参数值){
case值1:
参数值等于1执行语句;
break;
case值2:
参数值等于值2执行语句
break;
default:
以上都没有满足条件的执行语句
}
注意:
A:没有break的时候,当有case条件满足,下面的语句都执行
B:【参数值支持】的类型 byte short int char 枚举 string【JDK1.7】
4)两个关键字
break:结束距离他最近的外层循环
continue:结束本次循环,继续下一次循环