一、Java语言的历史
1991年为Oak主要是做电子型嵌入式产品,从1995年IE浏览器的出现成就了Oak------Java。
1.1、Java 语言的体系
JavaSE:java语言的一些基本语法和用法,应用于PC端、客户端程序;
JavaEE:也叫Web或者J2EE,应用于web浏览器应用级的项目,如:OA、SAAS、ERP等等;
JavaME:塞班系统的应用、Android系统的问世
另外,大数据相关领域 hadoop的源码是java;Spark的源码是scala;Python用于人工智能、爬虫、数据分析等。
1.2、java语言的特点
跨平台:
为什么可以跨平台:
JVM(Java Virtual Machine):java虚拟机
不同的平台上就会有不同的java虚拟机,则导致java语言是一个可以跨平台运行的语言
所以
java是一个跨平台的语言
JVM是一个跨语言的平台
1.3java的环境安装
1.jdk安装
jdk(java development kit):JAVA的开发工具包
jdk-------java的开发工具
jre(java RunTime environment):java的运行时环境
安装流程
Jre的安装
2.Jre 企业人员电脑中就只安装jre
1.4、JDK文件夹
bin:java的应用指令
db:database数据包
include:c语言所编写的文件
lib:java的第三方工具包
src.zip是jdk1.8版本的源代码包
1.5如何检验Java的工具包安装成功
检验java的版本 java - version
检验java命令------bin目录下java.exe
检验javac指令是否可以正常使用
1.6环境变量的设置
在我的电脑----属性----高级系统设置----环境变量
变量名称:JAVA_HOME
变量值:jdk的安装目录
C:\Program Files\Java\jdk1.8.0_171
变量名称:path
变量值:jdk安装目录下的bin目录
C:\Program Files\Java\jdk1.8.0_171\bin
变量名称:class_path
变量值:./jdk安装目录下lib目录中的 dt.jar/tools.jar
C:\Program Files\Java\jdk1.8.0_171\lib\dt.jar;
C:\Program Files\Java\jdk1.8.0_171\lib\tools.jar
最后去检验一下三个指令是否都生效,如果生效则java的环境变量配置 成功。
1.7、第一个java程序
编写代码:
public class HelloWorld{
public static void main(String [] args){
System.out.println("Hello Java");
}
}
通过cmd进行黑窗口 要先编译在执行
编译指令使用javac HelloWorld.java
使用java指令执行class文件
注意:以.java结尾的叫做源代码文件;以.class结尾的文件叫做字节码文件
1.8、JVM运行原理
可以使用sublime-text打开x.class文件,如:
IDEA打开 正常建立工程
在file选项下选择 setting选项 Plugings选项
在BinEd插件 安装插件 插件安装好之后
选择File选项open as Binary
JVM在底层执行的class文件都是二进制文件
Class的文件结构:cafe babe magic:魔数,java的class文件的标识
1.9、代码分析
//访问修饰符 类关键字 类名
public class HelloWorld {
// 主函数 主方法 -----整个程序的入口
// 4要素 1-public 2 static 3 void 4 方法名称必须叫main
public static void main(String [] args){
// 打印语句
//类.属性.方法 带()都叫方法
System.out.println("Hello Java");
}
}
二、Java语言的常用规范
2.1 类的命名规范
1.不要使用中文 韩文 日文 等 当作类名
2.首字母大写 ----望文生义 驼峰标识 DianHuaben TelephoneNote
3.不要使用关键字
4.不能使用数字开头,但可以使用数字结尾
5.不能使用除了下划线和$ 以外的特殊字符
尽量不要使用Java类库中已经存在的类名,如果使用了的话,要注意导包问题。
注意:类名一般和文件名相同
2.2 注释
如何使用Eclipse创建工程
// 单行注释 用于解释说明一行代码的作用
/*
* 多行注释 用于解释说明多行代码的作用
*/
/**
* 文档注释 用于解释说明文档、方法中的某些属性的作用 用于描述类的作者 和创作时间
* @author CHQ
* @since 2021.5.20
* @param args
* @return 返回值
* @throws 抛出异常
*
*/
2.3 包的创建
关键字 package 一般命名规范是公司域名的反写,包的主要作用就是为了在不同文件夹下存在相同的文件名称。
2.4 如何创建类
右键单击建立的包,选择new选择建立class文件,一般类名首字母大写
2.5 换行 和 制表位
换行\n println() print() 区别在于换行
制表位\t 相当于按一次Tab按键
\ 叫转义字符 一般打印双引号和\时 都需要用到它。
2.6 扫描器Scanner
键盘输入功能:
package com.openlab.test;
import java.util.Scanner;
public class HelloWorld {
// 单行注释 用于解释说明一行代码的作用
/*
* 多行注释 用于解释说明多行代码的作用
*/
/**
* 文档注释 用于解释说明文档、方法中的某些属性的作用 用于描述类的作者 和创作时间
* @author CHQ
* @since 2021.5.20
* @param args
* @return 返回值
* @throws 抛出异常
*
*/
public static void main(String[] args) {
System.out.println("请输入您的角色名:");
Scanner input = new Scanner(System.in);
String key = input.nextLine();
System.out.println(key);
// System.out.print("Hello World");
// System.out.println("Hello Java");
}
}
2.7 方法
注意的问题:静态方法中不能直接调用非静态方法 要通过对象的创建才能够调用
方法:返回类型 基本数据类型 引用数据类型 —void 关键字
如果是void则无返回数据
如果不是void 则需要返回相应数据类型的 值或者是变量。
方法的名称: 决定着要调用的方法名字
参数 不同的参数会决定着调用不同的方法
三、 数据类型
Java强类型的语言 对数据类型有明确的标准和用法,并且各个数据类型之间能够进行转换
3.1基本数据类型
数值
整型
byte 字节型 取值范围 -128~127 占8个bit (00000001) 一个字节 默认值为0
short 短整型 取值范围 -32768~32767 占16个bit 两个字节 默认值为0
int 整型 取值范围 -22的31次方 到22的31次方-1 占 32个bit四个字节,默认值为0.
Long 长整型 取值范围-22的63次方 到22的63次方-1 占64个bit 八个字节,默认值为0L 大写的L标识的long类型的标识。
**浮点型**
**float** 单精度 取值范围 1.4E-45~4.4028235E38 占32个bit 四个字节 默认值为0.0f
**double** 双精度 取值范围4.9E-324~1.7976931348623157E308 占64个bit 八个字节 默认值为0.0
注意:我们在编译器中所看到的数字如果是整数默认为int类型,如果是浮点数 默认为double类型
非数值
字符型 char 标识是单引号 用于表示单个字符 会存在数字 字母 特殊符号 以及文字 占16个bit 2个字节 取值范围:0x0000~0xffff 默认值是0x0000;
0 -----48
A -----65 大小写转换±32
a -----97
**布尔类型** boolean true false 占8个bit 1个字节
面试题: String 是不是基本数据类型 如果不是基本数据类型有哪些?
String 是字符串类型 -----引用数据类型 不是基本数据类型
3.2什么是变量?
一般情况下指的程序中需要计算的数据通过开辟内存空间而存储的数据,这个数据是通过某种媒介来进行访问 用来存储数据的媒介叫变量。
关于变量的声明和定义
数据类型 变量 = 值; 定义
数据类型 变量; 声明
什么叫成员变量
在类的里面方法的外面的变量叫成员变量 成员变量存储在堆空间中 heap
不会随着方法的结束而消失
什么叫局部变量
在方法的里面所定义的变量叫局部变量 局部变量存储在栈空间中 stack
会随着方法的消失而消失 局部变量不能用static关键字修饰 局部变量的值是由栈空间来创建的。
3.3数据类型的转换
基本数据类型的转换
数字:
byte -short -int -long
float double
自动转换:
小类型转大类型自动转换
强制转换:
大类型转换成小类型 强制转换
非数字
byte --char-- boolean
布尔类型不能和任何类型互相转换
因为byte类型属于整型 可以和支持ascii码的char类型互相转换。
3.4 复合数据类型----引用数据类型
非基本数据类型都是引用数据类型。
3.5 变量的命名规范
和类的命名规范类似 唯独不同的是 变量的首字母小写
在同一作用域内 不能出现两个相同命名的变量
四、 运算符
4.1 算数运算符
“+ - * / %”
% 求余
10%3 = 1
7%5 ----2
7%-5 ----(2)
-7%5 ----(-2)
-7%-5 ----(-2)
总结 :求余时 负号跟着被除数走。
4.2 递增、递减
++ –
++放前面 先+1 再取值
++放后面 先取值 再+1;
4.3 逻辑运算符
& 逻辑与 a&b 表达式a或b中有一个为false 则为false
&& 短路与 a为false b则不参与运算 常用
| 逻辑或 a|b 表达式a或b中有一个为true 则为true
|| 短路或 a为true 则b不参与运算 常用
^ 逻辑异或 a|b 表达式a与表达式b两者的值相同 则为fasle 不同为true
! 逻辑非 取反
逻辑运算符的返回值是boolean类型
4.4 赋值运算符
= 运算顺序是从右至左 int a = 0;
+= a+=1 ----a = a+1;
-=
*=
/=
4.5 关系运算符
> >= 大于 大于等于
< <= 小于 小于等于
== 恒等 用于判定两个基本数据类型的值是否相同
!= 不等
4.6 三目运算符
X?Y:Z
表达式X的值如果为true 则执行表达式Y 如果为false 则执行表达式Z
可以用于替代if选择分支语句结构。
equals方法用于比较两个String是否相同。。。。且该方法来自于String类中的equals
4.7 位运算和移位运算
运算结果 ----数字
位运算和移位运算都要在二进制的基础之上运算
&
按位与 两位都为1时结果才为1 有一个位0都落0
|
按位或 一个位1都为1
^
按位异或
两位相同为0 相异为1
>> 右移
各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
<< 左移
左移特点 数字越变越大,移位是多少就是乘以2的多少次幂 左移时不分正负
如果是整数 正常补0
如果是负数 则用整数的补码进行运算
>>> 无符号右移
逻辑右移 不会因为符号位进行 所有高位均补0。
五、 流程控制
- 按照代码执行顺序来进行执行 ----顺序执行
- 选择分支 if -else switch
- 循环结构 while do-while for
5.1 选择分支if
if(x == 0){
System.out.println("yes");
if(x == 1){
System.out.println("yes1");
}
}else if(x==1){
System.out.println("no");
}
5.2 白盒测试 Junit 单元测试
用于测试代码逻辑是否有错误
鼠标右键点击 JunitTestcase
练习:
package com.openlab.test;
public class Pet {
//宠物本身的属性
public static final String NORMAL="一般";
public static final String COMBAT="格斗系";
public static final String FLY="飞行系";
public static final String POISON="毒系";
public static final String STONE="岩石系";
public static final String GROUND="地系";
public static final String WORMS="虫系";
public static final String GHOST="幽灵系";
public static final String STEEL="钢系";
public static final String FIRE="火系";
public static final String WATER="水系";
public static final String Shit="草系";
public static final String Electricity="电系";
public static final String Superpowers="超能系";
public static final String Ice="冰系";
public static final String Dragons="龙系";
public static final String Ugh="恶系";
public static final String Elves="精灵系";
// 伤害的倍数
public static final int ZERO=0;//0
public static final int HALF=1;//ban
public static final int NORMAL_HURT=2;//1
public static final int DOUBLE_HURT=4;//2
/**
*
* @param skillType 技能的属性
* @param petType 宠物的自身属性
* @return
*
* 写方法
*
*/
public int checkTypeToHurt(String skillType,String petType){
//当技能属性为一般时
// 在写判断的时候注意为了避免空指针的情况出现所以一般常量在前
if(Skill.NORMAL.equals(skillType)){
// 确定宠物属性
if(Pet.GHOST.equals(petType)){
return Pet.ZERO;
}else if(Pet.STONE.equals(petType)||Pet.STEEL.equals(petType)){
return Pet.HALF;
}else{
return Pet.NORMAL_HURT;
}
//其他属性同理做判断
}
return 0;
}
}
TestCase
package com.openlab.testone;
import org.junit.Test;
import com.openlab.test.Pet;
import junit.framework.TestCase;
public class PetTest {
//@Test 测试注解
@Test
public void checkTypeToHurtTest1() {
Pet p = new Pet();
int bRet = p.checkTypeToHurt("一般", "幽灵系");
// bRet ---实际值
// 设计书中的0 Pet.ZERO ---期望值
TestCase.assertEquals(Pet.ZERO, bRet);
}
@Test
public void checkTypeToHurtTest2() {
Pet p = new Pet();
int bRet = p.checkTypeToHurt("一般", "岩石系");
// bRet ---实际值
// 设计书中的0 Pet.ZERO ---期望值
TestCase.assertEquals(Pet.HALF, bRet);
}
}
5.3 Switch语句
在等值判断的情况下会经常使用switch语句
浮点类型的数据不适合做等值判断 ,原因是判断的条件难以精确
Break关键 在swtich语句中用于跳出switch的case。
一般范围性的判断使用if语句 如果是等值类型的判断使用哪个都可以。
5.4 循环 while结构
5.5 循环 do-while 结构
5.6 for循环
代码执行顺序:2134
5.7 break 和continue
break 跳出循环体
continue 跳出本层循环