-------
android培训、
ios培训、期待与您交流! ----------
概念:常量就是计算机不会变化的数值。
整数常量:表现形式有四种。 二进制、八进制、十进制、十六进制
八进制 :0开头。每三个二进制位代表一个八进制位。
十六进制:0x开头。每四个二进制为代表一个十六进制位。
int x = 60; 十进制表示形式
x = 0x3c; 十六进制表示形式
进制越大,表现形式越短。
进制之间的转换。
十进制-->二进制 不断的除2.取余数。
二进制-->十进制 乘2的次幂。
可以通过java提供的功能来完成。
Integer.toBinaryString(60);//111100Integer.toHexString(60);//3cSystem.out.println(Integer.toBinaryString(60));
二、变量
内存中一个空间,用于存储不断变化的数据。
好处:变量可以重复被使用。
定义格式:
数据类型 变量名 = 初始化值;
关于成员变量与局部变量的区别(凡是在大括号里面的变量,出了大括号,再也没有人认识了 )
局部变量是定义在方法中的变量,出了该方法就不能访问该变量了。
成员变量是在类中定义,并且在类的成员方法中都能访问的变量。
基本数据类型:boolean,byte,short;int;long;float;char;double基础数据类型转换:byte short char 在运算时都转为为int,他们之间不相互转换。java 各种数据类型有固定表数范围和字段长度,其不受具体操作系统的影响以保证java程序的可移植性。
1、boolean 数据类型取值范围:true false null2、字符型 charchar eChar='a';char cChar='中';java采用unicode编码,全球语言统一编码
错误例子解析:public class TestVar2{
static int y=9; // 此处成员变量声明如果不为静态,在main方法中调用会提示错误:无法从静态上下文中引用非静态变量static double d1=3.1415;static char c1='\u2415';static char c2='b';static boolean b=false;static int x = 19;
class TestVar2{
public static void main(String args[]){Person p=new Person();System.out.println("person id:"+p.getId()); //此处调用另一类的成员变量或者方法也需要在main方法中先new该类的一个对象,如果将new该类的对象的语句放在main方法以外,同样会提示错误: 无法从静态上下文中引用非静态变量System.out.println("person name:"+p.name);new TestVar2().init();System.out.println("b:"+new TestVar2().b);System.out.println("x:"+x);System.out.println("y:"+ new TestVar2().y); //如果类成员变量不是静态的,那么在main方法中调用需要先new此类一个对象再调用该成员变量System.out.println("c1:"+c1);System.out.println("c2:"+c2);}private void init(){System.out.println("this is test");}
}
三、数据类型(基本数据类型、数据类型转换)
(一)数据类型简介
基本:byte,short,int,long,float,double,char,boolean引用:类、接口、数组
基本数据类型在内存中占用的空间是不同的。byte: 一个8位。 -128~127short: 二个8位。int: 四个8位。long: 八个8位。需要通过l来明确类型。float: 四个8位。 需要在值后面通过f来明确float类型。double:八个8位。char: 二个8位。0~65535boolean:一个8位。
整数默认是int。小数默认是double。
(二、数据类型转换)
1、boolean 类型不可以被转为其他类型2、整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:容量小的类型自动转换为大的数据类型;数据类型按容量大小排序为:byte,short,char,int->long->float->double,byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型容量大的数据类型转为容量小的数据类型,需要加上强制类型转换符,但可能造成精度降低或溢出;使用时要格外注意。有多种类型的数据混合运算时,系统首先自动将所有类型转成容量最大的那一种数据类型,然后再进行计算。实数常量(如:3.4)默认为double整数常量(如:123)默认为int
以下是错误百出的变量类型转换:
public class VarConvert{
public static void main(String[] args){
int i=1,j;float f1=0.1 f; //此处0.1默认为double类型,如果不加强制转换或者加f,编译都会报错float f2=129; //这里将int类型129直接转换为float类型,是数据容量小的数据类型向数据容量大的类型转换可以自动完成long l1=12345678;long l2=8888888888; //这里在编译时,会提示过大的整数,而12345678默认为int类型且不超过int类型的取值范围,但888888888也默认为int类型却超过了int类型的取值范围,所以这里的解决办法就是在数值后面加上L。double d1=2e20,d2=124;byte b1=1,b2=2,b3=138; //这里b3=138超过了byte类型的取值范围,所以需要将数值控制在127以内j=j+10; //这里变量j尚未初始化,不能参与运算i=i/10;i=i*0.1; //这里0.1为double类型,运算完成也为double类型,赋值给int类型会损失精度,需要强制类型转换char c1='a',c2=190;byte b=b1-b2; // b1,b2运算之前先转为int类型,最终结果为int类型赋值给byte类型,需要强制类型转换char c=c1+c2-1; // c1,c2预算时会先转为int类型,运算完成后需要强制类型转换之后才能再赋值给c,也需要强制转换float f3=f1+f2;float f4=f1+f2*0.1; // 0.1默认为双精度double类型,赋值给float类型,会损失精度,需要强制类型转换double d=d1*i+j;float f=(float)(d1*5+d2);
}
}正确的示例如下:public class VarConvert{
public static void main(String[] args){
int i=1,j=8;float f1=0.1f;float f2=129;long l1=12345678;long l2=8888888888L;double d1=2e20,d2=124;byte b1=1,b2=2,b3=120;j=j+10;i=i/10;i=(int)(i*0.1);char c1='a',c2=190;byte b=(byte)(b1-b2);char c=(char)(c1+c2-1);float f3=f1+f2;float f4=(float)(f1+f2*0.1);double d=d1*i+j;float f=(float)(d1*5+d2);
}
}
四、运算符:
java语言支持的运算符、算数运算符、 关系运算符、 逻辑运算符、位运算符、 赋值运算符、扩展赋值运算符、字符串连接运算符
计算以下程序的输出结果
public class TestOperator{public static void main(String args[]){int i1=10,i2=20;int i=(i2++);System.out.println("i="+i);System.out.println("i2="+i2);i=(++i2);System.out.print("i="+i);System.out.println("i2="+i2);i=(--i1);System.out.print("i="+i);System.out.println("i1="+i1);i=(i1--);System.out.print("i="+i);System.out.println("i1"+i1);}}
这里需要特别注意的是++/--运算符先参与运算后自增
短路与与短路或 逻辑与与逻辑或 需要格外注意
其他注意事项:
算数运算符:%表示取余数。
左边小于右边结果是左边。左边等于右边结果是0。负数取模只看左边。整数%2的结果非0即1.可以用于判断切换。赋值运算符:+= : 将左右两边的和赋给左边。x+=3;// x = x+3;但是赋值运算符会自动转换动作。比较运算符:该运算符的结果肯定是boolean类型的值。逻辑运算符:& | ^ ! && ||用于连接两个boolean类型的表达式。&:两边的表达式都会参与运算。&&:当左边为false时,右边不参与运算。|:两边的表达式都会参与运算。||:当左边为true时,右边不参与运算。^:和或很雷同,只有两边为true结果是false。&:true & true = true;true & false = false;false & true = false;false & false = false;两边都true时,结果为true否则结果为false。|:true | true = true;true | false = true;false | true = true;false | false = false;两边都有false时,结果为false。否则,结果为true。^:true ^ true = false;true ^ false = true;false ^ true = true;false ^ false = false;两边相同的时候,结果是false。两边不同的时候,结果是true。位运算符:就是二进制位运算。<<:可用于乘2的幂运算。>>:可用于除2的幂运算。>>>:无符号右移:无论最高位是0还是1,空位都用0补。& | ^ ~技巧:可以将1理解true。0理解为false。操作:1、当想要获取一个整数的某几位二进制位。可以将该几位通过右移的形式变成最低位,然后通过与对应为多个1的形式进行&运算。
2、一个数异或一个数两次,还是原值。三元运算符:? :int x=3,y=5,z;z = (x>y)?x:y;
五、语句(if、switch、while、do while)
(一)什么时候用这些语句呢?
当对几个值进行判断的时候,可以使用switch语句。
当多范围进行判断,或者对值判断,或者对功能的结果是boolean类型的判断,都可以用if。
当多语句执行很多次的时候,使用循环结构。
无论条件是否满足,循环体至少执行一次。使用do while 语句
六、 程序执行过程:了解程序的执行过程,对理解代码的编写以及格式将会有很大的作用