zoukankan      html  css  js  c++  java
  • Java的标识符,数据类型与各种运算符

    一.标识符

      用作给变量、类和方法命名

      java强调标识符有如下命名规则:

    • 标识符必须以字母,下划线_,美元$开头
    • 标识符其他部分可以是字母,下划线"_",美元符"$"和数字的任意组合
    • 标识符大小写敏感,长度无限制
    • 不可以是java关键字 

    JAVA不采用通常语言使用的ASCII字符集,而是采用unicode这样标准的国际字符集。

    因此这里的字母的含义:英文,汉字

    合法的字符集:

      int a = 3;

      int _123 = 3;

      int $12aa = 3;

      int 变量1 = 55;

    不合法的标识符:

      int 1a = 3;   //不能用数字开头

      int a# = 3;    //不能包含#这样的特殊字符

      int int = 3;  //不能使用int关键字

    二.关键字

    Java关键字Java语言保留供内部使用的,class用于定义类。 关键字也可以称为保留字,它们的意思是一样的。

    需要注意的是goto和const作为java中的关键字不进行任何使用,也称为保留字

    三.数据类型 

      数据类型: java数据类型分为基本数据类型和引用数据类型:

      

    1.基本数据类型

    基本数据类型又分为整数类型(int byte short long),浮点类型(float double),字符类型(char),布尔类型(boolean)

    整型

    整型用于表示没有小数部分的数值,它允许是负数。

    取值范围是

      byte  -128~127

      short  -215 ~ 215-1 -32768~32767

      int   -231 ~ 231-1 

      long   -263 ~ 263-1

    浮点型 

      float  4字节  取值范围:-3.403E38~3.403E38

        float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。

      double   8字节  取值范围:-1.798E308~1.798E308

          double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。

        Java 浮点类型常量有两种表示形式

     

           十进制数形式,例如:

     

            3.14       314.0      0.314

     

          科学记数法形式,如  

     

            314e2      314E2      314E-2 

        需要注意的是Float声明的时候需要在后缀加上F或f,因为小数类型默认为double类型,会产生编译错误

    2.引用数据类型(数组,类和接口)

    四.变量

      在程序运行中其值可以发生改变的量,相当于向程序申请一个存储空间,里面的东西随时可能改变,其申请的空间大小与数据类型相对应

      声明变量 

        数据类型 变量名 = 初始值;

          int  num = 10;

     示例代码:

     1 public class Test1{    
     2     public static void main(String[] args){
     3         byte b=20;//范围-128~127
     4         System.out.println("byte--->b="+b);
     5         byte b2=012;//八进制
     6         System.out.println("byte--->八进制b2="+b2);//将八进制12--->十进制10
     7         byte b3=0x12;//十六进制
     8         System.out.println("byte--->十六进制b2="+b3);//将十六进制12--->十进制18
     9         short s=300;//范围-32768~32767
    10         System.out.println("short--->s="+s);
    11         int  i=10000;//范围大约21亿
    12         System.out.println("int--->i="+i);
    13         long l=5555555555L;//5555555555默认int类型,5555555555L为long类型
    14         System.out.println("long---->l="+l);
    15         float f=3.14f;    //3.14默认为double类型,3.14f为float
    16         System.out.println("float--->f="+f);
    17         //科学计数法:314E2=314*10^2
    18         float f2=314e2F;//314e2默认为double类型
    19         System.out.println("科学计数法的314E12==>"+f2);
    20         double d=314e2;
    21         System.out.println("double科学计数法的314E12==>"+d);
    22         double d2=1.123456789012345678;//精度四舍五入
    23         System.out.println("double--->d2="+d2);
    24     }
    25 }
    View Code

    结果如下:

     五.常量

      常量:在程序运行过程不能更改其值的变量

      在java中声明常量使用final,一旦变量使用final修饰,该变量为常量,无法为其重新赋值。

      变量命名经常大写(便于与变量进行区分)。

      示例代码

     1 public class TestVar4{
     2     public static void main(String[] args){
     3         /*
     4             常量在程序运行过程中无法被修改,在java中使用final修饰,
     5             常量的单词一般为大写单词或字符
     6                 3.1415926
     7         */
     8         final double PI = 3.1415926;
     9         //PI = 3.14;错误: 无法为最终变量PI分配值,无法继续为PI分配值了
    10         double r = 5;
    11         double s = r*r*PI;
    12         double c = 2*r*PI;
    13         System.out.println("圆的面积为:" + s);
    14         System.out.println("圆的周长为:" + c);
    15     }
    16 }
    常量代码

    结果如下:

    六.使用Scanner类获取用户输入

       Scanner处于 java.util.*包下,使用其中的方法可以获取用户输入的内容(字符串,整型,浮点型,双精度浮点类型,布尔类型等)

    示例:

     1 import java.util.Scanner;//使用前导包
     2 public class TestScanner{
     3     public static void main(String[] args){
     4         //创建对象:类名 对象名 = new 类名(参数);
     5         Scanner scanner = new Scanner(System.in);
     6         System.out.println("请输入您的姓名:");
     7         //调用方法 对象名.方法名()
     8         String name = scanner.nextLine();//获取用户输入的字符串信息
     9         System.out.println("请输入您的年龄:");
    10         int age = scanner.nextInt();
    11         System.out.println("请输入您的身高:");
    12         float height = scanner.nextFloat();
    13         System.out.println("请输入您的体重:");
    14         double weight = scanner.nextDouble();
    15         System.out.println("是否已婚:");
    16         boolean is = scanner.nextBoolean();
    17         System.out.println("===========个人信息=========");
    18         System.out.println("您的姓名是" + name);
    19         System.out.println("您的年龄是" + age);
    20         System.out.println("您的身高是" + height);
    21         System.out.println("您的体重是" + weight);
    22         System.out.println("是否已婚" + is);
    23     }
    24 }
    Scanner使用

    七.运算符

      1.算术运算符:+,-,*,/,%,++(自增),--(自减)

        i++和++i的异同: 

          相同:最后i都会加1; 

          不同:++在变量前是先自增1,再参与运算,再变量后是先参与运算再自增

      2.赋值运算符:=

      复合赋值运算符: +=,-=,*=,/=,%=

      

      3.比较运算符:>,>=,<=,<=,!=,==

      4.逻辑运算符:

        短路与&&:如果两个表达式中第一个为false,第二个表达式将不再进行运算。

        逻辑与&:不论表达式1是否为真,表达式2都将进行运算。

        短路或||:如果两个表达式中第一个为true,第二个表达式将不再进行运算。

        逻辑或|: 不论表达式1是否为真,表达式2都将进行运算非!:

      5.位运算符(了解):

    运算符

    含义

    示例

    ~

    按位非(NOT)/取反

    b = ~a

    &

    按位与(AND)

    c = a & b

    |

    按位或(OR)

    c = a | b

    ^

    按位异或(相同为0相异为1)

    c = a ^ b

    >>

    右移;左边空位补最高位即符号位 

    b = a >> 2

    >>>

    无符号右移,左边空位补0

    b = a >>> 2

    <<

    左移;右边空位以补0

    b = a << 1

               6.条件运算符(三目运算符): ?代替if…else条件结构

          int max = a>b?a:b;

        等同于

          int max;

          if(a>b){

            max=a;

          }else{

            max=b;

          }

        7.运算符的优先级

        

    八.类型转换

      自动类型转换:容量小的数据类型可以自动转换为大的数据类型

      byte--short-int -long-float-double(从左至右)

      转换的前提:

      1.   两种数据类型相互兼容
      2.       目标类型大于源类型  

      在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。

        

      特例: 可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围

       Short  b = 12;     //合法

       short  b = 1234567;    //非法

      

      强制类型转换 

        强制类型转换,又被称为造型,用于显式的转换一个数值的类型. 在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

        强制类型转换的语法格式:(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型。

            例如:

           double x  = 3.14; 

    int nx = (int)x;   //值为3

    char c = 'a';

    int d = c+1;

    System.out.println(d);

    System.out.println((char)d);

        当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。

        

        例如:

          int x = 300;

                   byte bx = (byte)x;    //值为44

        不能在布尔类型和任何数值类型之间做强制类型转换。

    思考题:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

     1 import java.util.Scanner;
     2 public class HomeWork4{
     3     public static void main(String[] args){
     4         /*
     5             解题思路:
     6             1,先获取用户输入的数字,定义一个Scanner对象
     7             2,将这个数字的个十百千位取出来
     8             3,将值进行加密操作,先加5在除以10取余
     9             3,利用异或运算交换个位和千位,十位和百位
    10             4,输出数字
    11         */
    12         System.out.println("请输入4位整数:");
    13         //定义一个Scanner对象
    14         Scanner sc = new Scanner(System.in);
    15         int num = sc.nextInt();
    16         //将这个数字的个十百千位取出来
    17         int ge = num%10;
    18         int shi = num/10%10;
    19         int bai = num/100%10;
    20         int qian = num/1000;
    21         //将值进行加密操作,先加5在除以10取余
    22         ge = (ge+5)%10;
    23         shi = (shi+5)%10;
    24         bai = (bai+5)%10;
    25         qian = (qian+5)%10;
    26         //利用异或运算交换个位和千位,十位和百位
    27         ge = ge^qian;
    28         qian = ge^qian;
    29         ge = qian^ge;
    30         shi = shi^bai;
    31         bai = bai^shi;
    32         shi = shi^bai;
    33         System.out.println("加密后的数据为:"+qian+bai+shi+ge);
    34         
    35     }
    36 }
    java code

    结果如下: 

    思考题2:利用”异或”运算的性质,对几个字符进行加密并输出密文,然后再解密。加密算法是:密钥是字符’8’,明文的每个字符和密钥进行异或运算,得到密文。

    密钥和密文的每个字符再次进行异或运算,重新得到明文。结果如图所示。

     这个题利用了一个数字被另一个数字异或运算2次会得到这个数字本身的原理

    比如 int a=1;

      int b=2;  

      a=a^b^b;通过计算会发现a=1;一个数字被另一个数字异或两次会得到这个数字本身

    答案:

    public class HomeWork5{
        public static void main(String[] args){
            char a = '十';
            char b = '点';
            char c = '进';
            char d = '攻';
            char e = '8';
            System.out.println("加密前的数据为:"+a+b+c+d);
            a = (char)(a^e);
            b = (char)(b^e);
            c = (char)(c^e);
            d = (char)(d^e);
            System.out.println("加密后的数据为:"+a+b+c+d);
            a = (char)(a^e);
            b = (char)(b^e);
            c = (char)(c^e);
            d = (char)(d^e);
            System.out.println("解密后的数据为:"+a+b+c+d);
        }
    }
    View Code

    额外话题:为什么byte的取值范围是-128至127;而不是-127-127呢?

    这个困扰了我很久,问了很多人一直得不到标准的答案,最后在一位帅哥的博客中找到了,很激动

    1,byte是1个字节,8位

    2.最大的应该是0111 1111,因为第一位是符号位,0表示正数

    3.最小的应该是1000 0000,同理,表示负数最小的(1111 1111是最大的负数-1)

    4.01111111就是127;

    5.计算机分为补码,反码,原码,正数的补码反码原码都一样,负数的反码是按位取反0变1,1变0,比如1 000 1110 反码是 1 111 0001,1是符号位,补码是反码的基础上加1

    6.补码的补码就是原码

    7计算机用补码表示一个数的,1 000 0000 在计算机中就是补码,求其原码,可以求它的补码就是原码

    8 1 000 0000反码是 1 1111111 补码是 1 10000000 就是-128

    9 所以喽,byte的取值范围就是-128 - 127

  • 相关阅读:
    【转载】关于sql server 代理(已禁用代理xp)
    Silverlight中将WriteableBitmap互转byte数组
    思迅Pay PC ,WIN7 ,KB3042058
    微软新Edge浏览器 WIN7 无法登录
    List<SelectListItem> 转为 SelectList
    图片jpg,png转为BASE64编码
    “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。
    mac os 10.15.1 懒人 .CDR
    微信刷脸SDK获取sub_openid
    win7 安装 visual studio 2019 时闪退(VS2019)
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/6647470.html
Copyright © 2011-2022 走看看