Java数据类型和运算符

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 类型
         长整形后缀必须用 L l 标记 , 建议使用 L
         单精度 (float) 数必须用 F f 标记 , 建议使用 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( "======== 构造代码块 ==========" );
    }
    public static void 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 );
      int numSor = scanner .nextInt(); //4321 ===>1234
      /*
       * 分析 :
       *  int g = 12%10 = 2
// 取模操作得到个位 ==> 两位数得到个位上的数
       *  int sg = 123%100 = 3
// 取模操作得到个位 ==> 三位数得到个位上的数
       *  int s = 12/10=1 // 除法操作得到十位
       *  int ss = 123/10%10 // 十位
       * 
       */
      int g = numSor %10; 
      int s = numSor /10%10;
      int b = numSor /100%10;
      int q = numSor /1000;
      System. out .print( g + " " + s + " " + b + " " + q );
      System. out .println( g *1000+ s *100+ b *10+ q );
        
逻辑运算符
&&: 短路逻辑与
||: 段路逻辑或
!: 逻辑非
位运算符
<<: 左移
>>: 右移
>>>: 无符号右移
& : 逻辑与
|: 逻辑或
^: 逻辑异或
~: 取反     
注意:
         位运算符是直接二进制进行运算[ 只是针对int 类型的数据有效]
 Integer.toBinaryString(n); // 将十进制转换为二进制
Eg:
public static void main(String[] args ) {
   int a = 3;
   int b = 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
   int x =3;
   int y =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
   // & 与运算规则 : 0 0
   // | 或运算符规则 : 1 1
   // ^ 异或运算规则 : 相同则 0, 异同则 1
^[ 异或面试题 ]:
//^[ 异或 ] 的特点 :
// 一个数据位异或两次 , 该数本身不变
   System. out .println(5^6^5);   //6
   System. out .println(5^6^6);   //5
   // 面试题 : 实现对两个整数进行交换
   int mun1 =20;
   int mun2 = 30;
   // 第一种实现思路 [ 开发过程中经常用到 ]: 通过一个中间变量来交换
   int temp =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”);
 
 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值