zoukankan      html  css  js  c++  java
  • JAVA语言基础

    1.枚举类型的用法

      1枚举类型是引用类型!

      2枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。

      3可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

      4)可以用 变量名.valueOf("字符串")将字符串转化为枚举类型。

      5)可以用 for(Size value:Size.values()){

    System.out.println(value);将枚举值都显示出来。

    例如

    public class EnumTest {

    public static void main(String[] args) {

    Size s=Size.SMALL;

    Size t=Size.LARGE;

    //s和t引用同一个对象?

    System.out.println(s==t);  //

    //是原始数据类型吗?

    System.out.println(s.getClass().isPrimitive());

    //从字符串中转换

    Size u=Size.valueOf("SMALL");

    System.out.println(s==u);  //true

    //列出它的所有值

    for(Size value:Size.values()){

    System.out.println(value);

    }

    }

    }

     enum Size{SMALL,MEDIUM,LARGE};

    运行结果

            

    2.字串转为数字的基本方法,字符串联接操作

      1int number = Integer.parseInt(numberString );

      2)Integer.parseInt方法将 String 转为数字 ( int)

      3)Integer 属于包 java.lang,它“封装”了一个int类型的整数,因此,它是原始数据类型int的“包装类”。

    例如

    以下代码的输出结果是什么?

    int X=100;

    int Y=200;

    System.out.println("X+Y="+X+Y);

    System.out.println(X+Y+"=X+Y");

    为什么会有这样的输出结果?

        

    直接显示括号中引号中的字,+”号连接上数字但不显示

    3.为什么double类型的数值进行运算得不到“数学上精确”的结果?

       这个涉及到二进制与十进制的转换问题。N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(100次幂)+4×(10-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(20次幂)+0+1×(2-2次幂)=十进制的3.25

    double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2n次方)。

      

       举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应21,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)11.10(对应十进制的3.5)之间选择。

       简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

       解决精度损失方法:

    使用BigDecimal

     

    4.反码,补码,原码的理解:

    在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念。

      1、机器数

    一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

    比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011

    那么,这里的 00000011 10000011 就是机器数。

      2、真值

    因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值13110000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

    例:0000 0001的真值 = +000 0001 = +11000 0001的真值 = 000 0001 = 1

    对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.

    1) 原码

    原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

    [+1]= 0000 0001

    [-1]= 1000 0001

    第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

    [1111 1111 , 0111 1111]

    [-127 , 127]

    原码是人脑最容易理解和计算的表示方式.

    2) 反码

    反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

    [+1] = [00000001]= [00000001]

    [-1] = [10000001]= [11111110]

    可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

    3) 补码

    补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    [+1] = [00000001]= [00000001]= [00000001]

    [-1] = [10000001]= [11111110]= [11111111]

    对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

    5.在运行时读取用户输入

    方法一:使用JOptionPane类的showInputDialog方法。

            

                 String firstNumber = JOptionPane.showInputDialog(Enter :" );

    方法二:使用Scanner

    mports java.util.*;

    Scanner in=new Scanner(System.in);

    System.out.print(What is your name?);

    String name=in. nextLine();

    Scanner类有nextInt,nextDouble等方法。

    6.变量间的类型转换

    自动类型转换是安全的:

    int      intValue=100;

    long   longValue=intValue;

    强制类型转换时,可能会引起信息的损失。

    double doubleValue=1234567890;

    float floatValue=(float)doubleValue;

    System.out.println(floatValue);  //1.23456794E9

  • 相关阅读:
    RestTemplateConfig写法,用于配置Template引擎模板
    RedisUtil写法,好用
    ftpUtil写法,记录一下
    生成唯一id写法,雪花算法
    base64编码转图片,图片转base64编码
    MultipartFile上传图片的写法,记录一下。
    httpClientUtil的put请求
    httpClientUtil的post请求
    python time和datetime
    ubuntu16.04TLS软件源update
  • 原文地址:https://www.cnblogs.com/Zhanghaonihao/p/5942574.html
Copyright © 2011-2022 走看看