Java语言的发展史: 詹姆斯.高斯林(James gossling)SUN-(Stanford University Network 斯坦福大学网络公司) 1995年5月23号,Java语言诞生。 1996年1月--1997年2月 JDK1.0-JDK1.1 1998年12月JDK 1.2(将Java分成了J2SE . J2EE . J2ME) 2000年5月—2002年月J2SE1.3-J2SE1.4 2004年10月JDK1.5(改名JavaSE5.0,JavaSE , JavaME) 2006年12月JavaSE6.0 2009年4月20日.甲骨文(Oracle)74亿美元收购sun。 2011年7月 JavaSE7.0 2014年3月 JavaSE8.0 Java语言平台版本: JavaSE:Standard Edition标准版本,开发桌面软件 JavaMe:Micro Edition 嵌入式版本,开发机顶盒,手机等,嵌入设备的程序。 JavaEE: Enterprise Edition 企业版本开发服务器程序。 JAVA是跨平台的编程言 平台;操作系统(winds linux mac) 跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行。 跨平台的原理;Java在不同的操作系统中有不同的JVM(Java虚拟机)实现跨屏台。 “注释”:类似于游戏机模拟器,让相同的游戏在winds,手机上都可以玩。 JVM: Java Virtual Machine, Java虚拟机,Java实现的虚拟的计算机,在不同的操作系统中模拟出相同的运行环境。 JRE:Runtime Environment,Java运行时环境。包括Jvm虚拟机和java 核心类库。 是运行java程序的最小环境。 JDK:Java Development kit java开发工具包 包括jre 和Java开发工具(javac等) JVM. JRE JDK;的关系是 JVM<JRE<JDK 注意几点: Java是区分字母大小写的,例如 hello和Hello是不一样的。 标点符号只能用半角英文符号。 单行语句以分号 ; 结尾。 注意: 类名的每个单词的首字母要大写文件名要和类名相同。 注是概述和分类 注释: 用于解释说明程序的文字 相当与备注,只是为了帮助程序员理解代码或者做说明,并不是代码。 注释的种类: 单行注释:// 注释的内容。 多行注释: /* 注释的内容*/ 文档注释:/**文档注释的内容*/,用于生成文档 注意:多行注释 文档注释都不能嵌套使用 《扩展所有程序的执行都是从main方法开始的》 关键字的概述和特点 关键字;被Java语言赋予特殊用途的单词。 特点:组成关键字 的字母全都是小写;常见的代码编辑器对关键字都是有颜色高亮。 常量的概述和分类 常量:在程序执行过程中,其值不可以发成改变的量 常量的分类 字符串常量:“hello”或者“你好” 字符常量:‘a’或者‘A’ 字符常量与字符串常量的区分是 字符常量是单引号标识 而字符串常量是双引号的标识 整数常量:12或者235或者789 小数常量:13.3或者45.6或者89.8 布尔常量: true false 空场量:null 变量的概述和定义格式 变量:是内存中的一小块区域,保存着一个值,在程序的执行过程中其值可以在一定的范围内发生改变。 A:对区域有限定:如何来限定呢?用数据类型来限定。 B:必须对区域给一个变量名。 C:区域内必须有内容:初始化值。 定义格式: 数据类型 变量名 = 初始化值: 计算机存储单元的概述 变量是内存中的小容器用来存储数据的 计算机存储设备的最小信息单元叫“位”(bit)称之为比特位,通常用小写字母b来表示,而计算机最小储存单元叫“节(byte)”通常用大写的字母B来表示 字节是由连续的8个位组成的 1B(字节)=1024B 1KB=1024KB 1MB=1024MB 1GB=1024GB 1TB =1024GB 1PB=1024TB 数据类型概述和分类 Java是一种强类型语言,针对每一种数据必须给出明确的数据类型 数据类型又分为; 基本数据类型 引用数据类型(类 数组 接口) 不同的数据类型也分配了不同的内存空间,所以他们表示的数据大小也是不一样的。 基本数据类型分为 4类8种 (所占用的字节数不同) A:整数 数据类型 byte(1个字节)short(2字节)int(4个字节) long(8个字节) B:浮点数 数据类型 float (4个字节) double(8个字节) C:字符 数据类型 char(2个字节) D: 布尔 数据类型 Boolean (1个字节) 注意 在Java程序中默认的int整数类型123,浮点数默认double123..4 所以定义long数据类型的时候要加大写的L或者小写的l建议使用L 定义float数据类型的时候要加大写的F或者小写的f建议使用F 定义double类型的时候可以选择性的加D也可以不加。 标识符的组成和注意事项 标识符:就是用来给 类 包 方法 变量等起名字的符号 组成规则; unicode字符 A:数字字符 英文大小写字符 汉字字符(不建议使用) B:下划线—C:美元符$ 注意事项 :不能以数字开头 不能时Java中的关键字 定义变量的格式; 数据类型 变量名 = 初始化值 标识符的常见命名规则 基本要求:见名知意 看到就明白是什么意思。 A:包名的要求:(什么是包?就是文件夹)用于对类进行分类管理的{全部小写多级包用 点 (符号 . “点” ) 隔开} 例如: com . if . makr B:类名的要求:每个单词的首字母都是大写的。类如 Demo :HelloWord!。 C:方法名的要求; 第一个单词字母全小写从第二个单词开始首字母大写 例如:main(); ifMain(); D;变量名的要求:第一个单词字母全小写从第二个单词开始首字母大写 例如:main(); ifMain(); 基本数据类型变量的定义和使用类型 变量定义的注意事项:A:变量未赋值时不能使用。 B:变量只在它声明时所属的范围内有效(也就是所属的大括号 ) C;一行上可以定义多个变量,但是不建议这样做。 类型转换----隐式转换 类型转换:一种数据类型转换为另一种类型 类型转换的种类A;隐式转换(自动转换) 类型按照容量由小到大可以进行类型转换{转换规则:byte àshort char àint àlong àfloat-àdouble} B:强制转换:不考虑类型的大小关系强制类型转换可能会引发问题 强至转换的格式:目标类型 变量名 =(目标类型)(被转换的变量或表达式); 示例; long b =10L 强制转换成 int类型 int i =(int) b 输出(i)即可。 建议:数据做运算 结果应是什么类型就用什么类型接收,不要随意转换类型,否则会损失精度。 Eclipse的概述 Eclipse是一个IDE(集成开发环境) 集成了代码编写功能,分析功能,编译功能,调试功能等一体化的开发软件 Eclips的特点:免费 纯Java语言编写 免费安装 扩展性强。 运算符:对常量和变量进行操作的符号称为运算符 表达式:用运算符把常量或者变量连接起来的符号Java语法的式子就可以称为表达式,不同的运算符连接起来的式子体现的是不同类型的表达式。 常用的运算符:A:算术运算符 B;赋值运算符;C关系运算符;D逻辑运算符E:三元运算符。 A:算术运算符:“+”,“---”,“*”,“/”,“%”,“++”,“-- --” ++ 自增1 ; -- -- 自减1 注意:整数相除只能得到整数,有小数参与运算才能得到小数, 如 10/3=3, 10.0/3=3.3333333 算数运算符 取余 和除法的区别? A:取余 (%)两数相除后的余数,5%3 = 2,B:除法(/)两数相除后的商 5/3 = 1 字符和字符串参与加法: 字符参与加法运算:其实就是拿字符在计算机中存储的数据值参与运算。 A:’A’= 65 ; ‘a’ = 97 ; ‘0’=48 ; 注意:char类型在算数运算时按照数值来计算; {如果打印的是char类型,则打印出来的是数值所代表的字符,而不是数值,如果打印的是char 和数字计算的结果,因为运算会有隐式类型转换,所以最终打印的是数字。} 例如:System.out.println(‘A’); //打印字符A;System.out.println(‘A’+10)//打印75,因为最终计算结果是intl类型,65+10=75. 字符串参加加法(拼接)其实不做加法运算而是拼接运算。 算数运算符++ 和-- ---的用法 ++:自增 用于对变量加一;-- -- :自减 用于对变量减一; 运算符放在变量前和变量后的区别:A:单独使用时(既只有 i++或++i),没有区别都是自增, A:int a = i++;先使用i本身的值作为i++表达式的值,然后i再自增(i自增后不影响之前i++ 表达式的值)最后将等号右边的值赋值给左边的a。 B:int a = ++i: i先自增,然后将自增后的值作为表达式的值最后将等号右边的值赋值给左边 {-- -- 同理} 赋值运算符:基本的赋值运算符;扩展赋值运算符; 基本赋值运算符;“=” 将等号右边的值赋值给左边的变量,int a = 10;(就是把10赋值给int类型的变量a) 扩展的赋值运算符:“+=”,“*=”,“-- =”,“/=”,“%=“, 扩展运算符就是 将运算符左边和右边的数据做 加法 减法 除法 乘法 取余,然后将结果赋值给左边。 ***注意:扩展赋值运算符隐含了强制类型转换*** 例:a += 10; 相当与 a= (a的类型)(a+10); 关系运算符的基本用法和注意事项 关系运算符:“= =”, “!=” ,“>” , “<” , “>=”, ”<=” 关系运算符的结果是:boolean类型的值 true 或者false 注意:要区分“=‘和“= =”别写错 逻辑运算符; 比较两边的条件 &:与 有false则false 并且 两边同时成立则为ture,只要有一边不成立(false)就为false。 |:或 有true则true 或者 两边只要有一边成立则为true两边都是false不成立则为false。 ^:异或 相同则false;不同则ture 两边相同则false 两边不同则为true。 !: 非 true则faLse,false则true 取相反的结果,只和一边有关。 逻辑运算符&&和&的区别 &:与 有false则false 并且 两边同时成立则为ture,只要有一边不成立(false)就为false。 &&:双与 逻辑与(短路与),在只要左边是false,则不判断右边,直接false。 |:或 有true则true 或者 两边只要有一边成立则为true两边都是false不成立则为false。 ||:双或 逻辑或(短路或),只要左边是ture则不判断右边,直接ture 单与(&)无论左边是ture还是false 右边都会执行 双与(&&)只要做左边是false,右边就不执行了。 单或(|)无论做左边是是true还是false右边都会执行 双或(||)只要左边是true,右边就不执行。 三元运算符的 基本使用: 三元运算符的格式:(关系表达式)?表达式1:表达式2; 三元运算符的执行流程: A:先计算关系表达式的布尔值:看是true还是false B:如果是true则表达式1是结果;如果是false则表达式2是结果。 键盘录入的基本步骤和使用: 键盘录入数据:“Scanner”类 导包: import.java.util,Scanner; 创建Scanner类的对象:Scanner sc =new Scanner(System.in); System.out.println(“请输入你要输入的对象”) 接收键盘录入数据 int number =sc.nextInt(); ****取余 取模*** 取余:remainder :取模:modulus; 定义 x y “x % (取余) y” ,当x和y的正负号一样的时候,取余(%)取模的结果是等同的;当x和y的符号不一样的时候取余(%)的结果的符号跟x的符号一样, 《Java中 % 只表示,即结果的符号和x的一致,与y 的符号无关;Java中没有直接取模算符,有些书中将取余等同于取模》 取余%操作的用途 A:判断是否是奇数偶数; B:判断是否能被某个数整除;C:获取一个数的个位十位百位。。。。 A:x%2 = = 0 是 ture则为偶数 是false则为奇数;x%2= = 1是ture则为奇数时false则为偶数。 Boolean 布尔类型 Boolean x%2 = = 0或者 Boolean x% 2== 1 判别 ture false B:判别能否被某个数整除 “x% 这个数 = =0 结果ture则能被这个数整除;Boolean 布尔类型 ; Boolean x%2 = = 0:true 则为偶 false则为奇数; C:获取一个数的 个位 十位 百位 int i =1234; int ge = i%10; int shi = i /10%10; int bai =i/100%10; int qian =i/1000%10; 控制流程语句 流程控制语句的分类 顺序结构 选择结构 循环结构 顺序结构 是最基本的流程 特点:从上往下依次进行。 选择结构 也被称为(分支结构) 选择结构分两种 一种 是if语句 一种是switch语句 if语句: If语句第一种格式只是用if 格式: if(关系表达式){语句体} 执行流程:首先判断关系式的结果是ture 还是false ;是ture 就执行语句体,是false就不执行语句体。 If语句的第二种格式 格式:if(关系表达式){语句体1}else{语句体2} 执行流程:首先判断关系表达式的结果是ture还是false;是ture就是执行语句体1,是false就执行语句体2; If语句第三种格式 格式:if(关系表达式){语句体1}else if(关系表达式2){语句体2 } else if(关系表达式3){语句体3}。。。。。。else{ 语句体n} 《else{}是可选的》 执行流程; 首先判断关系表达式1看起结果是ture 还是false ,如果是ture就执行语句体1,如果是false就继续判别关系表达式2看其结果是ture还是false,如果是ture就执行语句体2,如果是false就继续判别关系表达式3看起结果是ture还是false,如果是ture就执行语句体3,。。。。。。如果没有任何关系表达式为ture就执行else中的语句体。{是可以省略最后的else的}。 Switch语句的格 Switch(表达式){ Case值1: 语句体1; Break; Case值2: 语句体2 Break; Case值n: 语句体n Break; Defult: 语句体n+1; Break; } Switch表达式允许的数据类型:byte short char int 都是可隐式转换为intl 类型,因为byte short char 可以隐式转换为int 所以可以使用,jdk 5 起可以是枚举类型,jdk7起可以是String,小括号中可以是常量也可以是变量。 Case后面的值:A:用来和表达式的值进行匹配,B:值只能是常量。C:值的类型应该和switch小括号中值的类型一致。 {把break去掉就形成case穿透} Break:中断 Defult:当所有case都不匹配时,执行defult 执行流程:首先计算表达式的值,然后执行符合case,如果没有符合case,则执行defult 循环控制语句: 在满足循环条件的情况下,反复执行某段代码 循环的停止:在合适的时候将循环条件修改成false,从而结束循环,否则将会一直执行下去,形成死循环。 循环语句的组成: 初始化语句:一条语句(一条语句可以初始化多个变量),这些语句完成一些初始化操作。 判断语句:Boolean表达式,这个表达式能决定是否执行循环体。 循环语句体:重要重复做的事。 控制条件语句;控制循环语句结束 三种循环结构语句: For循环; while循环 do。。while循环 For循环 格式:for(初始化语句;判断条件语句;控制条件语句){ 循环语句体} For循环适用于知道循环多少次的情况 执行流程 先执行初始化语句,然后执行判断条件语句,如果为ture则执行循环体语句,循环体语句执行完毕后,执行控制条件语句 从步骤2重复。如果为false则for循环结 束。 {初始化语句只能有一句,但注意,一句可以初始化多个变量的语句} 初始化语句在循环中只执行一次 While循环的格式: While普通格式: While(判断条件语句){循环语句体}: While扩展版格式 初始化语句 While(判断条件语句){循环体语句;控制条件语句;} While循环的执行流程 先执行关系表达式,如果关系表达式为true,则执行循环体,循环体执行完后,继续执行关系表达式,如果关系表达式为false则循环体结束。 Do…….while循环格式及基本使用: 语句格式: 普通格式:do {循环语句体:}while(判断条件语句) 扩展格式:初始化语句体;do{循环语句体;控制条件语句;}while(判断条件语句); 执行流程:执行初始化语句 ,执行循环体语句,执行控制条件语句,执行判断条件语句,看是ture还是false,如果是false,则结束循环,如果是ture回到2继续执行循环体语句。 For ,while, do 。。。。 while 三种循环的区别: 区别:do….while 至少执行一次循环体。 For;while 必须判断条件成立才可能执行循环体。 For循环的初始化语句的作用域:for的大括号内: (for的初始化表达式可以定义在for循环外,定义在for循环前,for循环()之内的三个表达式可以有多个条件)。 控制循环语句: A:break 直接结束循环,或switch语句,B:contiue:结束本次循环继续执行下一次。 Break使用场景:不能单独使用,必须用于switch 或循环中 Break的作用:在switch 中结束case,在循环中结束所在的循环。 Continue:的使用场景:循环中 Continue:的作用:结束本次循环,继续下一次循环。 While 语句,If语句,不写大括号时,只有if语句后的第一条语句算作if的语句体,其余不算。 如果变量在for循环外已经声明,则初始化语句可以省略,判断语句可以省略相当于不停止,控制条件语句可以省略相当于不改变for循环中的变量。 For循环适用于知道循环多少次数的场景, While循环适用不知道循环多少次数的场景,至少执行0次循环。 Do。。。while循环适用于不知道次数的场景,至少循环1次。 数组 Random类的概述和基本使用 Random类:用于生成随机数的类 步骤: 导包;import.java.util.Random: 创建random类的对象:Random sc =new Random(); 使用对象调用方法获取随机数: int number = sc.nextInt(10) NextInt(y) 表示产生的数据在0到y之间包括0,但不包括y 数组的概述和定义 数组:存储同一种类型的 多个 元素的 容器 两种定义格式:(区别在于中括号的位置不同) A:数据类型[] 数组名:推荐使用这种格式 示例:int [] arr: B: 数据类型 数组名[]: 示例: int arr[] 数组的动态初始化 初始化:为数组开辟内存空间,并为数组中的每一个元素赋一个初始值。 两种初始化: 动态初始化:我们给出数组的长度,由系统给出元素的默认值。 静态初始化:我们给出初始值,由系统给出数组的长度。 动态初始化:数据类型 [] 数组名 =new 数据类型[数组的长度] 示例: int[] arr=new int[y]: 数组间的访问: 数组的元素:数组中的单个数据: 数组的索引:元素在数组中的位置序号从0开始. 角标: 访问数组的元素:数组名[索引] 示例: int [] arr= new int [3]; 该数组的长度为3,//获取该数组0索引的元素值,保存到变量n中 int n =arr[0], arr[0]也是该数组中的第一位元素。 Int [] arr = new int[n]该数组的长度为 arr . length= n Java中的内存分配: 栈:存储局部变量 堆:存储 new 出来的实体对象: 方法区:存储加载的类 本地方法区:和系统相关 寄存器:cpu 局部变量:定义在方法中的变量 堆的特点:每一个对象都有地址值: 每一个对象的数据都有默认值。 使用完毕后在垃圾回收器空闲的时候被垃圾回收器回收内存 栈的特点; 先进后出,使用完毕后立即回收内存。 数组的静态初始化 :我们给出初始化值有系统给出长度 静态初始化方式创建数组,数组最开始也有默认值0但立刻就被静态初始化值覆盖了。 静态初始化两种格式:数组类型[] 数组名=new 数组类型[] {元素1,元素2,元素3,。。。。} 格式1:示例: int[] arr=new int[]{1,2,3,4,5,6,7}; 格式2:示例:数据类型[] arr={1,,2,3,4,5,6,7} 数组操作之遍历数组 数组遍历: 一次获取数组中的每一个元素一般式用for循环 获取数组的长度:使用数组的length属性,int length=arr . length 示例: int [ ] arr = {1,2,3}长度为:3, 索引:0,1,2, 最后一个索引值=数组长度-1:for(int i=0; i<arr.length;i++){int n =arr} 数组操作之获取最值 最值
最小值和最大值
编程思维: 数组获取最大值
定义一个变量max, 保存最大值, 先拿数组中的第一个元素作为参照物
for循环遍历数组中的其他元素, 让其他元素和max依次比较
如果元素比max大, 则说明该元素应作为最大值, 所以将该元素存入max
整个for循环遍历比较结束, max保存的就是最大值
编程思维: 数组获取最小值
定义一个变量min, 保存最小值, 先拿数组中的第一个元素作为参照物
for循环遍历数组中的其他元素, 让其他元素和min依次比较
如果元素比min小, 则说明该元素应作为最小值, 所以将该元素存入min
整个for循环遍历比较结束, min保存的就是最小值 二维数组的概述基本使用: 二维数组的概念二维数组的元素为一位数组的数组 定义格式: A: 数据类型[] [] 数组名:(推荐的方式)B:数组类型 数组名[][] C:数据类型[] 数组名[] 初始化:A:动态初始化 数据类型[][] 数组名=new 数据类型[m][n]; M 表示的是二维数组中一维数组的个数 N 表示 的是一维数组中的元素个数 B:静态初始化 数据类型[][]数组名=new 数据类型[][][][][元素。。。]。。。] 简化格式:数据类类型[][][] 数组名={{元素。。}{元素。}…..} 二维数组名配合索引可以获取到每一个一维数组 每一个一维数组配合索引名可以获取到数组中的元素 例:假如我有一个二维数组:arr 我要从中获取一维数组;arr[索引] 我要从中获取二维数组的元素arr[索引][索引]; 两种初始化的区别:
动态初始化, 二维数组中的一维数组的长度是固定的, 因为n已经确定
静态初始化, 二维数组中的一位数组长度可以是不同的
注意:
`int[][] arr = new int[3][];`不给一维数组长度是正确的
含义: 创建了一个长度为3的二维数组, 而不创建内部的一维数组. 而动态初始化是需要给元素默认值的, 二维数组中的一维数组是引用类型, 所以是默认值null. 即创建完的数组为`[null, null, null]`
如果不给二维数组长度则是错误的, 因为虚拟机无法知道要如何创建该数组 可以创建长度为零的数组但是不能存储元素,不能创建长度为负数的数组会抛出异常。 数组的长度一旦确定则不可改变。 如何能够在一个数组中添加不重复的, 随机的数值?
* 生成一个随机数
然后遍历当前数组, 查看刚才生成的随机数与数组中的每个元素是否重复
重复则继续生成
不重复则存入数组 方法:完成特定功能的代码块 作用: 提高代码的复用性和可维护性. 定义格式:修饰符 目前记住public static 返回值类型;用于限定返回值的数据类型 方法名;方法的名字便于我们调用 参数类型:用于限定调用方法时传入数据的类型 参数名;用于接受调用方法时传入数据的变量。 用于告诉方法的调用者, 调用该方法时需要传入何种数据
方法体: 完成我们需要的功能的代码
return语句: 结束方法, 并把返回值传递给调用者 格式: 修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2...) { // 小括号中的部分也叫作参数列表
方法体;
return 返回值; void修饰的方法的调用 void:
当方法没有返回值时, 返回值类型写void
注意:
* 返回值类型为void的方法只能单独调用
*void作为返回值类型的方法, 可以不写return语句; 或使用`return;`结束方法, 但不能使用`return 值;`
|