好贷网好贷款

黑马程序员_Java编程基础_标识符、常量、变量、类型转换、运算符、程序流程控制、函数

发布时间:2016-12-5 8:34:32 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"黑马程序员_Java编程基础_标识符、常量、变量、类型转换、运算符、程序流程控制、函数",主要涉及到黑马程序员_Java编程基础_标识符、常量、变量、类型转换、运算符、程序流程控制、函数方面的内容,对于黑马程序员_Java编程基础_标识符、常量、变量、类型转换、运算符、程序流程控制、函数感兴趣的同学可以参考一下。

------- android培训、java培训、期待与您交流! ---------- 标识符 在程序中自定义的一些名称,比如类名 数字不可以开头 不可以使用关键字 Java中严格区分大小写 Java中的名称规范: 包名:多单词组成时所有字母都小写 类名接口名:多单词组成时,所有单词的首字母大写 变量名和函数名:多单词组成时,第一个单词首字母小写,后面的单词首字母大写 常量名:所有字母都大写。多个单词每个单词用下滑线连接 常量 java中固定不变的数值 整数,小数,布尔型, 字符常量:将一个数字字母或者符号用单引号('')标识字符串常量:将一个或者多个字符用双引号标识(""为空内容的字符串) null常量:用于引用数据类型 八进制用0开头表示,十六进制用0x开头表示 进制的特点 1个字节由8个比特组成 在二进制中,3位代表1位成为八进制,4位代表1位成为十六进制 编码表ASCII:为了让计算机识别生活中的语言文字 进制的转换 十进制-->二进制。 原理:对十进制数进行除2运算,从右向左记录余数 二进制-->十进制 原理:二进制乘以2的过程 十进制-->十六进制 先转为二进制,再转为十六进制 负数的二进制表现形式 -6:6的二进制取反+1 取反:将二进制的1变成0,0变成1 6在内存中的表现形式 0000-0000 0000-0000 0000-0000 0000-0110 所以-6的表现形式 1111-1111 1111-1111 1111-1111 1111-1010 结论:负数的二进制的最高位都是1 变量 就是将不确定的数据进行存储,也就是需要在内存中开辟一个空间。 如何开辟内存空间? 通过明确数据类型,变量名称,数据来完成的 Java是强类型的语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间 Java中的数据类型如下图: byte:1个8位 -128~+127 short:2个8位 16位 -2(15)~+2(15)-1 -32768~32767 int: 4个8位 32位 long: 8个8位 64位 long l = 4l;注意需要用l标识一下 这是为了考虑CPU的资源使用效率,cpu和硬盘里的内存称为缓存 float:单精度,占4个8位 double:双精度,占8个8位 float f = 2.3//报错,因为小数默认为double,需要将2.3标识成单精度:2.3f char:0~6535 定义变量的格式: 数据类型 变量名 = 初始化值; 只要有不确定的数据,就定义变量,来进行存储。 类型转换 byte b = 3;//此时会自动判断3是否在b的范围内,有自动转换动作 b = b + 2;//报错,因为2默认为int类型占4个8位,此时等式右边的b发生自动类型提升,不能将四个八位的值赋给一个八位。此时b为一个不确定的值,无法判断是否在b的范围内,所以报错容易丢失精度 自动类型提升:把两个数据提升为同一种类型的数据才能进行运算,原则是以大的为主,小的向大的提升 类型强制转换: b = (byte)(b + 2);//将b加2的和强制转换成byte类型再赋给b,注意会丢失精度 强转的应用:运算结果是小数,只保留整数部分,将double转int int和float一起运算结果为float 'a'+1是在做运算,发生自动类型提升,将‘a’的数字体现出来 字符‘1’和数字1的不同 运算符 算术运算符 -1%5=-1 1%(-5)=1 有负数参与模运算,只看被模数的符号 a++:a先参与运算,再自增 ++a:a先自增,再参与运算 字符串数据和任何数据使用加号都是相连接,最终都会变成字符串:“5+5”+5+5结果为“5+555”;"5+5="+(5+5)通过括号将加法运算的优先级提高 转义字符 通过\转变后面字母或者符号的含义 \n:换行  \b: 退格。相当于backspace \r: 按下回车键 \t:制表符。相当于tab键 在linux里面换行用一个字符表示\n 在windows里回车符是由两个字符表示\r\n "\"hello\""输出"hello" char ch = '\n'正确,应为\n代表一个回车符 '\''正确 '你'可以,一个汉字两个字节,char类型也是两个字节 赋值运算符 int x = 3; x += 4;//x=x+4把左右两边的和赋给左边 short s = 4; s = s+5//编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法赋值给short类型 s += 5;//编译通过,只做赋值运算,自动完成强制转换动作 比较运算符 运算完的结果要么是true要么是false ==:与=区分,=是赋值运算符 instanceof:检查是否是类的对象: "Hello" instanceof String 结果为true 逻辑运算符 &:AND(与) |:OR(或) ^:XOR(异或) !:Not(非) &&:AND(短路) ||:OR(短路) 逻辑运算符用于连接boolean类型的表达式。 ^:和|有点儿不一样,当true ^ true = false;两边相同为false,两边不同结果为true &和&&的特点 &:无论左边是真是假,右边都运算 &&:当左边为假时,右边不运算 位运算符 指的是二进制的位 3<<2=12;3左移两位。其实就是乘以2的移动位数次幂 6>>2=1;6右移两位。其实就是除以2的移动位数次幂。 >>:最高位补什么由原有数据的最高位值而定 >>>:无符号右移,无论最高位是什么,右移后都用0补 6&3=2 6|3=7 6^3=5 ~6=-7(取6的反码) 一个数异或同一个数两次结果还是那个数(应用于加密) 对两个整数变量的值进行互换(不需要第三方变量) 方法一: int n = 3,m = 8; n = n + m;//如果n和m的值非常大,容易超出int范围 m = n - m; n = n - m; 方法二: n = n ^ m; m = n ^ m;//(n^m)^m n = n ^ m;//n^(n^m) 通过60的二进制得到十六进制 Integer.toBinaryString(60)得到60的二进制表示 int n1 = 60 & 15;//取出最低四位 Sop(n1>9?(char)(n1-10+'A'):n1);//输出最低位的十六进制表示形式,因为是运算符,会发生自动提升 temp = 60>>>4,//将60右移四位,使用无符号右移,将原有数据移光 temp & 15 = 3,//获取temp的最低四位 三元运算符 (条件表达式)?表达式1:表达式2 如果条件为true,执行表达式1 如果条件为false,执行表达式2 程序流程控制 判断结构 if 三种格式: 1.if(条件表达式)   {      执行语句;   } 2.if(条件表达式)   {      执行语句;   }   else   {      执行语句;   } 二选一执行 if else结构简写格式:变量 = (条件表达式)?表达式1:表达式2; 三元运算符     好处:可以简化if else代码     弊端:因为是一个运算符,所以运算完必须要有一个结果 3.if(条件表达式)   {      执行语句;   }   else if(条件表达式)   {      执行语句;   }   ...   else   {      执行语句;   }   可以进行多层判断,都是为一个整体的单条语句,只要有一个满足,该语句就结束 如果控制的语句只有一条,括号可以省略 注意:写软件的目的是为了处理数据,数据是不确定的,是由用户输入的,一定要先对数据判断,只有正确的数据才能有软件运算,非正确的要给出提示 选择结构 switch语句 格式:     switch(表达式)     {       case 取值1:        执行语句;        break;//跳出switch语句       case 取值2:        执行语句;        break;       ...       default:        执行语句;        break;//该语句可以不写     } 特点: 1、被选择的表达式的值,只接受byte short int char 2、case和default位置没有顺序,即使default在最前面,也要先从第一个具体答案开始执行,只有答案都不满足,才执行default switch结束有两种情况 1、碰到break; 2、遇到大括号 例: int x = 3; switch(x) {    default:        Sop("d");    case 4:        Sop("a");    case 6:        Sop("b");        break;    case 2:        Sop("c");        break; } 输出:dab 原因:先输出d,然后继续执行后面所有可以执行的语句,输出a和b,直至遇到break或者大括号 如果两个case的执行语句一致,可以写成如下形式: case 1: case 2:    Sop("asd");    break; if和switch区别: 1、if除了能判断具体数值,还能判断区间,switch判断区间不方便 2、对于运算结果是boolean型的,if能判断,switch不能 if和switch的使用: 如果要对具体数值(上诉四种类型)进行判断,数值不多,用switch完成,效率稍高,其他情况用if 循环结构 while 定义初始化表达式 while(条件表达式) {     循环体(执行语句);     控制语句; } do {     循环体(执行语句);     控制语句; }while(条件表达式) while:先判断条件,只有条件满足才执行循环体 do while:先执行循环体,再判断条件,条件满足,再继续执行循环体 简单一句话:do while无论条件是否满足,循环体至少执行一次 while(y<3);//程序会停在这里一直循环判断 for(初始化表达式;循环条件表达式;循环后的操作表达式) {     执行语句; } 第一步:初始化表达式; 第二部:循环条件表达式; 第三步:执行语句; 第四部:循环后的操作表达式 第五步:循环条件表达式; ... 条件表达式如果既不是真也不是假则编译失败 当表达式多的时候用逗号隔开 for中的初始化表达式和循环后表达式可以不写 for和while的区别 1、初始化表达式里变量的作用域的不同。如果将用于控制循环的增量定义在for语句中,那么该变量只在for语句内有效。for语句执行完毕,该变量在内存中被释放。 2、for和while可以进行互换, 如果变量只为循环的增量存在控制循环次数的话,用for语句内存会优化。如果变量在后面的代码中还需要被应用,则需使用while 什么时候使用循环结构? 当要对某些语句执行很多次时,就使用循环结构。 无限循环的最简单表现形式。 for(;;){}//对for来说不写条 件表达式默认为true while(true){} 累加思想: 1、通过变量记录每次变化的结果 2、通过循环操作进行累加的动作 计数器思想: 通过一个变量记录住数据的状态变化,也需要通过循环完成 语句嵌套形式。就是语句中还有语句。 循环嵌套 System.out.println();//只有一个功能就是换行 九九乘法表注意使用制表符"\t" 其他流程控制语句 break;//不加标号默认跳出当前循环,应用范围:选择结构和循环结构 标号可用于给循环取名字 w:for() {    q:for()    {      break w;    } } continue;//只能作用于循环结构,继续执行循环,忽略下面的语句。特点:结束本次循环,继续下一次循环,也可以加标号 break和continue单独存在时,下面不可以有任何语句,因为访问不到,出现编译错误 函数 函数的格式 修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2,...) { 执行语句; return 返回值; } 形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数 static:主函数是静态的,所以必须调用被静态修饰的内容,包括静态函数 当函数的返回值类型是void时,函数中的return语句可以省略不写,写上也不算错(return;) 函数中只能调用函数,不能定义函数 如何定义一个函数? 1、既然函数是一个独立的功能,那么先明确该功能的运算结果。因为这是在明确函数的返回值类型 2、再明确该功能的过程中是否需要未知的内容参与者。这是在明确函数的参数列表(参数类型和个数) tip:如果返回的是真假值,可以简写为return a==b; 定义函数时,不要定义额外功能,只需要将运算结果返回给调用者就行了。 函数的重载(overload) 重载的概念: 在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型或者参数顺序不同即可 特点: 与返回值类型无关,只看参数列表 好处: 方便阅读,优化了程序设计 因为功能一致,所以定义的功能名称也一致 什么时候用重载? 当定义的功能相同,但参与运算的未知内容不同。这时就定义一个函数名称以表示该功能,方便阅读,通过参数列表的不同来区分多个同名函数。 void show(int a,char b,double c){} int show(int a,double c,char b){}//与上面的函数重载,因为参数的类型不同。注意:重载与返回值的类型没关系 double show(int x,char y,double z){}//没有重载,该函数不允许和第一个函数在一个类中存在

上一篇:Spiral Matrix II
下一篇:lesscss

相关文章

相关评论