Java数据类型和运算符

来源:互联网 发布:sql update 条件 编辑:程序博客网 时间:2024/06/05 01:11
Java开篇
第一章主要简单介绍了一下java的基础知识
介绍
         知道java是一种可以跨平台面向对象的程序设计语言
组成
         JRE=JVM+类库
         JDK=JRE+工具类
Java由四个方面组成:
  1. java编程语言
  2. java类文件格式
  3. java虚拟机(JVM)
  4. 程序接口(JAVA API)
体系
  1. JAVASE(java标准版)
  2. JAVAEE(企业版)
  3. JAVAME(微型版)
特点
  1. 一种面向对象的语言
  2. 一种与平台无关的语言,可以提供程序运行的解析环境
  3. 一种健壮的语言(主要舍弃了指针,内存的申请以及垃圾回收)
Java虚拟机
  1. java虚拟机可以理解成为一个以字节码为机器指令的CPU
  2. 对于不同的平台有不同的虚拟机制
  3. JVM机制屏蔽底层不同运行平台的差别,实现了一次编译,随处运行”.
垃圾回收机制
  1. java程序中不使用的内存空间当成垃圾回收
  2. C/C++语言中,垃圾回收是由程序员负责回收无用的内存
  3. Java程序中消除由程序员回收无用内存的责任.
  4. Java程序中垃圾回收程序员无法控制与干涉.
Java运行过程
说明: C:\Users\lenovo\AppData\Local\Temp\enhtmlclip\Image(1).png
 JavaSE整理结构
说明: C:\Users\lenovo\AppData\Local\Temp\enhtmlclip\Image(2).png
项目开发命名规范
eclipse创建java项目需要注意的命名规范
  1. 项目名首字母大写:StuAO
  2. 包名的命名规范:com.java(公司名/项目名).bean(包的具体含义),包名的所有构成部分必须要小写
  3. 类名的命名规范:首字母必须要大写Eg:Student
标识符的命名规范
    1. 标识符由26个大小写字母,0-9,_$组成
    2. 数字不能出现在首位[不能以数字开头]
    3. 严格区分大小写
    4. 不能直接使用关键字或者保留字作为标识符
    5. 标识符中不能包含空格
注意:
         在起名字时,为了提高阅读性,要尽量见名知意
数据类型
Java是一种强类型语言,对于每一种数据都定义了明确的数据类型,
数据类型分类:
  1. 基本数据类型
  1. 整形[byte,short, int, long]
  2. 浮点型[float, double]
  3. 字符[char]
  4. Boolean(默认false)
注意:
         整数默认是int类型
         浮点数默认是double类型
         长整形后缀必须用Ll标记,建议使用L
         单精度(float)数必须用Ff标记,建议使用F
  1. 引用数据类型(,接口,数组)
数据类型的转换
默认数据类型转换
从小到大的转换
  1. byte, short, char--->int--->long--->float--->double
  2. byte,shoort,char相互之间不能转换,他们参与运算首先转换为int类型
强制类型转换
大的数据类型转换为小的数据类型
格式:
         目标数据类型 变量 = (目标数据类型) (被转换的数据)
Eg:int intNum = (int)num;
面试题:
      byte b1=3,b2=5,b;
b =b1+b2;
b=3+5;
哪句是编译失败的,为什么失败???
:b=b1+b2这行代码有问题,因为变量相加,会首先看类型,也就是说b=b1+b2的数据类型会提升为int类型,也就是说int类型的(b1+b2)赋值给byte类型的b,,强制类型转换错误,所以有问题.b=3+5.首先把结果计算出来,然后看是否在byte数值范围内,如果在其范围就不报错.
         int charA ='0'+1;               //ASCII:'a' 97 'A' 65 '0' 48 
System.out.println(charA);      // 49
System.out.println(‘a’+1);    //98
System.out.println(‘a’+1+”Hello”);  // 98Hello
成员变量
成员变量:作为类的成员而存在,直接存在于类中.
  1. 类变量:又叫静态(static)变量,它可以直接用类名调用,也可以对象调用.
  2. 实例变量:不用static修饰,它只能通过对象调用[实例化方式调用].
局部变量
局部变量:作为方法或语句块的成员而存在,主要存在于方法参数列表和方法定义中
面试题:
Java中成员变量与局部变量的区别?
  1. 成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符以及static修饰,但两者都可以定义成final类型.
  2. 成员变量存储在堆中,局部变量存储在栈中
  3. 成员变量有默认值(final修饰并且没有static的必须要显式赋值),局部变量不会自动赋值
  1. 普通代码块
  2. 构造代码块
  3. 静态代码块
    static{
        System.out.println("=====静态代码块=====");
    }
    {
        System.out.println("========构造代码块==========");
    }
    publicstaticvoid main(String[]args) {
        //实例化
        StaticDemo demo =new StaticDemo();
        System.out.println("=========普通代码块========");
}
静态代码块优先于构造代码块执行
Java运算
算术运算
+, -, *, /, %,
++(前置):先运算后取值
++(后置):先取值后运算
--(前置):先运算后取值
--(后置):先取值后运行
Eg:
          System.out.println("相加运算:"+(a+b)); //12
      System.out.println("相减运算:"+(a-b)); //4
      System.out.println("相乘运算:"+(a*b)); //32
      System.out.println("相除运算:"+(a/b)); //2
      System.out.println("取模运算:"+(a%b)); //0
      /*
       * ++(前置):先运算后取值
         ++(后置):先取值后运算
          --(前置):先运算后取值
          --(后置):先取值后运行
       */
//c=9 ,a=9
      System.out.println("前置++运算:"+(c=++a)+"输出a的值:"+a);
//c=8, a=9
      System.out.println("后置++运算:"+(c=a++)+"输出a的值:"+a);
//d=3, b=3
      System.out.println("前置--运算:"+(d=--b)+"输出b的值:"+b);
//d=4, b=3
      System.out.println("后置++运算:"+(d=b--)+"输出b的值:"+b);
 注意:
         如果对负数取模”%”,可以把模数负号忽略不记Eg:5%-2=1,但是如果被模数是负数则不可以忽略.
练习题:
      从控制台输入一个4位数的整数,实现反转进行输出?
      //从控制台输入一个4位数的整数,实现反转进行输出?
      System.out.println("请输入一个四位数的整数:");
      Scanner scanner =new Scanner(System.in);
      intnumSor =scanner.nextInt();//4321 ===>1234
      /*
       * 分析:
       *  int g = 12%10 = 2
//取模操作得到个位 ==>两位数得到个位上的数
       *  intsg = 123%100 = 3
//取模操作得到个位 ==>三位数得到个位上的数
       *  int s = 12/10=1 //除法操作得到十位
       *  intss = 123/10%10 //十位
       * 
       */
      intg =numSor%10; 
      ints =numSor/10%10;
      intb =numSor/100%10;
      intq =numSor/1000;
      System.out.print(g+" "+s+" "+b+" "+q);
      System.out.println(g*1000+s*100+b*10+q);
        
逻辑运算符
&&:短路逻辑与
||:段路逻辑或
!:逻辑非
位运算符
<<:左移
>>:右移
>>>:无符号右移
& :逻辑与
|:逻辑或
^:逻辑异或
~:取反     
注意:
         位运算符是直接二进制进行运算[只是针对int类型的数据有效]
 Integer.toBinaryString(n); //将十进制转换为二进制
Eg:
publicstaticvoid main(String[]args) {
   inta = 3;
   intb = 2;
//1 ===>3/2=1
   System.out.println("右移运算:"+(a>>1));
//12 ===>3*2*2=12
   System.out.println("左移运算:"+(a<<b));
//1 ===>3/2=1
   System.out.println("无符号右移运算:"+(a>>>1));  System.out.println("与运算:"+(6&3));//2
   System.out.println("或运算:"+(6|3));//7
   System.out.println("异或运算:"+(6^3));//5
   System.out.println("取反运算:"+(~b));//-3
   intx=3;
   inty=4;
   System.out.println("与运算:"+(3&4));//0
   System.out.println("或运算:"+(3|4));//7
   System.out.println("异或运算:"+(3^4));//7
   System.out.println("取反运算:"+(~3));//-4
  
   //3的二进制: 00000011
   //左移:[3<<2]===>00001100 //
   //右移:[3>>2]===>00000000 00000000 00000000
   //右移:[-3>>2]==>11111111 11111111 11111111 -3/2=-1
   //无符号位右移[3>>>2]===>0
   // 4的二进制: 00000100
   //&与运算规则:00
   //|或运算符规则:11
   //^异或运算规则:相同则0,异同则1
^[异或面试题]:
//^[异或]的特点:
//一个数据位异或两次,该数本身不变
   System.out.println(5^6^5);  //6
   System.out.println(5^6^6);  //5
   //面试题:实现对两个整数进行交换
   intmun1=20;
   intmun2 = 30;
   //第一种实现思路[开发过程中经常用到]:通过一个中间变量来交换
   inttemp=0;
   temp =mun1// ===>20
   mun1=mun2// ===30
   mun2=temp// ===>20
   //第二种实现思路[用位异或实现]
   mun1 =mun1^mun2;
   mun2 =mun1^mun2;//mun1^mum2^mun2 ===>mun1
   mun1 =mun1^mun2;//mun1^mun2^mun1 ===>mun2
//第三种
num2=num1+num2;
num1=num2-num1;
num2=num2-num1;
 
   //取反规则:数值(正数,负数)1取反
   //左移规则:m<<n:整数m表示的二进制数左移n[3<<2],高位移出n为都舍弃,低位补0(此种情况会出现整数变负数)
   //左移计算方式:<<左边的数据乘以2的的移动次幂
   System.out.println(3<<2);//==>3*2*2
   //右移规则:m>>n:整数m表示的二进制右移n,m为正数,则高位全部补0,m为负数,则高位全部补1
   //右移计算方式:>>左边的数据除以2的的移动次幂
   System.out.println(24>>2);//==>24/2/2=6
   System.out.println(24>>>2);//==>24/2/2=6
   }
练习题:
System.out.println(8>>1);  //4
   System.out.println(8<<2);  //8*2*2=32
   System.out.println(3+5>>1); //4
   System.out.println(3+(5>>1));//3+5/2=5
比较运算符
==, !=, <, >, <=, >=
比较运算符返回的是boolean类型的结果
注意:
  1. <, >,<=, >= 只支持左右两边操作数是数值类型[byte, short, int, long, ffloat, double ]
  2. ==, !=两边的操作数既可以是数值类型也可以是引用类型
三元运算符
格式:
A(条件表达式)?表达式1:表达式2
运算规则:
  1. A(条件表达式)true,运算后的结果是:表达式1
  2. A(条件表达式)false,运算后的结果是:表达式2
System.out.println((8>6)?”8大于6”:”8不大于6”);
 
 


原创粉丝点击