- Java基础
- 计算机概述
- 计算机组成
- 硬件
- 计算机组成
- 硬件是电器元件,比如:CPU,主板,显卡
-
- 软件
-
- 软件用于驱使硬件如何去工作
- 分类
• 系统软件
• 直接和硬件交互的软件,通常指windows,linux等操作系统
• 应用软件
• 运行在系统软件中,完成特定功能的软件
• 分类
• 产品软件
• 需求由软件公司制定,用户无条件接受软件功能,产品软件适合很多公司使用,通用性强,但无法定制一些公司特殊需求
• 项目软件
• 需求由客户提出,根据客户的需求,制作软件功能,项目软件是根据客户工作流程制定,没有通用性,但是可以定制公司特殊需求
-
- 程序
- 程序通常指完成某些事务的一种既定方式和过程
- 在计算机中,可以被计算机连续执行的指令集合称为计算机程序
- 计算机进制
- 二进制
- 八进制
- 十六进制
- 程序
- 如果余数大于9,以ABCDEF表示10到15
- 计算机语言
- 开发者通过计算机语言进行软件编写的,通过计算机语言,达到人机交互目的
- 分类
- 计算机语言
- 机器语言
• 全部由0和1组成,可以被硬件直接识别并直接运行,但是,阅读性和可维护性极差
- 汇编语言
• 以我们的助记符和一大段二进制码进行关联,以助记符来描述程序逻辑,执行时,需要将助记符还原成二进码,交由硬件执行
- 高级语言
• 面向操作系统编程,由操作系统管理内存和磁盘,开发者可以将重点放在逻辑现实上,而不是内存和磁盘管理上
• 翻译
• 操作系统并不能直接接受和执行用高级语言编写的源程序,源程序在输入操作系统时,通过“翻译程序”翻译成能被操作系统识别的二进制码,才能正确被操作系统识别
• 分类
• 编译
• 翻译源代码之后的文件,能被操作系统直接识别,直接运行
• 优点:执行速度快,缺点:不能跨平台使用,有安全性问题
• 解释
• 翻译源代码之后的文件,必须借助第三方应用程序,解释成能被操作系统识别和执行的二进制码
• 由第三方应用程序的参与,执行效率不如编译语言,但是可以通过更换第三方应用程序的解释器,让同一个应用程序可以在不同系统下运行,达到跨平台效果,同时可以在第三方应用程序中加入安全性处理,保证即使程序有BUG,也不会影响操作系统的的运行
-
- 算法
- 解决问题的步骤和方法
- 特点
- 算法
- 有穷性:一个算法必须执行有限个操作步骤后终止
- 确定性:算法中每一步含义必须是确切的,不可出现任何二义性
- 有效性:算法中的每一步操作都应该有效执行,一个不可执行的操作是无效的
- 有零个或多个输入:这里的输入指在算法开始之前所需要的初始数据
- 一个或多个输出:所谓输出是指得到算法执行的结果,在一个完整的算法中至少会有一个输出,如果没有结果输出,那么它将变得毫无意义
- Java语法基础
- Java的特点
- 简单
- 面向对象
- 跨平台
- 健壮性和安全性
- 多线程
- 垃圾回收
- Java语言的分类
- JavaSE:标准版(是企业版和微型版的基础)
- JavaEE:企业版
- JavaME:微型版
- JDK和JRE(jdk包含jre)
- JDK:称为Java开发工具集,包括编译环境,运行环境,调试环境,基础类库
- JRE:称为Java运行环境,包括虚拟机,核心类库,以及链接文件
- dos系统常用命令
- cd\ 进入当前盘符根目录
- 盘符名: 进入该盘符,比如:D:表示进入D盘
- cd 目录名 进入该盘符指定目录
- JDK环境变量
- 由于编译java源文件时,需要使用JDK安装目录中bin目录下的javac.exe文件。但是,如果每次都将源文件放在JDK/bin下,才能进行编译和运行,就很麻烦。为了在任何目录下。都能使用JDK编译和运行环境,所以需要配置环境变量。在环境变量,指定javac.exe文件所在的目录。这样,这样在其他目录中,如果没有javac命令,就会查找环境变量指定的路径。
- 配置步骤
- Java的特点
- 右键单击我的电脑---属性--高级系统设置---选中高级高级选项卡---单击“环境变量”---在系统变量中单击新建--变量名书写为“JAVA_HOME"变量值书写为JDK安装目录---选中”path“单击编辑--增加%JAVA_HOME%\bin
- 第一个java程序
- 编写源文件源文件必须以*.java为后缀
- 第一个java程序
- import javax.swing.*;
class One{
public static void main(String[] args){
System.out.println("***println是自动换行**");
//弹出输入框,用name接收用户输入的内容
String name = JOptionPane.showInputDialog(null,"请输入名字:");
//弹出消息对话框,显示内容
JOptionPane.showMessageDialog(null,"您好,"+name);
}
}-
- 编写源文件时,必须定义类,在类中定义main方法,这是程序的入口点
- 如何编译
-
- javac 文件名.java
- 一个文件中,可以定义多个类,编译后,每个类都会生成class文件
-
- 运行
-
- java 类名
-
- 如果一个类声明为public,要求文件名与类名必须一致,否则,无法通过编译
- 虚拟机工作流程
- 编程源文件”*.java-----通过javac,将源文件编译成*.class---类加载----字节码校验---解释器----操作系统“
- 类加载的含义,虚拟机在执行类的内容之前,需要读取该类内容,开发者自定义的类中,可能会用到核心类库中的类,也可能用到第三方类库,所以,加载类时,不仅需要加载自定义类,而且核心类库和第三方类库都应该加载
- 加载顺序
-
- 先加载基础类库和核心类库,在加载第三方类库,最后加载开发者自定义类库
- 标识符
- 凡是可以命名的地方都叫标识符,通常使用标识符命名类,方法,变量等
- 标识符命名规则
- 标识符
- 必须以字母,数字,下划线,$组成
- 不能以数字开头
- 区分大小写
-
- 命名规范
-
- 1.见名知意
- 2.类名以大写字母开始,采用驼峰命名法
- 3.方法名,变量名以小写字母开始,采用驼峰命名法
- 4.常量字母全部大小
-
- 分类
-
- 1.系统标识符
• Java语言内置标识符,具有特殊意义
- 2.用户标识符
• 开发者自定义的类名,方法名,变量名等,注意用户标识符不能与系统标识符同名
-
- 注释
- 注释是编译程序中,给一段代码说明性文字,注释对程序运行没有影响,,编译自动丢弃,其主要作用是增加代码可阅读性
- 分类
- 注释
- // :单行注释
- /* */ :多行注释
- /** */:文档注释
- 变量
- 变量是一个命名的内存空间,空间的内容会随着业务需要发生变化,通过用新数据替换老数据,达到内存空间重用的目的
- 变量三要素
- 变量
- 1.数据类型
- 2.变量名
- 3.变量值
-
- 分类
-
- 基本数据类型
• 整型
• byte:字节型 占1个字节 取值-128-127
• 一个字节占8位二进制码,1k=1024字节,1M=1024k,1G=1024M,1T=1024G
• short:短整型 占2字节
• int :整型 占4字节
• long:长整型 占8字节
• 浮点型
• float:单精度浮点型占4个字节
• double:双精度浮点型占8字节
• 字符型
• char:占2个字节
• 字符型以整型方式存放,采用unicode编码,允许存放一个中文字,一个字符型数据中只能存放一个字符
• ’A‘--65 ’a'--97
• 字符数据可以做算法运算,运算时,将字符串ASC码进行运算
• 布尔型
• boolean:
• 取值只有true和false,表示条件是否成立
• 将字符串转化为int
• int a= Integer.parseInt(s);
• 将字符串转化为double
• double a = Double.parseDouble(s);
- 引用数据类型
- 类型转换
- 自动类型转换
- 类型转换
- 自动类型转换,发生不同类型数据之间进行运算时,小类型数据自动转换为大类型数据
- 浮点常量默认为double,不能直接赋给float, float=3.5f;
- 整型和整型运算,结果至少是int,无论是byte+byte,short+short,byte+short结果都是Int类型
- float类型容量大于long类型
-
- 强制类型转换
-
- 一般发生在大类型转化为小类型,可能会损失精度
- 语法
• int k=(int)3.5;
- boolean不能转化为任何类型
-
- 注意:变量没有赋值时,是不能使用的
- 常量
- 常量也是内存中命名的内存空间,空间的内容在运行期间不能发生变化
- 分类
-
- 字面常量
• 8----整型常量
• ‘A’----字符常量
• ”abc“----字符串常量
- 符号常量
• final int PRICE=5;
- 定义符号常量的意义:
• 1.可以在运算时,引入业务名称
• 2.可做到一改全改
- 运算符
- 算术运算符:+,-,*,/,%
- %表示取模运算,把两个数相除取余数
- ++运算符
- 算术运算符:+,-,*,/,%
- 后置++,先运算,运算完成后,再将变量加一
• int y = x++;//y=x,x=x+1
- 前置++,先将变量加一,然后再做运算
• int z = ++x;//x=x+1,z=x
-
- 关系运算符:>.>=,<,<=,==,!=
- ==比较两个数是否相等,如果相等满足条件
- !=比较两个数是否相等,如果不相等满足条件
- 关系运算符,计算的结果是boolean值
- =和==的区别
- 关系运算符:>.>=,<,<=,==,!=
- =是赋值语句,将等号右边的内容赋值给左边的变量
- ==是比较运算符,比较两个数是否相等,结果是boolean值
- 逻辑运算符:&&,,!
- 逻辑运算符,操作数必须是Boolean值
- &&并且表示两个条件都满足,结果才为true,有一个条件不满足,为false
- 逻辑运算符:&&,,!
- &&为短路运算符,当第一个条件为false时,不在执行第二个条件判断
-
- 表示两个条件满足,结果都为true,只有两条件都不满足,为false
- !,非运算符,表示将true变为false,将false变为true,
- 三目运算符
- c?a:b
-
- ?之前c,为boolean表达式,表达式true时,将a的值返回;为false时,将b返回
- 扩展赋值运算符
- +=,-=,*=,/=
- int y=8;
y+=1.2;//y=(int)(y+1.2);结果为9
- 扩展赋值运算符
-
- 运算符优先级由高到低
- 括号,点,分号
* 一元运算符(操作数只有一个):++,--,!,(类型强转)
* 算术运算符:+,-,*,/,%
* 关系运算符:>,<,>=,<=,==,!=
* 逻辑运算符:&&,<w:br/> * 赋值运算符:=,+=,-=,*=,/= - 算术运算符中,*,/,%优先级高于+,-,逻辑运算符中,&&高于
- 后置++和--优先级比赋值运算符还低
- 括号,点,分号
- 运算符优先级由高到低
- 选择结构
- 单分支
- 当条件满足,执行某个操作
- 单分支
- if(条件){执行语句}
- 双分支
- 当条件满足,执行某个操作,不满足执行另一个操作
- 双分支
- if(条件){执行语句}else{执行语句}
-
- 注意,else必须与if连用
- 多分支
- 当条件满足,执行某个操作,如果不满足,继续判断第二个条件是否满足...
-
- if(条件){执行语句}else if{执行语句}else{执行语句}
- if.....else if f和多个if的区别
- if...else if是一条多分支语句,只执行其中一个分支,,当一个分支满足时,执行该分支,,其余的分支不执行
- 多个if是多条单分支语句,每个if条件都会判断,只要满足都会执行
- switch
- switch是一种多分支语句,功能和if...else类似,相比if..else而言,switch语句结构更加清晰,但是,switch只能对表达式的结果做常量判断,不能象if一样判断范围
- 语法
- if.....else if f和多个if的区别
- switch (x){
case 1:
System.out.println("x=1");
break;
.......
default:
System.out.println("都不匹配");
break;
}-
- 执行顺序
-
- 从第一个匹配表达式的case块执行,顺序执行,遇到第一个break,跳出switch判断
-
- switch用于判断的表达式,取值必须为byte,short,int,char,String(JDK1.8)
-
- 循环结构
- 在程序中,需要反复执行某个动作,直到循环条件不满足为止
- 分类
- while循环
- int a=1;
// //小和尚
// int b=99;
// while (a*3+b/3!=100){
// a++;
// b--;
// }
// System.out.println("大和尚"+a+"个,小和尚"+b+"个");-
- for循环
-
- int sum= 0;
// for (int i= 0;i<=100;i++){
// sum +=i;
// }
// System.out.println(sum); - for中的三段都可以省略,但必须由两个分号
• //初始化
int i = 0;
for (;;){
if (i<=10){//条件判断满足,执行循环
//循环体
System.out.println(i);
}else {
//条件不满足,退出循环体
break;
}
//变量变更
i++;
}
-
-
- do...while循环
-
- int x = 1;
do {
System.out.println(x);
}while (x>100);- while和for,都是先做条件判断,当满足条件时,执行循环,所以,,while和for循环,循环体有可能一次都不执行。
do..while循环,是先执行循环体,再进行判断,所以,do..while循环,至少执行一次 - break
- 提前结束当前循环
- continue
- 结束本次循环,进入下一次循环
- 嵌套循环
- 在一个循环中,再写一个循环,称为嵌套循环,执行一次外循环,会完成整个内循环的执行,循环次数:外循环次数*内循环次数
- 语法
- while和for,都是先做条件判断,当满足条件时,执行循环,所以,,while和for循环,循环体有可能一次都不执行。
- //99乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(i + "*" + j + "=" + i * j + " ");
}
System.out.println();
}
- 数组
- 数组是一段连续的内存空间,使用数组可以减少CPU搜索内存中变量的时间
- 特点
- 1.数组是一段连续内存空间,通过下标查找数组元素,下标从0开始,最大下标为长度-1
- 2.数组变量中,存放的是连续空间的首地址,属于引用数据类型
- 3.数组元素都是变量,变量的类型是声明数组的数据类型
- 4.数组元素创建后,每个元素都会初始化。
int----0 double---0.0 引用类型---null - 5.数组创建后,长度不能变化
- 数组定义
- 创建长度为5的数组,用arry存放数组首地址
int[] array = new int[5];
//将下标为1的元素赋值为5
array[1] = 5;
将下标为0的元素赋值为5
array[0] = 6;
一个一个的赋值 - 创建具有初始数据的数组,数组长度由初始数据个数决定
// int[] array={1,2,3,4,5}; - 该方式和第二种定义数组的方式类似,也是定义数组时,完成数组元素的初始化,数组长度由初始数据个数决定
int[] array =new int[]{1,2,3,4};
array = new int[]{1,2};
array = {1,2,3};这是不允许的
- 创建长度为5的数组,用arry存放数组首地址
- 如果在访问数组元素时引用了非法下标(下标为负数,或大于或等于数组长度),就会抛出java.lang.ArrayIndexOutOfBoundsException
数组下标越界异常 - 字符串和字符数组的相互转换
- 字符串转为字符数组
- String s = "aasdas";
//得到字符串对应的数组
char[] charArray = s.toCharArray();-
- 字符数组转为字符串
-
- //将加密后的字符数组,变为字符串
char[] charArray={"a","b","c"};
String newStr = new String(charArray);- main方法参数
- 在执行java类时,java 类名 aa bb cc
- aa,bb,cc就会做为mian方法参数String数组的元素存在
- 可变长数组
- 可变长数组只能做为方法的参数存在,表示在对可变长数组赋值时,可以传递任意个数的参数,这些参数会做为可变长数组的元素
- 调用方法
- main方法参数
- test(new String[]{"awe","wer","aewt"});
- test("asef","fAFE","AF");
-
- 可变长数组只能是方法的最后一个参数
- 二维数组
- 二维数组可以看做多个一维数组进行叠加,一维数组可以看做一条线,二维数组可以看做是一个表格,通过横坐标加纵坐标访问数组元素
- 定义
-
- //定义两行三列的二维数组
int[][] array = new int[2][3];
//利用横下标+纵下标访问
array[0][1] = 2;第一个[]代表第几行
array[1][0] = 3;
for (int i=0;i<2;i++){
for (int j=0;j<3;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}-
- 二维数组长度为横坐标元素个数,new int[2][3]的长度为2
- 二维数组可以看做多个一维数组,每个一维数组长度可以不一致
-
- int[][] array={{1,2,3},{2,3},{4,5,6,7,8}};
for (int i=0;i<array.length;i++){
for (int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
- 方法
- 计算机编程时常常将问题划分成称为“方法”模块,每个方法实现一项非常专一的功能,然后就可以根据所书写的方法构建程序
- 方法作用
- 1.分而治之
- 2.代码的复用
- 方法执行顺序
- 在调用方法时,执行方法中的内容,执行完毕后,回到调用方法处
- 方法的形参和实参
- 方法通过形参增加代码灵活性和通用性
- 形参是方法中的局部变量,其作用是接受实参的值
- 实参就是在调用方法时,如何给形参变量赋值,实参可以是变量,可以是常量,而形参只能是变量
- 形参和实参之间,要保证:类型一致,个数一致,顺序一致
- 变量作用域
- 变量的作用域指,该变量在什么范围内能够使用,也叫变量的作用范围
- 变量的有效作用范围,定义该变量{}以内
- 方法的返回类型和返回值
- 方法的返回类型,是指执行该方法后,能得到什么样的数据,一旦一个方法有返回类型,那么在任何时候都必须 有值返回,如果该方法没有返回类型,以void表示
- 方法返回值,表示执行该方法后,返回具体的值,在方法中,用return关键字,结束方法,并返回方法的返回值
语法:return 返回值
如果该方法声明为void,那么,return不能跟返回值
- return和break区别
- 1.break只能在循环语句和switch判断中使用,而return可以在方法的任何地方使用
- 2.break表示结束循环或switch判断,循环和switch判断结束后,继续执行后面的代码,而return是结束方法的执行,return以后,该方法中其余的代码不再执行
- 全局变量
- 在方法外,类里面定义的变量称为全局变量,全局变量在每个方法中都可以使用,每个方法共享全局变量
- 语法
- public class Test{
public static int x=2;
.....
}- 递归
- 递归是一种特殊的循环,在方法中,再调用本方法,,使用递归时,需要注意,必须在有限步骤内,停止递归的调用,否则就是死循环
- 递归
- String isContinue=JOptionPane.showInputDialog(null,"是否继续y/n?");
if (isContinue.equalsIgnoreCase("y")){//忽略大小写比较是否相等
addEmployess();
}- 方法重载
- 方法重载发生在同一个类中,两个方法的方法名相同,参数列表不同(参数类型,参数个数,参数顺序),在调用方法时,通过实参来决定调用那个重载方法
- 方法重载,方法名和方法参数的类型会参与编译,而方法参数的名称和方法返回类型不会参与编译,所以,方法重载和方法返回类型,以及方法参数名无关
- public static void look(){
System.out.println("看");
}
public static void look(String s){
System.out.println("看动漫"+s);
}
public static int look(String s){//不是重载方法,和look(String s)都编译成look_String,编译器无法区分
}
- 方法重载