zoukankan      html  css  js  c++  java
  • java基础基本数据类型、变量类型、修饰符、运算符

    基础数据类型

    八种基础数据类型

      java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

      byte:

    • byte 数据类型是8位、有符号的,以二进制补码表示的整数;
    • 最小值是 -128(-2^7);
    • 最大值是 127(2^7-1);
    • 默认值是 0;
    • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
    • 例子:byte a = 100,byte b = -50。

      short:

    • short 数据类型是 16 位、有符号的以二进制补码表示的整数
    • 最小值是 -32768(-2^15);
    • 最大值是 32767(2^15 - 1);
    • Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
    • 默认值是 0;
    • 例子:short s = 1000,short r = -20000。

      int:

    • int 数据类型是32位、有符号的以二进制补码表示的整数;
    • 最小值是 -2,147,483,648(-2^31);
    • 最大值是 2,147,483,647(2^31 - 1);
    • 一般地整型变量默认为 int 类型;
    • 默认值是 0 ;
    • 例子:int a = 100000, int b = -200000。

      long:

    • long 数据类型是 64 位、有符号的以二进制补码表示的整数;
    • 最小值是 -9,223,372,036,854,775,808(-2^63);
    • 最大值是 9,223,372,036,854,775,807(2^63 -1);
    • 这种类型主要使用在需要比较大整数的系统上;
    • 默认值是 0L;
    • 例子: long a = 100000L,Long b = -200000L。
      "L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

      float:

    • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
    • float 在储存大型浮点数组的时候可节省内存空间;
    • 默认值是 0.0f;
    • 浮点数不能用来表示精确的值,如货币;
    • 例子:float f1 = 234.5f。

      double:

    • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
    • 浮点数的默认类型为 double 类型;
    • double类型同样不能表示精确的值,如货币;
    • 默认值是 0.0d;
    • 例子:

      double   d1  = 7D ;
      double   d2  = 7.; 
      double   d3  =  8.0; 
      double   d4  =  8.D; 
      double   d5  =  12.9867;

      boolean:

    • boolean数据类型表示一位的信息;
    • 只有两个取值:true 和 false;
    • 这种类型只作为一种标志来记录 true/false 情况;
    • 默认值是 false;
    • 例子:boolean one = true。

      char:

    • char 类型是一个单一的 16 位 Unicode 字符;
    • 最小值是 \u0000(十进制等效值为 0);
    • 最大值是 \uffff(即为 65535);
    • char 数据类型可以储存任何字符;
    • 例子:char letter = 'A';。

    java基础数据类型长度:

    低  ------------------------------------>byte,short,char—> int —> long—> float —> double 

    java基础数据类型转换

      自动类型转换:必须满足转换前的数据类型的位数要低于转换后的数据类型

    public class ZiDongLeiZhuan{
            public static void main(String[] args){
                char c1='a';//定义一个char类型
                int i1 = c1;//char自动类型转换为int
                System.out.println("char自动类型转换为int后的值等于"+i1);
                char c2 = 'A';//定义一个char类型
                int i2 = c2+1;//char 类型和 int 类型计算
                System.out.println("char类型和int计算后的值等于"+i2);
            }
    }
    自动转换.java

      强制类型转换:转换的数据类型必须是兼容的

    public class QiangZhiZhuanHuan{
        public static void main(String[] args){
            int i1 = 123;
            byte b = (byte)i1;//强制类型转换为byte
            System.out.println("int强制类型转换为byte后的值等于"+b);
        }
    }
    强制转换

      (ps: 整数的默认类型是 int。小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。)

    JAVA变量类型

      类变量:独立于方法之外的变量,用 static 修饰。

        1、类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。

        2、无论一个类创建了多少个对象,类只拥有类变量的一份拷贝,在第一次被访问时创建,在程序结束时销毁。

        3、静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。

        4、静态变量可以通过:ClassName.VariableName的方式访问。

    import java.io.*;
     
    public class Employee {
        //salary是静态的私有变量
        private static double salary;
        // DEPARTMENT是一个常量
        public static final String DEPARTMENT = "开发人员";
        public static void main(String[] args){
        salary = 10000;
            System.out.println(DEPARTMENT+"平均工资:"+salary);
        }
    }
    Employee.java

      实例变量:独立于方法之外的变量,不过没有 static 修饰。

        1、实例变量声明在一个类中,但在方法、构造方法和语句块之外;

        2、实例变量在对象创建的时候创建,在对象被销毁的时候销毁;

        3、实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;

        4、实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

        5、实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

    import java.io.*;
    public class Employee{
       // 这个实例变量对子类可见
       public String name;
       // 私有变量,仅在该类可见
       private double salary;
       //在构造器中对name赋值
       public Employee (String empName){
          name = empName;
       }
       //设定salary的值
       public void setSalary(double empSal){
          salary = empSal;
       }  
       // 打印信息
       public void printEmp(){
          System.out.println("名字 : " + name );
          System.out.println("薪水 : " + salary);
       }
     
       public static void main(String[] args){
          Employee empOne = new Employee("RUNOOB");
          empOne.setSalary(1000.0);
          empOne.printEmp();
       }
    }
    
    
    /*$ javac Employee.java 
     * $ java Employee
     *名字 : RUNOOB
     *薪水 : 1000.0
     */
    Employee.java

      局部变量:类的方法中的变量。

        1、局部变量声明在方法、构造方法或者语句块中,只在声明它的方法、构造方法或者语句块中可见;

        2、局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;

        3、局部变量是在栈上分配的。

        4、局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

    package com.runoob.test;
     
    public class Test{ 
       public void pupAge(){
          int age = 0;
          age = age + 7;
          System.out.println("小狗的年龄是: " + age);
       }
       
       public static void main(String[] args){
          Test test = new Test();
          test.pupAge();
       }
    }
    
    //小狗的年龄是: 7
    Employee.java

    修饰符

     

    访问控制修饰符

      default:在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

      private :在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

      public :对所有类可见。使用对象:类、接口、变量、方法

      protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

    访问控制
    修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
    public Y Y Y Y Y
    protected Y Y Y Y/N(说明 N
    default Y Y Y N N
    private Y N N N N

    访问控制和继承

    • 父类中声明为 public 的方法在子类中也必须为 public。

    • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。

    • 父类中声明为 private 的方法,不能够被继承

     

    非访问修饰符 

      static 修饰符,用来修饰类方法和类变量。

        静态变量:static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

        静态方法:static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据

        对类变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问。

      

      final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。   

        final 方法

        • 父类中的 final 方法可以被子类继承,但是不能被子类重写。
        • 声明 final 方法的主要目的是防止该方法的内容被修改。   

        final 类

        • final 类不能被继承,没有类能够继承 final 类的任何特性。

          

      abstract 修饰符,用来创建抽象类和抽象方法。

        抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。

        抽象方法:抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。

      

      synchronized 修饰符 声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。

      volatile 修饰符 volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

      transient 修饰符 序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。

    运算符

    算数运算符

    操作符描述例子
    + 加法 - 相加运算符两侧的值 A + B 等于 30
    - 减法 - 左操作数减去右操作数 A – B 等于 -10
    * 乘法 - 相乘操作符两侧的值 A * B等于200
    / 除法 - 左操作数除以右操作数 B / A等于2
    取余 - 左操作数除以右操作数的余数 B%A等于0
    ++ 自增: 操作数的值增加1 B++ 或 ++B 等于 21(区别详见下文)
    -- 自减: 操作数的值减少1 B-- 或 --B 等于 19(区别详见下文)


    关系运算符
     

    运算符描述例子
    == 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假。
    != 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
    检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)为假。
    检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
    >= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
    <= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。

    位运算符

    操作符描述例子
    如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100
    | 如果相对应位都是 0,则结果为 0,否则为 1 (A | B)得到61,即 0011 1101
    ^ 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001
    按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 (〜A)得到-61,即1100 0011
    <<  按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
    >>  按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
    >>>  按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111

    逻辑运算符

    操作符描述例子
    && 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 (A && B)为假。
    | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 (A | | B)为真。
    称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 !(A && B)为真。

    赋值运算符

    操作符描述例子
    = 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
    + = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A
    - = 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C - A
    * = 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A
    / = 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A,C 与 A 同类型时等价于 C = C / A
    (%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A
    << = 左移位赋值运算符 C << = 2等价于C = C << 2
    >> = 右移位赋值运算符 C >> = 2等价于C = C >> 2
    &= 按位与赋值运算符 C&= 2等价于C = C&2
    ^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2
    | = 按位或赋值操作符 C | = 2等价于C = C | 2

    运算符优先级

    类别操作符关联性
    后缀 () [] . (点操作符) 左到右
    一元 expr++ expr-- 从左到右
    一元 ++expr --expr + - ~ ! 从右到左
    乘性  * /% 左到右
    加性  + - 左到右
    移位  >> >>>  <<  左到右
    关系  > >= < <=  左到右
    相等  ==  != 左到右
    按位与 左到右
    按位异或 ^ 左到右
    按位或 | 左到右
    逻辑与 && 左到右
    逻辑或 | | 左到右
    条件 ?: 从右到左
    赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
    逗号 左到右
  • 相关阅读:
    atom介绍
    举例介绍重构(译)
    java单双派机制理解
    AngularJS开发指南03:HTML编译器
    AngularJS开发指南02:引导程序
    AngularJS开发指南01:AngularJS简介
    1.angular之Hello World
    31天重构学习笔记(java版本)
    一个农夫的故事 分类: 其他 2015-01-24 16:44 104人阅读 评论(0) 收藏
    一个农夫的故事 分类: 其他 2015-01-24 16:44 103人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/ppzhang/p/15604490.html
Copyright © 2011-2022 走看看