黑马程序员技术交流社区

标题: 【石家庄校区】基础知识整理 [打印本页]

作者: HiLmhxd    时间: 2017-11-30 15:52
标题: 【石家庄校区】基础知识整理
Java语言的发展史:
    詹姆斯.高斯林(James gosslingSUN-(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
        200410月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语言平台版本:
        JavaSEStandard Edition标准版本,开发桌面软件
        JavaMe:Micro Edition 嵌入式版本,开发机顶盒,手机等,嵌入设备的程序。
        JavaEE: Enterprise Edition 企业版本开发服务器程序。
JAVA是跨平台的编程言
        平台;操作系统(winds linux mac)
        跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行。
        跨平台的原理;Java在不同的操作系统中有不同的JVMJava虚拟机)实现跨屏台。
        “注释”:类似于游戏机模拟器,让相同的游戏在winds,手机上都可以玩。
        JVM: Java Virtual Machine, Java虚拟机,Java实现的虚拟的计算机,在不同的操作系统中模拟出相同的运行环境。
        JRERuntime Environment,Java运行时环境。包括Jvm虚拟机和java 核心类库。
        是运行java程序的最小环境。
        JDKJava 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),没有区别都是自增,
Aint 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= = 1ture则为奇数时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 值;`






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2