Java基础2

目录

1.2 变量

1.2.1 变量

1.2.2 常量

1.3 运算

1.3.1 运算符

1.3.2 Math类

1.3.3 数值类型的转换

1.3.4 自增与自减运算

1.3.5 条件运算

1.3.6 位运算


接上集。

2.浮点数:float(32bit)、double(64bit)

float:32位,1位符号位,8位阶位(x),23数值位(y)。2^(x-127)*y。能表示的数在数轴上的分布:| | | | | ||| | | | | |

double:64位,1位符号位,11位阶位(x),52数值位(y)。2^(x-1023)*y

float x5 = 20.5f;
double x6 = 50.5;
  • 有效位数:从第一个不为0的位置开始算。比如:0.000132的有效位是三,12.588的有效位是五。float的有效位是6~7位,对于316848785132009856265来说,计算机只能表示前面七位(3168487)。
  • 超范围运算,结果可能不对,只保留最右侧的有效位,第一位为符号位,0正1负。
  • float和int的精度对比:越靠近0,float精度越高。数值越大,int精度更高。

3.布尔型:boolean(32位)

boolean x7 = true;
boolean x8 = false;
  • 为什么布尔型要占32位不是1位(用0和1表示)

 

数据越多排队概率越大,大类型的比例提高,可以减少数据排队的概率,所以布尔型要占32位而不是1位。

4.字符型:char(具体有几位,根据编码来决定8(ascii)/16(unicode)/24(utf-8)/32(utf-32)位)

  • 字符——>符号——>几何图形
  • char x9 = 'a';//单引号表示,只能有一个符号
    char x10 = '8';
    int aa = x9;//char——>int
    char cc = (char)aa;//int-强制类型转换->char
    int m = x9 + x10;
    int n = x9 * x10;
    • 使用编码来存储字符,可以节省空间。因为显示一个字符,也就是显示一个图形,往往需要很多像素点。存储一个像素点需要56bit,显示多个字符就会需要很多需要很大的空间(比如存储aaaaaaaaaabbbbbbbbbb,需要万以上的bit)。如果有编码,就只用存储编码(最多占用2位的bit)。计算机存储char类型,其实就是存储一些数字,等显示的时候,对照编码表,显示相应的图形。
    • 为什么Word占用的内存比记事本大:因为Word有各种各样的字体,这些字体是通过编码来实现。Word要保存他们对应的编码,所以占用的内存会更大。
    • 输入法的实现:当你输入“f”时,输入法会把“f”对应的编码,去和与“f”有关的编码对比,然后返回值,比如:“fa”、“fen”等。

    1.2 变量

    1.2.1 变量

    • 声明变量:每个声明以分号结束。
    • 变量名命名规则:变量名必须是一个以字母开头并由字母或数字构成的序列。需要注意,与大多数程序设计语言相比,Java中"字母"和"数字"的范围更大。字母包括'A'~'Z'、'a'~'z'、'_'、'$'或在某种语言中表示字母的任何Unicode字符。同样,数字包括'0'~'9'和在某种语言中表示数字的任何 Unicode字符。但空格不能出现在变量名中。变量名中所有的字符都是有意义的,并且大小写敏感。变量名的长度基本上没有限制。此外,保留字不能作为变量名。
    • 变量初始化
    double salary;//变量声明
    salary = 1054.5;//变量初始化
    • 局部变量:定义在方法里面的。一般用于保存一些临时变量,使用前要先赋值。
    • 全局变量:定义在类里面,方法外面的变量。不用赋值也可以使用,会有默认值(0 0.0 false 字符是一个空字符"" 对象是null)。
    • 局部变量和全局变量重名时,局部变量会覆盖全局变量。
    • 无static标识的为非静态变量,想要访问就要先new一个变量。
    • 有static的为静态变量,可以直接通过访问。方法里面直接访问,方法外通过类名访问。
    static int app;

    1.2.2 常量

    • 使用关键字final表示常量。
    • 定义时必须要给初始值。
    • final修饰的变量只能被赋值一次,一旦赋值就不能再更改了。
    • final可以修饰全局变量和局部变量。
    • 习惯上,常量名全部大写。
    • final通常和static一起用。
    • 在Java中,经常希望某个常量可以在一个类中多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。需要注意的是类常量的定义位于main方法的外部。在同一个类中的其他方法也可以使用这个常量。如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

       

    final double PI = 3.14;
    public static final double PI = 3.14;
    final的作用:
    1. final修饰的基本类型不可以第二次赋值。
    2. final修饰的引用类型不可以第二次改变指向。
    3. final修饰的类不可以被继承。
    4. final修饰的方法不可以被重写。
    5. final防止指令重排序,遏制流水线优化,保障多线程并发场景下的可见性。

    1.3 运算

    1.3.1 运算符

    System.out.println(5+2);//7
    System.out.println(5+"7");//57
    System.out.println(5/2);//2
    System.out.println(5.0/2);//2.5
    //System.out.println(8/0);//会报错:byzero。0不可以做除数
    System.out.println(8.0/0);//Infinity 无穷大
    System.out.println(5%2);//1
    System.out.println(3+8*9.2/2);//39.8

    1.3.2 Math类

    在Math类中包含了各种各样的数学函数。

    double a = Math.sqrt(4);//2.0 计算一个数值的平方根
    double b = Math.pow(5,2);//25.0 计算5^2
    开根号公式
    先找一个整数,其平方最接近21(但是小于等于21)结果是16(4*4=16)。
    重复以下步骤
    1. 21-16=5 5*100=500
    2. 找一个最大x,使(4*20+x)*x最接近(小于等于)500。乘4,是因为目前已经找到的值为4。结果是x = 5。
    1. 500-425=75 75*100=7500
    2. 找一个最大x,使(45*20+x)*x最接近(小于等于)7500。乘45,是因为目前已经找到的值为4.5(小数点忽略不计)。结果是x = 8。

    1.3.3 数值类型的转换

    byte x1 = 10;
    short x2 = 32000;
    int x3 = 30;
    long x4 = 50L;
    
    //自动类型转换 小碗——>大碗
    short s1 = x1;
    int s2 = x2;
    long s3 = x3;
    float s4 = x3;
    float s5 = x4;
    
    //强制类型转换 大碗——>小碗
    int m1 = (int)x4;
    byte m2 = (byte)x2;//0
    //因为short型会有16位表示
    //但是byte只能表示8位,于是会取最右边的8位
    //x2的二进制的最右边的8位恰巧都是0,所以结果是0

    图为自动类型转换图,6个实心箭头,表示无信息丢失的转换;3个虚箭头,表示可能有精度损失的转换。

    1.3.4 自增与自减运算

    ++/--在前,先完成加1;++/--在后,先使用原来的值。

    int n = 3;
    int m = n++;//结果:k=3 n=4 这个式子是将n加一之前的值赋值给变量m 
    int k = ++n;//结果:k=4 n=4 这个式子是加n加一之后的值赋值给变量m
    例子1:
    arr默认初始值为0。
    arr[i] = i++的值为[0,0,2,0,4]
    arr[i] = ++i的值为[1,0,3,0,5]
    例子2:
    答案:1 0 1
    对于代码2为什么是0:
    • 步骤一:保存 x 的当前值:在执行后置自增运算符 ++ 时,Java 会先将 x 的当前值保存起来。因为此时 x 的值为 0,所以保存的值就是 0。
    • 步骤二:对 x 进行自增操作:完成值的保存后,x 的值会进行自增操作。由于 x 原本为 0,自增后 x 的值变为 1。
    • 步骤三:将保存的值赋给 x最后,Java 会将之前保存的 x 的值(也就是 0)重新赋给 x。这是因为后置自增运算符 ++ 是先返回变量的当前值,再进行自增操作。所以在赋值操作中,赋给 x 的是自增前保存的值 0。
    简:++运算符的优先级大于=,先++(此时x=1),但是因为后缀++的特点,赋值时会赋值0。

    1.3.5 条件运算

    与:&&,或:||
    &&和||运算符是按照短路的方式来求值,如果第一个操作数已经能够确定表达式的值,则不会计算第二个操作数。
    实际应用中可以将有风险表达式的放在第二个。

    1.3.6 位运算

    计算时,要用补码来计算,得到的结果为补码。
    1. & 按位与,同1位1。
    • 10&8 结果为8
    • -10&12 结果为4
    1. | 按位或,同0为0。
    2. ~ 取反,1—>0,0—>1。
    3. ^ 异或,相异为1,相同位0。
    例子1:
    例子2:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值