黑马程序员_Java基础_02常量、变量、数据类型、运算符、语句、程序执行过程

------- android培训ios培训、期待与您交流! ----------
     概念:常量就是计算机不会变化的数值。
     整数常量:表现形式有四种。 二进制、八进制、十进制、十六进制
     八进制 :0开头。每三个二进制位代表一个八进制位。
     十六进制:0x开头。每四个二进制为代表一个十六进制位。
int x = 60;   十进制表示形式
x = 0x3c;   十六进制表示形式
    进制越大,表现形式越短。 
    进制之间的转换。 
     十进制-->二进制 不断的除2.取余数。
     二进制-->十进制 乘2的次幂。
 可以通过java提供的功能来完成。
 Integer.toBinaryString(60);//111100
 Integer.toHexString(60);//3c
 System.out.println(Integer.toBinaryString(60));

二、变量
     内存中一个空间,用于存储不断变化的数据。
     好处:变量可以重复被使用。
     定义格式:
      数据类型 变量名 = 初始化值;
      关于成员变量与局部变量的区别(凡是在大括号里面的变量,出了大括号,再也没有人认识了 )
    局部变量是定义在方法中的变量,出了该方法就不能访问该变量了。
    成员变量是在类中定义,并且在类的成员方法中都能访问的变量。

基本数据类型:boolean,byte,short;int;long;float;char;double
基础数据类型转换:byte short char 在运算时都转为为int,他们之间不相互转换。
java 各种数据类型有固定表数范围和字段长度,其不受具体操作系统的影响以保证java程序的可移植性。

1、boolean 数据类型
取值范围:true false null
2、字符型 char
char 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~127
     short: 二个8位。
     int: 四个8位。
     long: 八个8位。需要通过l来明确类型。
     float: 四个8位。 需要在值后面通过f来明确float类型。 
     double:八个8位。
     char: 二个8位。0~65535
     boolean:一个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 语句
   

六、 程序执行过程:了解程序的执行过程,对理解代码的编写以及格式将会有很大的作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值